Vinzenz Mai: Performance bei Textzerlegung

Beitrag lesen

Hallo,

Hier als Beispiel eine Zeile aus der Datei. Mit explode oder regex wüsste ich nicht wie ich da rangehen soll.

1002201000000111110000000000  0000000815            73020100  000000000051,10 WARENSEND KLEINTEIL   Herr Müller         Nr.12345LiefSch231

Die Sache mit mit den substrings mit bestimmten Start- und Endpunkten ist hier die nach wie vor die einzige Lösung die mir einfällt.

und vermutlich sowieso die performanteste :-)
Schneller als die direkte Angabe der "Schnittpunkte" kann das Findenlassen der Schnittpunkte kaum sein. Trimmen sollte auch nicht zuviel Zeit kosten.
Das solltest Du allerdings auch messen können.

Miss bitte, wieviel Zeit Du gewinnst, wenn Du Deine Datei auf einen Rutsch schreibst. Ermittle den Flaschenhals. Ich gehe davon aus, dass Du dem Skript genügend Speicher zur Verfügung stellen kannst, dass es praktisch alle Operationen im RAM durchführen kann. Ständige Lese- oder Schreiboperationen auf der Festplatte bremsen ein Skript genauso aus wie unnötig viele DB-Operationen.

Dann habe ich mir die Geschichte mit Prepared-Statements angeschaut, das hatte dann aber länger gedauert. Muss mich da nochmal ein bisschen einlesen...

Dabei waren aber jeweils nur ~250 Datensätze in der Tabelle, deswegen habe ich noch den Schritt eingebaut, dass nach 300 Sätzen ein Insert erfolgt, und $query wieder geleert wird.

Möglicherweise erreichtest Du mit Deinen Multiinserts hier die maximale Paketgröße :-)

Haben die Multi-Insert-Anweisungen etwas gebracht? Wenn ja, wieviel?
Prepared Statements haben bei der Ausführung in einer Schleife den Vorteil, dass das SQL-Statement nur ein einziges Mal "übersetzt" werden muss. Dadurch sollte sich bei genau solchen Anwendungsbeispielen wie Deinem ein Performancegewinn erzielen lassen.

Welches DBMS setzt Du ein?

Freundliche Grüße

Vinzenz