2012-02-21 2 views
3

私はMongoDBでクエリを最適化したいのですが、find()クエリから返されたカーソルでPHPクライアントプロトコルがどのように機能するのか、クライアント側に大量の結果をもたらしているのか、一度にリモートデータベースから取得し、アプリケーションに戻しますか?PHPのMongoDBカーソルは、クエリの実行時にすべてのレコードをクライアントに持ちますか?

答えて

3

PHPドライバ(および私が実行したその他のドライバ)は、バッチサイズに基づいて結果をフェッチします。また、JSシェルで直接検索クエリを実行すると、これを見ることができます。返される最初の20個の結果の最後に "has more"と表示されます。 (it)関数を呼び出すと、次のバッチなどがロードされます。

バッチサイズは、返されるデータサイズの合計と制限に関するその他の注意事項の制限まで設定可能です。

http://php.net/manual/en/mongocursor.batchsize.php

2

このページhttp://uk3.php.net/manual/en/class.mongocursor.phpは、カーソルオブジェクトがすべてのデータを一度に読み込むわけではないことを暗示しています。しかし、私はあなたがそれを行うレートを "微調整"することを可能にする任意のオプションを見ることができません。

+0

を@AdamComerford有用ではないかもしれない –

+0

私はそれが結果をバッファリングすると思っていたので、一度に1つのドキュメントを取得するのではなく、バッファをいっぱいにしてバッファを処理したときに複数を取得します。だからあなたは大丈夫だろう。 –

0

それはより多くの理解チェックこのlinkのために...私のために働いています。

$criteria = array('geo.loc' => array('$exists' => 1)); 

$total = $collection->count($criteria); 

$response = $collection->find($criteria)->limit($total)->batchSize(100); 

foreach($response as $value){ 
    $name = $value['name']; 
} 

おかげで、私は、クエリの制限を使用して、この方法を検討し、それは、レコードを一つずつなってきた場合、それはクライアントにデータを取得している場合でも、それは、しかし、限られただ、限界だ

関連する問題