Bonjour,
Voilà la situation :
J'ai un flux constant de clients, entre 800 et 1000 par jours. Ce nombre devrait diminué pour se stabilisé à 200.
J'ai 3 canal d'acquisition qui sont centralisé/synchronisé dans une table clients (avec actuellement 120'000 records).
Comme je n'ai pas de contrôle la capture dans le différents canaux, je n'ai pas non plus de contrôle sur les doublons potentiels. Je parle de doublons sur l’entité client et non de les valeurs saisies. Car il pourrait y avoir des fautes de frappes ou que sais-je.
Bref j'ai un système qui recherche les doublons potentiels assez efficacement. Mais qui me crée un énorme volume de donnée de résultats. ~6.2 Milliards de lignes pour mes 120'000 clients.
Ce volume est bien trop grand pour notre structure et encore plus par rapport à l’utilité de la donnée une fois que le doublon est qualifié.
Du coup je ne sauvegarde le résultat que si le cas a une forte probabilité d'être un doublon. J'ai réduit à ~250 millions de lignes.
Le résultat est stocké dans cette table :
J'utilise BulkInsert par tranches de 25000 lignes pour écrire le résultat, ce qui fonctionne maintenant assez bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE [dbo].[ClientDoublons]( [IdClient1] [int] NOT NULL, [IdClient2] [int] NOT NULL, [Distance] [float] NULL, CONSTRAINT [PK_ClientDoublons] PRIMARY KEY CLUSTERED ( [IdClient1] ASC, [IdClient2] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] ) ON [PRIMARY]
J'en viens à mon interrogation:
J'ai besoin d'indexer la colonne [Distance] pour le traitement et la qualification des doublons.
Mais si je crée l'index à la fin, ça va prendre au moins 20 minutes donc c'est inimaginable dans un processus de production.
Si je le crée avant de remplir ma table, au bout d'un moment le système fait des timeout car le temps d'écriture devient trop long.
J'ai pensé à diminué le fillfactor, mais ça ne va que retarder le problème.
Je sais que c'est un peu brouillon comme j'explique mon cas. Désole.
Donc, l'un de vous a-t-il un idée ou peut être une approche différente du problème ?
A+
Partager