2009-08-16 6 views
0

J'ai un tableau des clients. Cette table peut être grande, des millions de lignes. Chaque heure, j'ai une application de console qui passe par tous les clients et met à jour une autre table avec les changements de clients qui se sont produits dans la dernière heure. Ce que je veux faire est de deux choses: (1) L'application de la console (ou le paquetage SSIS) doit être multithread afin que je puisse en exécuter quelques unes pour que la mise à jour se termine plus rapidement. Il doit être intelligent et être capable de sélectionner les clients de manière à ce que deux threads n'exécutent jamais de code pour le même client. (2) Si un nouveau client s'inscrit, il ne devrait pas avoir à attendre une heure ou jusqu'à ce que l'application de la console arrive à lui pour obtenir des données. Il devrait y avoir un autre processus/application qui a une file d'attente de nouveaux clients et lance une analyse à ce sujet. Le problème est que je veux empêcher cette file d'attente d'exécuter du code sur un client si le processus horaire exécute également du code sur ce processus. D'après ce que j'ai lu sur les discussions précédentes ici, SSIS est ce que je veux utiliser. Est-ce correct? SSIS est-il le bon outil?Mettre à jour le tableau avec un processus multithread et mettre à jour certaines lignes en fonction de la priorité

J'ai regardé dans SSIS, et je ne suis pas sûr par où commencer et comment faire l'approche multi-thread pour cela. J'aimerais avoir quelques conseils approximatifs afin que j'ai une meilleure idée de par où commencer et quoi rechercher.

Merci!

Répondre

3

SSIS est le bon outil. La bonne façon de procéder est de créer votre tâche de flux de données et ne vous inquiétez pas du multithreading. SSIS s'en chargera pour vous, en particulier SSIS 2008.

La mesure dans laquelle vous devez vous inquiéter est que vous voudrez être conscient que certaines transformations de flux de données nécessitent que toutes les lignes d'entrée soient traitées avant qu'elles ne produisent sortie du tout. Une transformation Sort, par exemple, doit attendre que toutes les lignes lui aient été transmises, faire le tri, puis commencer à distribuer des lignes triées. Si vous évitez de telles transformations, SSIS sera très heureux d'optimiser le nombre de threads utilisés.


Sur le problème prioritaire, je n'ai pas réfléchi à la question, mais que faire pour que le travail par lots ignore de nouveaux clients. Avoir un autre paquet SSIS exécute les exécutions plus fréquemment, effectuer le traitement sur les nouvelles lignes, puis signaler qu'elles ont été traitées pour la première fois. De cette façon, il ne peut y avoir aucun conflit.

0

Je ne suis pas sûr que SSIS est la voie à suivre. Vous pouvez le faire en utilisant T-SQL pur. Essentiellement, vous voulez que quelque chose traverse les lignes d'une manière non bloquante mais exclusive, avec un processus séparé pour détecter les nouvelles lignes. Chaque ligne "verrouillée" nécessite un traitement supplémentaire.

Utilisez UPDLOCK, ROWLOCK, READPAST par application de console pour gérer la sélection de ligne: "Processing Data Queues in SQL Server with READPAST and UPDLOCK".

Chaque processus possède maintenant une ligne (non bloquante mais exclusive) et il peut être travaillé dessus.

Le transfert de données vers une autre table peut être effectué dans le même code, par exemple, proc stocké.

Vous pouvez même utiliser une boucle WHILE pour continuer le traitement. Réglez-le en cours d'exécution, c'est tout. S'il ne trouve aucune ligne, vous pouvez construire une WAITFOR.

Personnellement, je n'utiliserais pas SSIS.

+0

Veuillez indiquer _why_ si vous n'utilisez pas SSIS. En particulier, comment vos techniques répondent-elles à ses préoccupations concernant la performance? –

+0

Facile. SSIS est encombrant pour ce type de tâche et vous aurez toujours besoin de SQL pour obtenir des données de manière simultanée et sécurisée. Alors pourquoi ne pas le faire en SQL au lieu de le décharger sur un autre outil? Étant donné que c'est un INSERT .. SELECT sur certaines lignes exclusives, n'est-ce pas ce que SQL est conçu pour? Que peut faire SSIS que T-SQL brut ne peut pas? – gbn

Questions connexes