2009-05-29 8 views
0

J'ai reçu des milliers de données dans le tableau qui a été analysé depuis xml. Mon souci est le temps de traitement de mon script, Est-ce que cela affecte le temps de traitement de mon script? être inséré dans la base de données? Y at-il un moyen que je traite l'insertion des données dans la base de données en batch?Traitement par lots dans le tableau en utilisant PHP

Répondre

0

Ceci est pour les fichiers SQL - mais vous pouvez suivre son modèle (si non seulement l'utiliser) -

Il divise le fichier en plusieurs parties que vous pouvez spécifier, par exemple 3000 lignes, puis les insère sur un chronométré intervalle < 1 seconde à 1 minute ou plus.

De cette façon, un grand fichier est divisé en petits inserts etc.

Cela permettra de contourner la modification de la configuration du serveur php et se soucier des limites de la mémoire etc. telles que le temps d'exécution de script et autres.

nouveaux utilisateurs ne peuvent pas insérer des liens si Google Search "sql grande décharge" ou si cela fonctionne goto: www [dot] Ozerov [dot] de [slash] BigDump [dot] php

Alors vous pourriez même théoriquement modifier le script ci-dessus pour accepter votre tableau en tant que source de données au lieu du fichier SQl. Il faudrait évidemment une modification.

Espérons que ça aide. R

+0

merci à tous pour vos conseils! Je l'apprécie vraiment, j'essaierais de faire un code identique à un gros vidage ou juste de le modifier .. merci encore! – text

0

Il est peu probable qu'il affecte le temps de traitement, mais vous devez vous assurer que les journaux de transactions de la base de données sont suffisamment grands pour générer un segment de restauration pour 100 000 lignes.

1

La syntaxe est:

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

vous pouvez donc écrire lissée. comme ceci (exemple fictif):

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

Cela fonctionne événement assez vite sur des jeux de données énormes, et ne vous inquiétez pas si les performances de votre ensemble de données correspond à la mémoire.

0

Ou avec l'emballage ADOdb (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); 
Questions connexes