Qual è il modo corretto di inserire milioni di record da un file CSV in un database SQL Server?

c# csv database sqlbulkcopy sql-server

Domanda

Devo inserire 40 milioni di record da un file .csv in un database e di seguito è il processo che ho seguito.

  • Servizio Windows 1:

    • Leggere il CSV
    • convalidare i record
    • inserimento di record validi nella tabella di successo (tabella intermedia) utilizzando SqlBulkCopy .
  • Servizio Windows 2.

    • Ottenere 10.000 record dalla tabella dei successi alla volta
    • gestendo un foreach per questi 10 000
    • invio di ogni record al database da inserire nella tabella principale.

Windows Service 1 richiede circa 30-40 minuti ma Windows Service 2 impiega circa 5 ore per completare l'attività (tempo minimo). Ho 2 modi per farlo, ma non posso decidere quale sia migliore e aperto a suggerimenti.

  1. Creazione di 4 servizi Windows separati ed elaborazione di 40000 record contemporaneamente
  2. Usando un job watch possiamo usare il ciclo while
  3. Procedura di chiamata asincrona dal servizio Windows

Il mio più grande dubbio qui è che stiamo usando le transazioni nella procedura e lavoreremo asincronamente con esso perché, secondo la mia ipotesi usando i blocchi di transazione, la tabella e gli altri processi devono lavorarci sopra.

Risposta popolare

Penso che tu stia usando lo strumento sbagliato per questo lavoro. Le app in c # potrebbero fare il trucco, ma c'è un modo molto più efficace per farlo usando i servizi di integrazione.

Sto indovinando qui, ma questi tavoli nel mezzo sono per trasformare o controllare, o forse per abbattere l'importazione verso il basso?

SSIS può fare tutte queste cose usando il limite di log e gli strumenti SQL Bulk Import. Attualmente faccio importazioni di dati ospedalieri che sono circa 8.000.000 di registrazioni ogni notte e mi ci vuole una questione di minuti e non di ore da fare.

Una buona lettura anche su come SQL si occupa di input di dati così grandi è questo articolo



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow