Doctrine MongoBundle:导入28k文档的最有效方法

时间:2015-09-12 08:39:21

标签: php mongodb symfony doctrine-odm

我使用DoctrineMongoDBBundle(Symfony 2.7.4)通过foreach-looping将源集合导入28k文件到MongoDB中。虽然它按预期工作,但我想知道如何优化性能。我发现导入前1000只只是眨眼间,但导入过程随着每次刷新而减慢。分割源集合和导入是否有意义,例如一次100个?你多久一次冲洗?

有没有最佳做法?

感谢您的建议!

1 个答案:

答案 0 :(得分:0)

这完全取决于可用的内存和文档大小。您可以unit of work查看$dm->getUnitOfWork()->size();的尺寸。我认为你不会在同花顺之后分发文件,这就是为什么一切都放慢了。在clear()之后使用flush()从文档中分离文档。

例如,以下应该保留100个文档,在一个操作中清除所有文档,从教条中分离,并对所有$documents重复此操作:

$batchSize = 100;
$i = 1;
foreach ($documents as $document) {
    $dm->persist($document);
    if (($i % $batchSize) === 0) {
        $dm->flush();
        $dm->clear();
    }
    $i++;
}
$dm->flush();
$dm->clear();