Hi,
ich möchte eine CSV Datei mit ca. 350.000! Einträgen in eine MySQL Datenbank einfügen. Per PHP Script geht das auch, allerdings dauert das dann Stunden und meine Festplatte klingt dabei auch nicht gesund, so daß ich es lieber abgebrochen habe.
Wie kann ich das besser lösen?
Das MySql Admin Tool bricht auch immer ab mit der Meldung "Server gone away"
Ich hoffe sehr auf eure Hilfe.
CSV to MySQL DB Datenmenge Problem
-
-
Ich habe ja keine Ahnung, wie die CSV-Datei und dein Script aussieht, aber bei 350.000 Datensätzen dauert das halt ein wenig, sollte aber eigentlich kein Problem sein.
-
php script:
include "connect.php";
ini_set('max_execution_time', 3600);
$row = 1;
$handle = fopen ("datei.csv","r");
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) {
$num = count ($data);$row++;
$query = "INSERT INTO siglum (wert) VALUES ('".$data[0]."')";
$result = mysql_query($query);
}
fclose ($handle);
die csv enthält 350.000 Zeilen
er geht durch jede zeile und fügt das ein
das geht auch, dauert aber unglaublich lang
ist was an dem script falsch? -
CSV-Datei, 350.000 Zeilen mit
Zitat
a,b,c,d,e,f,g,h,iScript:
PHP
Alles anzeigen<?php $t1 = time(); mysql_connect("localhost", "root", ""); mysql_select_db("test"); $fp = fopen("./xx.csv", "r"); while ($data = fgetcsv($fp, 1000, ",")) { $query = "insert into csv set val='" . $data[0] . "'"; mysql_query($query); } $t2 = time(); echo "Scriptlaufzeit = " . ($t2 - $t1) . "Sekunden"; ?>
Ausgabe:
ZitatScriptlaufzeit = 40Sekunden
-
Ich habe pro Zeile 5 Werte, hatte das Script nur etwas gekürzt.
D.h. pro Insert werden 5 werte in die DB geschrieben, dann wird wieder die nächste Zeile aus der csv datei gelesen und dann wieder in die db geschrieben.Und bei mir dauert das ewig. Woran kann das liegen???????
Die Festplatte rödelt ohne Ende. -
hatte das Script nur etwas gekürzt.
Sehr witzig. Du postest hier ein verstümmeltes Script und wir sollen erkennen, woran das liegen kann. Muss man nicht verstehen, oder? -
wieso verstümmelt???? da fehlt lediglich ein data[1]...bis date[4] in der zeile, das ändert aber nichts an der schleife
habe es übrigends selber gelöst, habe die "values" in eine schleife getan, so daß der insert befehl nur aller 1000 zeilen 1 mal ausgeführt wird