Speicher vs. Performance

Nun wissen wir, wie jeder einzelne Datensatz auch ein Datenblatt erzeugt, das sich wunderbar auslagern lässt. So können Sie im Extremfall Millionen von Datensätzen bearbeiten, ohne dass Ihnen der Speicher ausgeht.

Einziges Problem: Irgendwann wird das furchtbar langsam. Denn Hunderttausende oder gar Millionen von Datenblättern einzeln nach dem Parsen auslagern, zum Mappen wieder einlagern, das Ergebnis des Mapping-Vorgangs für dieses Datenblatt wiederum auslagern und am Ende für die Ausgabe des Ergebnisses wieder einlagern, das sind auch ebenso viele Plattenzugriffe. Irgendwann wird das zu einem furchtbaren Bremsklotz. Daher ist es manchmal auch sinnvoll die Daten in Blöcke zu portionieren. Nehmen wir als Beispiel wieder die flache CSV-Struktur, mit ein paar mehr Datensätzen.


4711,Maier,Harald,Hamburg
4712,Müller,Hugo,Frankfurt Main
4713,Huber,Toni,München
4714,Schulz,Hans,Stuttgart
4715,Schmitz,Erwin,Hannover
4716,Peters,Hanne,Dortmund


Wir wollen nun erreichen, dass jeweils drei Datensätze in einem Datenblatt erscheinen (in der Realität werden Sie eher hundert oder auch tausend Datensätze in einem Block haben wollen). Dazu wäre es schön, wenn die Daten z. B. folgendermaßen kämen.


Trennzeile
4711,Maier,Harald,Hamburg
4712,Müller,Hugo,Frankfurt Main
4713,Huber,Toni,München
Trennzeile
4714,Schulz,Hans,Stuttgart
4715,Schmitz,Erwin,Hannover
4716,Peters,Hanne,Dortmund


Natürlich kommen die Daten nicht so rein. Weder wird Ihr Partner Ihnen den Gefallen mit der Trennzeile tun, noch Ihre Datenbank. Aber dafür bieten wir den praktischen Preparser TokenStreamSplitter (es gibt eine ältere Variante, den TokenFileSplitter, aber der neuere Preparser arbeitet performanter).


Für dieses Beispiel setzen wir nur zwei Werte in der Konfiguration.


rows=3
header=Trennzeile


Das sagt folgendes aus: Füge am Anfang der Daten und dann immer nach drei Zeilen eine Zeile mit dem Text Trennzeile ein. In der Quellstruktur fügen wir nun oben einen Knoten ein, der auf die Zeile Trennzeile reagiert, den Text in ein Feld speichert und im Ausgang einfach ignoriert wird. Der Ausgangsknoten Knoten hat natürlich wieder den Pfad SQL-Knoten.


images/download/attachments/189463949/317-version-1-modificationdate-1738746778706-api-v2.png


Und schon haben wir, was wir wollen. Je drei Datensätze landen in einem Datenblatt.


images/download/attachments/189463949/318-version-1-modificationdate-1738746778705-api-v2.png


In einem realistischen Szenario hätten Sie eher eine Million Datensätze, die Sie so in Datenblätter zu je tausend aufsplitten können. Oder, wenn Sie ordentlich Speicher zur Verfügung haben, auch je zehntausend. Einerseits wird Ihnen so nicht der Speicher volllaufen, andererseits halten sich die Aus- und Einlagerungsvorgänge in Grenzen.

Dieses Prinzip funktioniert auch bei Daten mit fester Länge, allerdings nur, wenn jeder Datensatz in einer Zeile kommt. Ist dagegen nur die gleiche Länge von z. B. 512 Zeichen in jedem Datensatz maßgeblich und Zeilenumbrüche fehlen, dann kommen Sie hier leider nicht weiter. Da bleiben Ihnen nur die einzelnen Datenblätter.