0

というコレクションに、Reports処理するドキュメントがあります。私は次のようなクエリを実行します

$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 件のレポートの場合、おそらく 700 ミリ秒かかりますが、同じ 2000 件のレポートの場合、処理時間を更新するだけで少なくとも 1500 ミリ秒かかります。これをスピードアップするためのヒントはありますか?前もって感謝します。

編集: 処理時間は正確である必要はありません。オブジェクト ($report) を取得して時間を更新できる場合は、スクリプトが実行された時間 (+/- 10 秒程度) にすることができます。直接そのように、最初の foreach の後に検索するよりも優れています。

4

1 に答える 1

0

Sammaye に感謝します。

于 2012-12-01T19:51:54.947 に答える