web-dev-qa-db-ja.com

pymongoのデフォルトのbatchSizeは何ですか?

私はpymongoを使用して1つのクエリで約2Mのドキュメントをフェッチしています。各ドキュメントには3つの文字列フィールドしか含まれていません。クエリは、limit()やbatchSize()のない単純なfind()です。

カーソルを繰り返し処理しているときに、約25,000のドキュメントを処理した後、スクリプトが約30〜40秒待機していることに気付きました。

だから私はmongoが2Mの結果をすべて1つのバッチで返すのだろうか? pymongoのデフォルトのbatchSize()は何ですか?

14
shenzhi

MongoDBのカーソルは、デフォルトで最大101個のドキュメントを返すか、1 MBに達するのに十分です。 4MBまでポップアップした後、カーソルを介して反復する呼び出し。返されるドキュメントの数は、ドキュメントの大きさの関数になります。

カーソルバッチ

MongoDBサーバーはクエリ結果をバッチで返します。バッチサイズは最大BSONドキュメントサイズを超えません。ほとんどのクエリでは、最初のバッチは101ドキュメントまたは1メガバイトを超えるのに十分なドキュメントを返します。後続のバッチサイズは4メガバイトです。バッチのデフォルトサイズをオーバーライドするには、batchSize()およびlimit()を参照してください。

インデックスなしのソート操作を含むクエリの場合、サーバーはソートを実行するためにメモリ内のすべてのドキュメントをロードする必要があり、最初のバッチですべてのドキュメントを返します。

カーソルを反復処理して返されたバッチの最後に到達すると、さらに結果がある場合、cursor.next()はgetmore操作を実行して次のバッチを取得します。

http://docs.mongodb.org/manual/core/cursors/

カーソルのpymongoでbatch_size()メソッドを使用してデフォルトを上書きできますが、16 MB(最大BSONドキュメントサイズ)を超えることはありません。

batch_size(batch_size)

1つのバッチで返されるドキュメントの数を制限します。各バッチには、サーバーへの往復が必要です。パフォーマンスを最適化し、データ転送を制限するために調整できます。

注意

batch_sizeは、単一のバッチでクライアントに返されるデータ量に対するMongoDBの内部制限を上書きできません(つまり、バッチサイズを1,000,000,000に設定した場合、MongoDBは現在、バッチごとに4〜16 MBの結果のみを返します)。

Batch_sizeが整数でない場合、TypeErrorを発生させます。 batch_sizeが0より小さい場合はValueErrorを発生させます。このCursorがすでに使用されている場合はInvalidOperationを発生させます。このカーソルに適用された最後のbatch_sizeが優先されます。パラメーター :

batch_size:リクエストされた結果の各バッチのサイズ。

http://api.mongodb.org/python/current/api/pymongo/cursor.html

23
John Petrone