Über das Projekt
Aufgabe
Bestehende Datenimporte sollen mit Blick auf Laufzeit und Ressourcenverwendung optimiert werden.
Die besondere Herausforderung hier bestand in der Vielzahl der zu importierenden Formate (CSV, JSON, XML, XLSX), für die jeweils eigene Wege und somit eigene Optimierungen notwendig waren.
Projekt Umsetzung
Umfang
Die Importe werden von einer bestehenden C#-Anwendung durchgeführt. Die Optimierung soll innerhalb dieser Anwendung erfolgen.
Ressourcen
Die vorherige Lösung war sehr speicherintensiv, da für die Importe zuerst alle Zeilen einer Datei gelesen, verarbeitet und anschließend gesammelt in die SQL-Datenbank geschrieben wurden. Da einige der zu importieren Dateien mehr als 200.000 Zeilen groß waren, sind hier schnell pro Import rund 1 GB Arbeitsspeicher belegt worden. Auch wurde dieser Speicher nicht direkt freigegeben, was den Server nach mehreren Importen schnell an seine Grenzen gebracht hat.
Laufzeit
Da erst alle Zeilen eingelesen, verarbeitet und anschließend Zeile für Zeile in die SQL-Datenbank übertragen wurden, kam es zu sehr langen Laufzeiten. Ebenso gab es zu jeder zu importierenden Zeile eine weitere Abfrage an den SQL-Server um zu prüfen, ob der Datensatz bereits vorhanden war. So haben die größten Importe mit > 200.000 Einträgen schnell mehr als 3 Minuten benötigt.
Umsetzung
Zuerst wurde für jeden Dateityp die Möglichkeit geschaffen, Zeile für Zeile eingelesen zu werden. Dadurch wurde es möglich, die Dateien in kleineren Blöcken zu verarbeiten und an die SQL-Datenbank zu übertragen. Nach jeder Übertragung wird der verwendete Speicher direkt wieder freigegeben, wodurch der Server signifikant entlastet wurde. Hierdurch wurde es erstmals möglich, mehrere große Importe zeitgleich durchzuführen.
Zur Optimierung der Laufzeit wurden die Übertragung in die SQL-Datenbank komplett neu gedacht. So werden die Datensätze blockweise in eine temporäre Tabelle geschrieben und am Ende mittels eines MERGE-Statements in die korrekten Tabellen übertragen. Hierdurch konnte auch die Prüfung der einzelnen Zeilen in der Anwendung entfernt werden. Dadurch wurden Laufzeit von < 15 Sekunden für > 200.000 Zeilen erreicht, was die Anforderungen mehr als erfüllen konnte.
Projekt Gallerie
Entdecke Softwarelösungen
die zu dir passen!
Jetzt unverbindliches und kostenfreies Erstgespräch buchen. Ich helfe dir gerne weiter!