pymongo中的默认batchSize是什么?

时间:2014-08-04 19:52:50

标签: mongodb pymongo

我使用pymongo在一个查询中获取大约2M个文档,每个文档只包含三个字符串字段。查询只是一个简单的find(),没有任何limit()或batchSize()。

在迭代光标时,我注意到脚本在处理大约25k文档后等待大约30~40秒。

所以我想知道mongo会在一批中返回所有2M结果吗? pymongo中的默认batchSize()是什么?

1 个答案:

答案 0 :(得分:21)

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)

     

限制一批中返回的文档数量。每批   需要往返服务器。它可以调整以优化   性能和限制数据传输。

     

请注意

     

batch_size不能覆盖MongoDB的内部限制量   数据将在一个批次中返回客户端(即如果您设置   批量大小为1,000,000,000,MongoDB目前仅返回4-16MB   每批结果)。

     

如果batch_size不是整数,则引发TypeError。如果引发ValueError错误   batch_size小于0.如果此Cursor有,则引发InvalidOperation   已经被使用过。应用于此游标的最后一个batch_size采用   优先。        参数:

     

batch_size:请求的每批结果的大小。

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