pymongo中的默认batchSize是什么?

she*_*zhi 14 mongodb pymongo

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

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

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

Joh*_*one 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.如果batch_size小于0,则引发ValueError.如果已使用此Cursor,则引发InvalidOperation.应用于此游标的最后一个batch_size优先.参数:

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

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

  • `batch_size:请求的每批结果的大小.批量大小,以KB,MB或文档数量为单位? (4认同)
  • @akki文件数量. (3认同)
  • 有没有办法手动覆盖 Mongo 这边的默认限制?我的意思是 mongo 的内部最大批量大小配置。 (2认同)