0

私は67352行のファイルを持っています。1 行は 1 つの名前です。foreachを使用して、これらの名前をバッチに挿入しています。バッチ サイズ 100 を使用すると、これらの 67352 レコードのうち 52262 レコードのみがデータベースに永続化されます。バッチ サイズが大きい場合は永続化されるドキュメントが少なくなり、小さい場合は永続化されるドキュメントが多くなりますが、すべてのドキュメントを取得することはできません。持続しました。

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

誰が何が悪いのか教えてもらえますか? ありがとう

4

1 に答える 1

1

インデックスなどに何を使用しているかについては言及していませんが、それがデフォルトであり、一意性の問題が発生していないと仮定しましょう (特に結果が可変であるため)。書き込みの一部が失敗/失われているようです。

次のようにバッチ挿入を実行してみてください。

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

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

于 2012-02-20T12:13:10.147 に答える