Gegenüberstellung der Verarbeitungszeit für csv-Dateien mit Hilfe des Foreach-Schleifencontainers und dem Verbindungs-Manager MULTIFLATFILE

Die Verarbeitung mehrerer csv- oder txt-Dateien habe ich bisher meist mit Hilfe eines Foreach-Schleifencontainers und einem dynamischen Flatfile-Verbindungs-Manager vorgenommen. Abhängig von den zu importierenden Dateien existiert jedoch ein erhebliches Optimierungspotential durch den Einsatz eines anderen Verbindungstypen.

 

Durch eine Prüfungsfrage für die SQL Server Zertifizierung bin ich vor kurzem auf den für mich neuen Verbindungsmanager MULTIFLATFILE aufmerksam geworden. Obwohl dieser Verbindungstyp bereits seit dem SQL Server 2005 existiert (siehe MSDN), wird er bisher scheinbar nur selten eingesetzt.

 

Nach einer Recherche bin ich unter anderem in diesem und diesem Blogbeitrag auf unterschiedliche Ergebnisse gestoßen, was die Verarbeitungsgeschwindigkeit von Textdateien betrifft. Während erstgenannter eine Verbesserung um Faktor 100 feststellt, wird im zweiten Link von einer etwa 48x schnelleren Verarbeitung gesprochen. Daher möchte ich in meinem Blogbeitrag die für mich offenen Punkte wie Auswirkung der Zeilenanzahl der zu importierenden Dateien betrachten und werde anschließend die Verarbeitungsgeschwindigkeiten gegenüberstellen.

 

Für die Testumgebung stehen mir 8 GB Arbeitsspeicher, ein Core 2 Duo mit 2,54 GHz und eine SSD zur Verfügung. Mein Test umfasst die Verarbeitung von 750, 1500 und 3000 Dateien mit je 25, 50, 100 und 500  Zeilen. Alle Dateien sind nach dem Schema Vorname, Name, Land, PLZ und IBAN aufgebaut. Es erfolgt ausschließlich ein Laden der Daten und Übertragen in eine Datenbanktabelle auf den SQL Server.

 

Bevor ich zu den Ergebnissen des Tests komme, möchte ich noch kurz die Frage beantworten, wie sich besagter Verbindungs-Manager erstellen lässt. Dafür muss zunächst unter der Ansicht Verbindungs-Manager „Neue Verbindung“ ausgewählt werden.

 

 

Über das sich öffnende Fenster wird als Typ MULTIFLATFILE ausgewählt und über Hinzufügen erstellt.

 


 

Die anschließende Konfiguration ähnelt dem des Flatfile-Verbindungs-Manager. Nähere Informationen zu den Optionen können diesem msdn Eintrag entnommen werden. Zu beachten ist, dass alle zu importierenden Dateien den gleichen Aufbau haben. Platzhalter, wie man Sie auch vom Foreach-Schleifencontainer kennt, helfen dabei, Dateinamen mit einer bestimmten Zeichenfolge einzulesen.

 


Zu den Ergebnissen:

 

Ähnlich wie in den zuvor erwähnten Blogbeiträgen hat auch bei mir die Verwendung des MULTIFLATFILE Verbindungs-Managers zu erheblichen Verbesserungen der Verarbeitungsgeschwindigkeit geführt. In den folgenden drei Diagrammen wird die Verarbeitungszeit für 750, 1500 und 3000 Dateien mit unterschiedlichen Zeilenanzahlen gegenübergestellt.

Dabei fallen vor allem zwei Punkte besonders auf:

  1. Bei allen einzulesenden Dateien mit 2000 Zeilen ist die Effektivität des MULTIFLATFILE gegenüber dem Einlesen per Foreach-Schleifencontainer rapide zurückgegangen (unabhängig davon ist die 20-fach schnellere Verarbeitung natürlich immer noch beeindruckend). Der Umstieg auf MULTIFLATFILE Verbindungen lohnt also vor allem in Umgebungen, in denen viele kleine Dateien eingelesen werden müssen.
  2. Bereits Schwankungen von wenigen Sekunden führen bei der Verarbeitungszeit zu einer erheblichen Größenänderung des Faktors (zum Beispiel durch veränderte Validierungszeiten des SSIS Pakets). Das fällt vor allem bei der Verarbeitung von sehr vielen Dateien (in meinem Beispiel mehr 1500) auf. Ich habe daher einige Verarbeitungsvorgänge doppelt bzw. dreifach laufen lassen und anschließend den Durchschnitt dieser Zeiten gebildet um gewisse Ausreißer mit einem Faktor von über 100 zu eliminieren.

 

Sollte ich in Zukunft den Anwendungsfall haben, mehrere Flatfiles verarbeiten zu müssen, werde ich auf den MULTIFLATFILE Verbindungs-Manager zurückgreifen (sofern es die gegebenen Bedingungen zulassen). Wenn Ihr ähnliche Erfahrungen mit dem Verbindungs-Manager gemacht habt oder Ihr bei der Verarbeitung von csv-Dateien anders vorgeht, freue ich mich auf Kommentare.

Schreibe einen Kommentar