我有一個叫Reports
要被處理的集合中的文檔。我做一個查詢,如MongoDB的PHP findAndModify多性能
$collectionReports->find(array('processed' => 0))
(50至2000項之間的任何地方)。我處理它們是如何處理的,並將結果插入到另一個集合中,但我需要更新原始報告以將處理設置爲當前系統時間。現在它看起來像這樣:
$reports = $collectionReports->find(array('processed' => 0));
$toUpdate = array();
foreach ($reports as $report) {
//Perform the operations on them now
$toUpdate = $report['_id'];
}
foreach ($toUpdate as $reportID) {
$criteria = array('_id' => new MongoId($reportID));
$data = array('$set' => array('processed' => round(microtime(true)*1000)));
$collectionReports->findAndModify($criteria, $data);
}
我的問題是,它是非常低效率。處理報告並將它們插入到集合中對於2000年的報告可能需要700ms,但只是更新處理的時間對於那些相同的2000報告至少需要1500ms。任何提示加快速度?提前致謝。
編輯:處理時間並沒有準確的說,它可以只是腳本運行(+/- 10秒左右)的時候,如果有可能採取的對象($報告)並像這樣直接更新時間,那會比在第一個foreach之後搜索更好。
爲什麼要使用findandmodify在這裏?你沒有利用它提供的任何東西。 – Sammaye
我對Mongo還很陌生,在這裏使用的正確函數是什麼? – Ahorner
我會說沒有,只是用普通的'更新()',看看是否有更好的東西入手 – Sammaye