2009-05-29 9 views
0

Ich habe Tausende von Daten in das Array, das von XML analysiert wurde .. Mein Anliegen ist die Bearbeitungszeit meines Skripts, Beeinflusst es die Bearbeitungszeit meines Skripts, da ich hunderttausend Datensätze habe in die Datenbank eingefügt werden? Gibt es da einen Weg, wie ich die Einfügung der Daten in die Datenbank im Batch bearbeite?Batch-Verarbeitung in Array mit PHP

Antwort

0

Dies ist für SQL-Dateien - aber Sie können es Modell folgen (wenn es nicht einfach zu benutzen) -

Es teilt die Datei in Teile, die Sie, sagen wir 3000 Zeilen angeben können, und dann fügt sie auf Zeit Intervall < 1 Sekunde bis 1 Minute oder mehr.

diese Weise eine große Datei usw. in kleinere Einsätze gebrochen

Dieser Bypass wird dazu beitragen, die PHP-Server-Konfiguration Bearbeitung und über Speichergrenzen etc. wie Skriptausführungszeit und dergleichen sorgen.

Neue Benutzer können keine Links einfügen, so Google "SQL großen Dump" Suche oder wenn diese goto funktioniert: www [dot] Ozerov [dot] de [slash] bigdump [dot] php

So konnte man Ändern Sie das obige Skript sogar theoretisch, um das Array als Datenquelle anstelle der SQL-Datei zu akzeptieren. Es würde offensichtlich einige Modifikationen erfordern.

Ich hoffe, es hilft. -R

+0

Vielen Dank für Ihren Rat! Ich schätze es wirklich, ich würde versuchen, einen Code das gleiche Konzept wie große Dump machen oder einfach nur ändern .. danke nochmal! – text

0

Es ist unwahrscheinlich, dass sich dies auf die Verarbeitungszeit auswirkt, aber Sie müssen sicherstellen, dass die Transaktionsprotokolle der Datenbank groß genug sind, um ein Rollback-Segment für 100k Zeilen zu erstellen.

1

Syntax ist:

INSERT INTO tablename (fld1, fld2) VALUES (val1, val2), (val3, val4)... ; 

So Sie smth schreiben kann. so (Dummy Beispiel):

foreach ($data AS $key=>$value) 
{ 
    $data[$key] = "($value[0], $value[1])"; 
} 
$query = "INSERT INTO tablename (fld1, fld2) VALUES ".implode(',', $data); 

Das funktioniert recht schnell Veranstaltung auf große Datensätze und über die Leistung keine Sorge, wenn Sie Ihre Datenmenge im Speicher paßt.

0

Oder mit dem ADOdb Wrapper (http://adodb.sourceforge.net/):

// assuming you have your data in a form like this: 
$params = array(
      array("key1","val1"), 
      array("key2","val2"), 
      array("key3","val3"), 
      // etc... 
     ); 
// you can do this: 
$sql = "INSERT INTO `tablename` (`key`,`val`) VALUES (?, ?)"; 
$db->Execute($sql, $params);