Mailinglisten-Archive |
Am Monday 17 July 2006 11:29 schrieb Sascha Grossenbacher: > Hallo > > Das Problem der Geschwindigkeit ist vermutlich der Speicherverbrauch. > Ich würde versuchen, das ganze mehr aufzuteilen. > > Wie bisher die Datei mit fopen öffnen und dann Zeile für Zeile mit fgets > und gleich verarbeiten: also ein explode auf ',', prüfen ob der > Datensatz schon in der Datenbank vorhanden ist und wenn nicht, speichern. > Um noch weiter Geschwindigkeit zu gewinnen, könnte man noch die Query's > zusammenfassen und zum Beispiel 1000 Datensätze gleichzeitig eintragen > mit INSERT INTO table(feld1, feld2, ...) VALUES (wert1, wert2, ...), > (wert1, wert2, ..) ... > > Der Vorteil dieser Lösung ist, das PHP niemals mit einem > mehrdimensionalen Array mit 50'000 Elementen arbeiten muss, sondern > immer nur mit einer Zeile. > > Gruss Sascha Hi, so sieht es zur Zeit aus: while (!feof($dz)) { $buffer = fgets($dz, 4048); $zeile = explode('\n',$buffer); foreach ($zeile as $key => $value) { $dfeld = explode(',',$value); # SQL Abfrage auf doppelte Datensaetze # wenn nicht doppelt dann speichern } } Es ist ab dem ersten Datensatz langsam und es ist schon langsam auch wenn ich nicht speichere. Ein so großes Array sollte sich doch dabei gar nicht aufbauen.
php::bar PHP Wiki - Listenarchive