2016-05-28 14 views
1

Ich muss 40 Millionen Datensätze aus einer .csv Datei in eine Datenbank einfügen und unten ist der Prozess, den ich befolgte.Wie können Millionen von Datensätzen aus einer CSV-Datei in eine SQL Server-Datenbank eingefügt werden?

  • Windows Service 1:

    • die CSV-Lese
    • die Aufzeichnungen Validierung
    • Einfügen gültige Datensätze in Erfolgstabelle (Zwischentabelle) SqlBulkCopy verwenden.
  • Windows Service 2.

    • Erste 10 000 Datensätze aus tisch zu einer Zeit
    • eine foreach für diese 10 000
    • lief jeden Datensatz in der Datenbank zu senden in die Haupt einfügen Tabelle.

Windows Service 1 dauert ca. 30-40 Min aber Windows-Dienst 2 dauert ca. 5 Stunden die Aufgabe (Mindestzeit) in Anspruch nehmen. Ich habe 2 Möglichkeiten, dies zu tun, kann aber nicht entscheiden, welches besser und offen für Vorschläge ist.

  1. Erstellen 4 separaten Windows-Dienst und Verarbeitung 40000 Datensätze gleichzeitig
  2. einen Job Uhr verwenden, können wir verwenden, während Schleife
  3. Prozedur aufrufen async von Windows-Dienst

Meine größten hier Zweifel, dass wir verwenden Transaktionen in der Prozedur und arbeiten async damit, weil gemäß meiner Annahme, die Transaktion verwendend, die Tabelle sperrt und anderer Prozess darauf arbeiten muss.

+0

Millionen? SqlBulkCopy ist die einzige. 'foreach 'ist wahrscheinlich das schwache Gebiet. Wenn Sie einen Cursor verwenden, sollten Sie die Abfrage so umschreiben, dass sie auf der Grundlage von Abfragen erfolgt. –

+0

Wir verwenden sqlbulkcopy zu Windows-Dienst 1, aber wir führen bestimmte Validierung in zweiten Windows-Dienstprozedur, so kann Bulkcopy nicht verwenden.Eine andere Sache ist, dass, wenn wir Bulk-Kopie verwenden, lassen Sie eine Reihe von 1 Lakh Datensätze zu einer Zeit eingefügt werden Mit Sql Bulk-Kopie dann selbst wenn ein Datensatz fehlschlägt, muss ich dies protokollieren oder zumindest wissen müssen, welcher Datensatz diesen Fehler hat, was nicht möglich ist mit Bulkcopy – sainath

+1

Bit, wenn ein anderer Ansatz, aber das wäre nichts für SSIS zu tun?Die Integrationsdienste verfügen über eine Masseneinfügung, in der Sie in der Mitte transformieren können. Ich bezweifle sehr, dass es über eine Stunde dauern würde in SSIS – Caz1224

Antwort

2

Ich denke, Sie verwenden das falsche Werkzeug für diesen Job. C# apps könnten den Trick machen, aber es gibt einen viel leistungsfähigeren Weg, dies mit Integrationsdiensten zu tun.

Ich rate hier, aber diese Tabellen in der Mitte sind zu transformieren oder zu überprüfen, oder vielleicht den Import down down?

SSIS kann all diese Dinge mit Log Limit und SQL Bulk Import Tools machen. Momentan mache ich Krankenhausdatenimporte, die jede Nacht etwa 8.000.000 Datensätze sind und ich brauche nur Minuten, nicht Stunden.

Eine gute Lese auch um wie SQL beschäftigt sich mit solchen großen Dateneingänge ist this article

+0

Momentan schaue ich auf ssis und benutze es nie vorher, also würden mir solche Artikel sehr helfen (schaut euch Youtube und Google-Suchergebnisse an). Die Zwischentabelle wird verwendet, weil wir Werte in der csv-Datei haben, die verlinkt sind eine andere Tabelle und wir müssen diesen Primärschlüssel in die Haupttabelle einfügen (wie wir einen Namen von csv haben und wir fügen den Namen in diese Zwischentabelle ein und aktualisieren dann den Primärschlüssel für diesen Benutzer in diese Tabelle und fügen nur den Primärschlüssel ein die zweite Tabelle) – sainath

+0

Ahh ja, ich habe dieses Problem auch in meinem Datensatz. Current Ich führe einen SQL-Befehl aus, der meine Zieltabelle ändert, entfernte den PK und setzte ihn am Ende des Stapels. Ich weiß, es ist ein bisschen riskant, aber ich habe einen Clustered-Index auf diesem Tisch und einen anderen zu erstellen würde in Rechenzeit kauen. Wenn Sie Plural haben, hat es einige großartige SSIS-Sachen dort – Caz1224

+0

Derzeit haben wir nicht SSIS und Plural auf unserem System installiert haben wir andere Möglichkeiten, dies zu tun, weil das Erstellen von SQL-Befehl in Ordnung ist, aber da ein Bankprojekt kann dieses Risiko nicht übernehmen wie die Überprüfung dieser Konten ist wieder eine schwierige Aufgabe für mich. Total verloren jetzt und denke an das Schreiben von 10 Windows-Dienste irgendwelche Vorschläge – sainath