0

我有一个 67352 行的文件。一行是一个名字。我正在使用 foreach 批量插入这些名称。在这 67352 条中,只有 52262 条记录在使用 100 的批大小时被持久化到数据库中。如果批大小较大,则保留的文档较少,如果较小,则保留更多的文档,但我从未获得所有文档坚持。

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 回答