2009-04-09 4 views
0

Je gère un site Web qui permet de gérer beaucoup d'informations pour les cliniques médicales. Une partie de l'application doit télécharger les fichiers patients à partir d'une feuille de calcul Excel. La table des patients contient environ 1 million d'enregistrements et une importation Excel doit insérer ou mettre à jour des dossiers patient de 10, 20 ou 30 000 à la fois. Pendant ce temps, d'autres clients martèlent la table. Le temps de traitement est moins important que la réduction des conflits sur la base de données. Quelles stratégies recommanderiez-vous?Télécharger de grandes quantités de données sur le serveur SQL de production avec un minimum de contention

Je sais que d'autres sites le font effectivement. Salesforce vous permet de télécharger de grandes quantités de données à la fois.

Répondre

0

Si chaque mise à jour de la ligne est indépendante, exécutez une boucle qui obtient une ligne, met à jour la table, obtenir une autre ligne, ...

Ensuite, vous pouvez mettre un retard dans la boucle pour ralentir sa course pour éviter un impact le site principal (une sorte de mesure de charge pourrait être utilisée pour ajuster cela à la volée). Une sorte d'installation de Token Ring comme celle-ci pourrait être utilisée pour effectuer plusieurs mises à jour ensemble.

4

Chargez d'abord la feuille Excel dans une table de transfert, puis décidez si vous souhaitez mettre à jour/insérer les lignes dans un seul lot ou quoi.

Généralement, l'insertion d'un million de lignes d'une table à une autre doit être assez rapide pour s'exécuter pendant que le serveur est sous charge. Vous aurez un verrou pendant l'insertion, mais cela devrait être une question de secondes. À moins que vous ne chargiez des milliards d'enregistrements par minute, ou que votre opération d'upsert soit très intensive, je ne vois pas cela comme un problème.

Si votre upsert est très complexe, il existe plusieurs façons de le faire. Vous pouvez insérer dans un seul lot, mais marquer les enregistrements de production comme incomplets que leurs enregistrements subordonnés sont mis à jour. Vous pouvez marquer les lignes de mise en attente comme non traitées et les traiter en lots.

+0

Si je pouvais attribuer plusieurs upvotes à cela, je le ferais. MonkeyBrother, c'est celui sur lequel vous voulez vous concentrer. –

Questions connexes