Unser raketenschneller Datenimport

Vor einiger Zeit haben wir schon einmal über die Excel-Anbindung und den Datenimport unserer Plattform geschrieben (http://optano.net/excel-anbindung/). In diesem Artikel wollen wir nun die technischen Details des Datenimports und des anschließenden Speicherns näher betrachten. Wie bereits erwähnt ist Excel weit verbreitet und wird ohnehin schon in vielen Firmen eingesetzt. Zum Teil sind die Datensätze bereits als Excel-Datei vorhanden, in anderen Fällen können sie einfach nach Excel exportiert werden. Deshalb haben wir uns dazu entschieden, unseren Datenimport auf Excel aufzubauen.

Vom Datenimport…

Natürlich gibt es Fälle, in denen die Daten automatisiert über Nacht importiert werden können, aber darum soll es hier nicht gehen. Wir wollen, dass Daten während der täglichen Arbeit importiert werden können, ohne dass man dafür zum Kaffeeholen oder gar in die Mittagspause gehen muss. In vielen Fällen müssen Datensätze immer wieder importiert werden, weil sie sich stetig verändern bzw. erweitern. Und dafür muss der Import eben so schnell sein, dass er die normalen Arbeitsabläufe nicht stört. Das haben wir auch geschafft, und zwar so:

Wir nutzen Schlüsselspalten um Datensätze zu identifizieren. Wenn also diese Schlüsselspalten in OPTANO mit denen in der Excel-Datei übereinstimmen, dann handelt es sich um den gleichen Datensatz. Es müssen also nur die abweichenden Daten importiert werden. Der Rest bleibt einfach erhalten. Noch nicht vorhandene Datensätze werden natürlich vollständig importiert. Es wird also nicht alles gelöscht und durch die neuen Daten ersetzt, sondern tatsächlich nur das importiert, was noch nicht da war. Ein wunderschöner Nebeneffekt dieses Vorgehens ist, dass das Datenobjekt das gleiche bleibt und damit auch alle Referenzen auf dieses Objekt erhalten bleiben – und es geht wesentlich schneller.

…zum Speichern.

Doch was nützt der schnellste Datenimport, wenn danach das Speichern der Daten ewig dauert. Das Speichern des Entity-Frameworks war uns zu langsam und deshalb haben wir sehr viel Zeit und Gedanken investiert, um dem schnellen Datenimport auch ein schnelles Speichern folgen zu lassen. Wir setzen nun auf Tabellenwertparameter in Verbindung mit sogenannten stored procedures. Dabei wird anstelle von unzähligen SQL-Statements eine einzige Tabelle im Speicher des SQL-Servers erstellt. Anhand dieser Tabelle speichern die stored procedures dann die Daten. Daraus folgen viel weniger Connections und somit kürzere Round-Trip-Zeiten – das Speichern vergeht wie im Flug! (Wer mehr darüber wissen möchte, kann dies gerne unter https://msdn.microsoft.com/de-de/library/bb510489.aspx nachlesen.)

Und so schnell sind wir nun!

Wir waren natürlich selbst sehr gespannt, wie schnell das alles nun ist. Kurzerhand haben wir einen kleinen Testlauf mit unterschiedlichen Anzahlen an Datensätzen gemacht – von 250 bis 50.000 – und nur für OPTANO sogar mit 1.000.000 Datensätzen[1] à 12 Spalten. Den Vergleichstest haben wir mit OPTANO und dem Entity Framework 6.1 [2] durchgeführt. Die Zeitmessung beinhaltet das Erstellen neuer Objekte, das Befüllen dieser mit Werten und das Speichern in der Datenbank. Schließlich haben wir den Mittelwert über 10 Testdurchläufe gebildet (wobei der beste und der schlechteste außen vor gelassen wurden). Das überzeugende Ergebnis können Sie in den unten abgebildeten Diagrammen sehen. Der Vergleich zeigt ganz deutlich: OPTANO braucht nur ca. 10% der Zeit – und bei 1.000.000 Datensätzen mit 12 Spalten gerade einmal 2,5 Minuten!

[1]: 1.000.000 ~= 10^2 ist die maximale Anzahl Zeilen, die Excel verarbeiten kann. Damit ist OPTANO bestens für die größt-möglichen Excel-Arbeitsblätter gewappnet. Siehe auch: https://support.office.com/en-us/article/Excel-specifications-and-limits-CA36E2DC-1F09-4620-B726-67C00B05040F

[2]: Entity Framework ist die von Microsoft empfohlene Datenzugriffstechnologie, siehe auch: https://msdn.microsoft.com/en-us/data/ef.aspx