2010-07-20 16 views
1

J'ai un projet dans lequel je dois rassembler beaucoup d'enregistrements et les modifier en fonction de certains critères.Grands datsets .net et serveur SQL?

Fondamentalement, nous avons un système où les utilisateurs peuvent télécharger des documents. Ces documents sont marqués dans la base de données pour des raisons de validation par d'autres utilisateurs. Nous validons les fichiers en fonction de certains critères, puis les marquons comme étant valides. Nous avons donc 2 colonnes isValid et validées.

Je ne peux pas compter sur la base de données pour valider les fichiers, j'ai donc une application qui fait un peu de travail pour les valider. Il pourrait potentiellement y avoir des centaines de milliers de fichiers à valider. Quelle est la meilleure approche pour l'application pour itérer la base de données? Une idée que j'avais, était d'écrire un SP pour tirer le nombre TOP des enregistrements qui n'ont pas le drapeau validé défini à vrai. Ensuite, exécutez une autre requête pour voir s'il reste des enregistrements. Si c'est le cas, réexécutez ce même SP, tirez les enregistrements et traitez-les. Je ne suis pas sûr de la façon dont l'application traiterait cette quantité d'enregistrements.

+1

L'utilisation de paragraphes dans le futur - plus facile à lire, plus il est facile de vous aider. –

+0

Je le fais habituellement, pour une raison quelconque, ils n'ont pas été traduits par la poste. – DDiVita

Répondre

2

Votre approche est assez saine. J'ai utilisé une approche similaire par exemple pour les mailings de masse (lire le top 1000, faites jusqu'à ce que vous manquiez d'enregistrements). La bonne chose est que vous ne devez jamais tirer plus de X records, ce qui maintient vos boucles bien vite. Si cela ne fonctionne pas, vous pouvez ajouter Service Broker et placer une FILE D'ATTENTE à laquelle vous ajoutez des ordres de validation que les processus écoutent. Cette approche ultérieure vous permet en fait d'avoir facilement plusieurs lecteurs qui effectuent la validation. Cela n'a de sens que si la validation est un goulot d'étranglement (car cela prend du temps - vous ne dites jamais ce que la validation fait réellement).

+0

Le traitement comme ceci est fondamentalement une file d'attente. Si une haute performance/débit est nécessaire, la table doit être conçue avec la mise en file d'attente à l'esprit: http://rusanu.com/2010/03/26/using-tables-as-queues/ –

+0

Le problème avec ceci est que sans mise à jour vous ne pouvez pas facilement mettre en plusieurs lecteurs. Ainsi, il est bien pour quelque chose qui n'a pas un besoin élevé de traitement, mais l'exécution de 300 processus tirant les articles les plus récents est un peu plus compliqué que juste un haut choisi. – TomTom

-2

Je commencerais par regarder BulkRead et BulkWrite contre le db. Je n'ai pas personnellement eu de raison de les utiliser, mais je crois qu'ils seront assez proches de ce dont vous avez besoin: un moyen très rapide d'extraire des données de la base de données, puis un moyen très rapide d'écrire sur la base de données ainsi que.

+0

Assez exactement pas ce que l'utilisateur a besoin. Gratulations. – TomTom

1

Avez-vous essayé d'utiliser des colonnes FILESTREAM dans SQL Server? Sinon, here est une brève description. Essentiellement, vos documents pourraient être stockés physiquement dans le système de fichiers, mais toujours traités par SQL Server comme faisant partie intégrante de votre base de données, ce qui signifie que vous ne devriez pas mettre à jour les enregistrements avec de grandes colonnes BLOB et/ou serait capable d'utiliser des appels système de fichiers directs pour gérer les documents eux-mêmes.

Juste une idée.