ich möchte Daten aus einer mysql-Tabelle in eine Textdatei wegschreiben.
Das funktioniert an sich ganz gut, aber wenn die Datenmenge zu gross
ist, wird fwrite() immer langsamer. die ersten 5000 Sätze werden noch in
knapp 2 Sekunden geschrieben, die nächsten brauchen schon fast 5, und
die nächsten schon über 10. Sind in der Abfrage aber mal 50000 und mehr
drin, wird das 1. unerträglich und 2. komme ich in ein Timeout-Problem.
Was ich mache ist (in Auszügen):
...
$exp = mysql_query($sql);
if ($f = fopen ($tempdat, 'w')) {
$zaehler = 0;
$text = "";
while ($r = mysql_fetch_row($exp)) {
$r[1] = function1($r[1]);
$r[2] = function1($r[2]);
$r[5] = function2($r[5]);
$r[6] = function2($r[6]);
$text .= implode(';', $r)."\r\n";
$zaehler++;
if ($zaehler > 2000) {
$zaehler = 0;
fwrite($f, $text, strlen($text) );
$text = "";
}
}
fclose ($f);
} else {
echo "Datei konnte nicht geöffnet werden";
}
Hatte zuerst ein fwrite() für jeden Datensatz, dann (script oben) nur
alle 2000 Datensätze. Dann auch schon probiert die Datei zwischendrin
mal zu schließen. Dann die Umwandlungsfunktionen functio1 und function2
rausgelassen.
Es bleibt immer beim selben Verhalten (die Änderungen wirken sich aus,
aber nicht großartig) - die Geschwindigkeit geht in den Keller.
Was kann ich da verbessern?
Danke
Fabian
Leider kommt jetzt aber das nächste Problem: das Script hört einfach
mittendrin auf - aber dazu fange ich einen neuen Thread 'was stoppt das
script?' an
Danke
Fabian