2015-09-12 50 views
2

我使用DoctrineMongoDBBundle(Symfony 2.7.4)通過foreach-looping將源文件集合導入到MongoDB中,將28k文件導入到MongoDB中。雖然它按預期工作,但我想知道如何優化性能。我發現導入前1000只需要一眨眼的功夫,但導入過程會隨着每次刷新而變慢。分割源收集和導入例如是否有意義100一次?你多久沖洗一次?Doctrine MongoBundle:導入28k文檔的最有效方法

有什麼最佳實踐嗎?

感謝您的建議!

+1

簡單,不使用ODM用於此目的。 –

回答

0

這一切都取決於可用內存和文件大小。您可以通過$dm->getUnitOfWork()->size();檢查unit of work的大小。我認爲在刷新後不要分離文件,這就是爲什麼一切都放慢了。在flush()之後使用clear()將文檔從教義中分離出來。

例如,下面應該堅持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(); 
相關問題