Hallo allerseits,
ich habe einige große Text-files (>50MB), die ich verarbeiten und teilweise in verschiedene Datenbank-Tabellen übertragen muss. Das ganze wird eine Routine, die sich mehrmals wöchentlich wiederholt. Dabei muss ich jetzt immer die ganze Datei von oben bis unten durchgehen, nach einem substring suchen, diesen verarbeiten (in der DB einsortieren) und den folgenden substring suchen. Das ganze ist sehr zeitaufwendig. Für 25.000 „substrings“ benötigt das Skript 45 Minuten. Und dann habe ich erst eine von 40 Dateien bearbeitet. => Alle Dateien auf diese Weise zu bearbeiten dauert fast eineinhalb Tage und frisst alle verfügbaren Ressourcen auf.
Zurzeit gehe ich rekursiv so vor:
- Datei komplett laden
- substring auslesen von Endposition des vorherigen Durchlaufs [substr($datei, $endposition_letzter_durchlauf, 50000);] (um den string auf eine verarbeitbare Größe zu reduzieren)
- $end-tag suchen
- $endposition_letzter_durchlauf bis $end-tag verarbeiten und in DB übertragen
- $länge_des_verarbeiteten_strings ermitteln
- $endposition_letzter_durchlauf + $länge_des_verarbeiteten_strings = $endposition_letzter_durchlauf
Da ich meine website bei einem Drittanbieter gehostet habe, kann die Skriptlaufzeit maximal 30sec. betragen. Ich muss deshalb scheibchenweise meine Datei verarbeiten und das Script dann an der neuen Startposition ($endposition_letzter_durchlauf) neu starten.
Nun meine Frage:
Gibt es eine Möglichkeit, schon beim Laden der Datei einen substring zu suchen und nur diesen Teil in eine Variable zu überführen?
Das würde einiges an Ressourcen und Zeit sparen. Dann könnte ich beim Aufruf einer Seite prüfen, ob der aus meinem text-file relevante Inhalt vor mehr als sieben tagen zuletzt aktualisiert wurde und bei Bedarf gezielt den relevanten Teil auslesen und aktualisieren, statt wöchentlich alle Inhalte mit der genannten Methode zu aktualisieren.
Viele Grüße,
David