Soll ich mit SSIS oder Multithreaded C # -Anwendung flache Dateien in Datenbank zu laden?

StackOverflow https://stackoverflow.com/questions/146732

  •  02-07-2019
  •  | 
  •  

Frage

Innerhalb von SQL Server Integration Services (SSIS) gibt es die Möglichkeit zur Einrichtung einer Verbindung zu einer flachen Datei, die Millionen von Datensätzen halten können und dass Daten in eine SQL-DB geschoben. Darüber hinaus kann dieser Prozess von einer C # -Anwendung durch Bezugnahme auf und mit dem Namensraum Microsoft.SqlServer.Dts.Runtime aufgerufen werden.

Würde eine flache Datei mit Millionen von Datensatz am besten mit SSIS ran, oder würde das Kollektiv „Sie“ lieber c # app mit mehreren Worker-Threads (ein lesen und die Zeile Variable hinzufügen, einem von diesen Variablen schreiben die DB) und eine „Mutter“ Klasse, die diese Themen verwaltet? (Die Dev-Box verfügt über zwei CPUs)

Ich habe diese Daten zu sehen ( SQL-Team-Blog ) besagt, dass für eine flache Datei mit einer Million Zeilen, SSIS ist die schnellst:

Process                Duration (ms)
--------------------   -------------
SSIS - FastParse ON         7322 ms 
SSIS - FastParse OFF        8387 ms 
Bulk Insert                10534 ms 
OpenRowset                 10687 ms 
BCP                        14922 ms

Was denken Sie?

War es hilfreich?

Lösung

Ich kann nur sprechen für mich und meine Erfahrung. Ich würde mit SSIS gehen, da dies einer der Fälle, wo Sie neu zu erfinden könnte unnötig das Rad. Dies ist eine sich wiederholende Aufgabe, die bereits von SSIS gelöst wurde.

Ich habe etwa 57 Arbeitsplätze (Kombination von DTS und SSIS), die ich auf einer täglichen Basis zu verwalten. Vier davon routinemäßig Griff zwischen 5-100,000,000 Aufzeichnungen exportieren. Die Datenbank, die ich verwalten hat über 2 Milliarden Zeilen. Ich habe die Verwendung eines Skript-Task das Datum anhängen, bis auf die Millisekunde, so dass ich den Job mehrmals am Tag laufen kann. Getan, dass nun etwa 22 Monate. Es war großartig!

SSIS-Jobs können auch geplant werden. So können Sie es und vergessen Sie es. Ich mache alles überwachen jeden Tag, aber die Datei Teil hat der Handhabung nie abgebaut werden.

Das einzige Mal, dass ich auf eine benutzerdefinierte C # Programm zurückgreifen musste, war, als ich die sehr große Dateien in kleinere Stücke aufzuteilen benötigt. SSIS ist Hund langsam für diese Art von Sachen. A eine Gig Textdatei dauerte etwa eine Stunde, um die Skript Aufgabe zu teilen, verwenden. Das C # benutzerdefinierte Programm behandelt, dass in 12 Minuten.

Am Ende, benutzen Sie einfach, was Sie sich wohl fühlen werden.

Andere Tipps

SSIS ist unglaublich schnell. Darüber hinaus, wenn es etwas, das immer wieder auftreten muss, können Sie Setup ein Agent es planmäßig abzufeuern. Schreiben Sie es selbst ist eine Sache, versuchen, es zu machen Multithreaded bekommt viel komplizierter, als es zunächst erscheint.

Ich würde empfehlen, SSIS 9 mal von zehn.

Ich kann nicht sehen, wie mehrere Threads Leistung in diesem Fall helfen würde. Wenn große Datenmengen zu übertragen, ist der Hauptengpass in der Regel Disk-I / O. mehrere Threads Laichen würde dieses Problem nicht lösen, und meine Vermutung wäre, dass es noch schlimmer machen würde, da es einführen würde Streit zwischen den mehreren Prozessen Sperren der Datenbank zu treffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top