ich möchte eine Logdatei die teilweise mehrere MB gross ist in eine mysql Datenbank importieren.
Nur die Grösse ist natürlich nicht unbedingt sehr planbar aber ich weiss es vorher eben nicht.
Kann ich das in einen Stream einlesen? (habe ich aber noch nicht gemacht wie?)
oder gibt es andere Möglichkeiten das mit PHP und nicht unbedingt auf Konsole zu machen.
Danke für Tips oder Lösungsvorschläge
Ankündigung
Einklappen
Keine Ankündigung bisher.
Log Datei einlesen aber grosse Datei
Einklappen
Neue Werbung 2019
Einklappen
X
-
Log Datei einlesen aber grosse Datei
Stichworte: -
-
Ich würds auch per Scream machen.
Vor einigen Jahren hatte ich mal mit 600MB XML Datein zu tun, die ich verarbeiten musst. Okay es war eine C++ Anwendung die ich baute. Anfangs lass ich die ganze Datei auf ein mal ein und die Anwendung war mega lam. Dann las ich es als Stream ein und es war ca. 100x schneller.
Notfalls einfach etwas rumprobieren wenn du verschiedene Ideen hast.
-
Nein, sowas gibt es nicht. Um "vorne" etwas abzuschneiden, muss die Datei komplett neu geschrieben werden.
Einen Kommentar schreiben:
-
Log Datei
Zitat von lstegelitz Beitrag anzeigenIn einen Stream einlesen? Naja... nein.
Du "streamst" die Daten durch deine Anwendung (ein gebräuchlicher Weg um resourcenschonend mit großen bzw. unbekannten Datenmengen umzugehen). Es bedeutet, das du deine Daten nicht komplett in einen großen Puffer einliest, sondern nur Stückchen für Stückchen liest und verarbeitest, in deinem Fall böte sich zeilenweise an.
Hast du bereits eigene Ansätze?
Ich habe bei meiner Logdatei eine Maximalgröße wegen der Anzeige in einer textarea. Wie kann ich die ersten Zeilen am besten löschen, wenn die Datei zu groß ist ?
Munter !
Einen Kommentar schreiben:
-
regulärer Ausdruck falsch ausgegeben - dadurch kein Ergebnis bei preg_match_all
Mit den einfachen Dateifunktionen sollte das ganze dann tatsächlich kein Problem sein.
Mit fssek() kannst du dann evt, noch eine bestimmte Position springen
Einen Kommentar schreiben:
-
Zitat von webdino Beitrag anzeigennein ich bin noch am überlegen was am Besten wäre, stream soll ja schneller sein und eben ressourcen schonender
Eine kleine Funktionsauswahl:
[man]fopen[/man] [man]fgets[/man] [man]feof[/man] [man]fclose[/man]
Einen Kommentar schreiben:
-
Zitat von lstegelitz Beitrag anzeigenIn einen Stream einlesen? Naja... nein.
Du "streamst" die Daten durch deine Anwendung (ein gebräuchlicher Weg um resourcenschonend mit großen bzw. unbekannten Datenmengen umzugehen). Es bedeutet, das du deine Daten nicht komplett in einen großen Puffer einliest, sondern nur Stückchen für Stückchen liest und verarbeitest, in deinem Fall böte sich zeilenweise an.
Mit set_time_limit() kannst du den Timeout für die Scriptlaufzeit anpassen (bzw. komplett ausschalten), so daß dein Import eine ganze Weile laufen kann.
Hast du bereits eigene Ansätze?
Einen Kommentar schreiben:
-
Zitat von Wolla Beitrag anzeigenZähler incrementieren und diesen bei vollen tausendern ausgeben lasssen, damit unterbrichst du das timeout.
Einen Kommentar schreiben:
-
Zähler incrementieren und diesen bei vollen tausendern ausgeben lasssen, damit unterbrichst du das timeout.
Einen Kommentar schreiben:
-
In einen Stream einlesen? Naja... nein.
Du "streamst" die Daten durch deine Anwendung (ein gebräuchlicher Weg um resourcenschonend mit großen bzw. unbekannten Datenmengen umzugehen). Es bedeutet, das du deine Daten nicht komplett in einen großen Puffer einliest, sondern nur Stückchen für Stückchen liest und verarbeitest, in deinem Fall böte sich zeilenweise an.
Mit set_time_limit() kannst du den Timeout für die Scriptlaufzeit anpassen (bzw. komplett ausschalten), so daß dein Import eine ganze Weile laufen kann.
Hast du bereits eigene Ansätze?
Einen Kommentar schreiben:
Einen Kommentar schreiben: