text-file ab bestimmtem substring lesen (ohne komplette Datei zu laden)

DrBonsai

Mitglied
Guten Morgen 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:

1) Datei komplett laden
2) substring auslesen von Endposition des vorherigen Durchlaufs [substr($datei, $endposition_letzter_durchlauf, 50000);] (um den string auf eine verarbeitbare Größe zu reduzieren)
3) $end-tag suchen
4) $endposition_letzter_durchlauf bis $end-tag verarbeiten und in DB übertragen
5) $länge_des_verarbeiteten_strings ermitteln
6) $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
 
Hallo alxy,

die Datei liegt als xml vor. Ich kann allerdings auf dem Server, auf dem meine Seite gehostet ist simplexml etc nicht verwenden. Deswegen verarbeite ich meine Dateien, als wären sie einfache Textdokumente.

Mit fopen() und fread() kann ich aber nicht definieren, an welcher Stelle ich anfangen möchte zu lesen, oder?

mfg,
David
 
Das ist richtig. ich würde allerdings darüber nachdenken auf einen Server umzuziehen, wo du wenigstens diese basic Funktionalitäten installiert hast!
 
Zurück