Doctrine MongoDB ODM を使用して、リモートの MongoDB データベースから少数のドキュメントを取得しています。
約 12 個の一致するドキュメントを検索するのに、クエリがわずか 1 ミリ秒しかかからないことを確認しました。(例: Explain 出力からの 'millis':1)。しかし、結果の反復処理には約 250 ミリ秒かかりました。
次のオプションの組み合わせを試したところ、パフォーマンスが向上しませんでした
- select('名前')
- 水和物(false)
- 熱心なカーソル(真)
- リミット(1)
この遅延を最小限に抑えるにはどうすればよいですか?
更新:サンプル コードによる詳細な説明
$qb = $dm->createQueryBuilder('Books');
$books = $qb->select('name')
->field('userId')->equals(123)
->field('status')->equals('active')
->eagerCursor(true) // Fetch all data at once
->getQuery()
->execute();
/**
* Due to using Eager Cursor, the database connection should be closed and
* all data should be in memory now.
*/
// POINT A
foreach($books as $book) {
// I do nothing here. Just looping through the results.
}
// POINT B.
/**
* From POINT A to POINT B takes roughly 250ms when the query had 12 matching docs.
* And this doesn't seem to be affected much by the number of records matched.
* As the data is already in the memory, I expected this to be done in range of
* 5~10ms, not 250ms.
*
* Am I misunderstanding the meaning of Eager Cursor?
*/