2012-02-18 13 views
0

私は67352行のファイルを持っています。 1行は1つの名前です。私はforeachを使用してこれらの名前をバッチで挿入しています。これらの67352のうちバッチサイズが100のバッチサイズを使用すると、52262レコードのみがデータベースに保持されます。バッチサイズが大きいほど、保持されるドキュメントは少なくなり、低くなるとドキュメントが保持されますが、持続した。doctrine odm一括挿入 - すべての文書が保存されない

odmのバージョンは1.0.0beta3ですが、これも1.0.0rc1で試しましたが、同じ結果が出ました。

コードは次のようになります。

$batchSize = 100; 
foreach ($data as $name) 
{ 
    $doc = new \SomeDocument; 
    $doc->setName($name); 

    $dm->persist($doc); 
    $i++; 

    if ($i % $batchSize == 0) 
    { 
     $dm->flush(); 
     $dm->clear(); 
    } 
} 
$dm->flush(); 

誰もが間違っているものを私に伝えることができますか?ありがとう

答えて

1

あなたはインデックスなどに使用しているものについて言及していませんが、それがデフォルトであり、一意性の問題に遭遇していないと考えてみましょう。あなたの書き込みの一部が失敗/迷子になっているようです。

はとバッチ挿入を実行してみましょう:

$dm->flush(array('safe'=>true)); 

それは少し遅くなりますが、あなたが失敗したことを見て、あなたはそこからそれを取ることができたときに、少なくともそれは今、例外をスローする必要があります。

関連する問題