Quelle est la bonne façon d'insérer des millions d'enregistrements à partir d'un fichier csv dans une base de données SQL Server?

c# csv database sqlbulkcopy sql-server

Question

Je dois insérer 40 millions d'enregistrements d'un fichier .csv dans une base de données. Le processus que j'ai suivi est .csv ci-dessous.

  • Service Windows 1:

    • Lire le CSV
    • valider les enregistrements
    • insertion d'enregistrements valides dans la table de réussite (table intermédiaire) à l'aide de SqlBulkCopy .
  • Service Windows 2.

    • Obtenir 10 000 enregistrements de la table de réussite à la fois
    • exécuter une foreach pour ces 10 000
    • envoyer chaque enregistrement à la base de données pour l'insérer dans la table principale.

Le service Windows 1 prend environ 30 à 40 minutes, mais le service Windows 2 prend environ 5 heures pour terminer la tâche (durée minimale). J'ai deux façons de le faire mais je ne peux pas décider lequel est le mieux et ouvert à toutes suggestions.

  1. Création de 4 services Windows distincts et traitement de 40000 enregistrements simultanément
  2. À l'aide d'une surveillance d'emploi, nous pouvons utiliser la boucle While
  3. Procédure asynchrone à partir du service Windows

Mon plus grand doute ici est que nous utilisons des transactions dans la procédure et que nous allons y travailler de manière asynchrone car, selon mon hypothèse, en utilisant des verrous de transaction, la table et les autres processus doivent fonctionner.

Réponse populaire

Je pense que vous utilisez le mauvais outil pour ce travail. Les applications c # peuvent faire l'affaire, mais il existe un moyen beaucoup plus puissant de le faire à l'aide de services d'intégration.

Je devine ici, mais ces tableaux au milieu servent à transformer ou à vérifier, ou peut-être à regrouper l'importation?

SSIS peut effectuer toutes ces tâches en utilisant la limite de journal et les outils d'importation en bloc de SQL. Je fais actuellement des importations de données hospitalières, ce qui représente environ 8 000 000 enregistrements chaque nuit. Cela me prend quelques minutes, mais pas des heures.

Cet article présente également une bonne lecture de la manière dont SQL traite les entrées de données aussi volumineuses.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi