Text-file ab bestimmtem substring lesen ohne kom

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

Eh 30 secunden ? webspace ?
eh Administrative aufgaben mit php automation ? wie schräg ist das denn.

Gibt es keinen anständigen server ? von mir aus auch als sql export import .

Aber wie auch immer , versuchs mit perl oder kommandozeilen .
halt irgendwas was das system von sich aus bietet.
php ist halt sterbens langsam. perl ist offt bei solchen sachen schneller , aber am schnellsten sind noch system eigene sachen .
in linux ist man da mit grep etc schnell mit ergebnisen überhäuft :smile:

das stueckweise einlesen machst du mit http://php.net/fgets an die letzte endposition springst du mit http://php.net/fseek

hast du denn gemessen, an welcher stelle genau du die zeit verlierst? nicht das du am einlesen optimierst, dich aber die datenbank ausbremst.

eventuell kannst du ja die eingangsdaten ein einem guenstigeren format liefern (lassen).