2009-05-29 12 views
0

xmlから解析された配列内に何千ものデータがあります。私の懸念事項はスクリプトの処理時間です。私は10万レコードあるのでスクリプトの処理時間に影響しますか?データベースに挿入するには?私はバッチでデータベースへのデータの挿入を処理する方法がありますか?PHPを使用した配列のバッチ処理

答えて

0

これはSQLファイルのためである - しかし、あなたは(それを使用しない場合)、それはモデルです従うことができます間隔< 1秒以上1分以上。

大きなファイルが小さなインサートに分割され、この方法は、等

これは、バイパスは、PHPサーバーの構成を編集し、このようなスクリプトの実行時間等のメモリの制限等の心配を助けます。

新規ユーザーがGoogle検索「SQL大きなダンプ」またはもしこれが五島に動作しますので、リンクを挿入することはできません。 WWW [ドット] ozerov [ドット]デ[スラッシュ] bigdump [ドット] PHP

だからできました上記のスクリプトを理論的に変更しても、配列をSQlファイルではなくデータソースとして受け入れることさえできます。明らかにいくつかの変更が必要です。

希望します。

+0

あなたの助言に感謝の皆!私は本当に感謝します、私は大きなダンプと同じコンセプトをコードにしようとするか、それを変更してください。 もう一度ありがとう! – text

0

処理時間にはほとんど影響しませんが、DBのトランザクションログが100k行のロールバックセグメントを構築するのに十分な大きさであることを確認する必要があります。

1

構文は次のとおりです。

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

ですから、なめらかに書くことができます。この(ダミー例)のように:

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

これは、巨大なデータセットではかなり速いイベントを動作し、データセットがメモリに収まる場合は、パフォーマンスを心配しないでください。その後、

それはあなたが指定することができ部分にファイルを分割、3000本のラインが言うと、時限にそれらを挿入します -

0

またはADOdbのラッパー(http://adodb.sourceforge.net/)と-R:

// 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);