mongodb和pymongo 16Mb限制文档大小

时间:2014-08-28 16:00:37

标签: mongodb pymongo

我在Windows上使用'/ showIncludes'分析构建中的包含,在* nix,flags上分析'-H'。

我正在用python脚本解析这个信息。包含的每个文件都会变成一个对象,列出其子节点(包含的文件)和祖先(包含此文件的包含路径)。

创建这些对象后,我想使用pymongo将它们推送到mongodb数据库。

这适用于99%的包含。但是~5非常大。当我尝试将它们添加到mongodb时,它会抱怨。

Traceback (most recent call last):
  File "mongodb.py", line 94, in <module>
    includes_collection.update({'id': include.include_id}, { 'ancestor_tree': ancestor_tree_ids } )
  File "C:\Python27\lib\site-packages\pymongo-2.7.2-py2.7-win-amd64.egg\pymongo\collection.py", line 551, in update
    docs, check_keys, self.uuid_subtype, client)
DocumentTooLarge: command document too large

阅读mongo这似乎是一个设计选择。默认情况下,文档不能超过16Mb。但是可以使用--nssize命令行选项覆盖它。参见

http://docs.mongodb.org/manual/reference/program/mongod/#bin.mongod

所以我用--nssize 32/64/128重新运行了mongod。我认为我的任何包含对象都不超过128Mbs。但问题仍然存在。

所以我现在想知道是否应该责怪pymongo。它是否尊重此服务器设置?

我的mongod版本是

db version v2.6.3 2014-08-28T16:56:51.534 + 0100 git版本:255f67a66f9603c59380b2a389e386910bbb52cb

我正在使用pymongo-2.7.2-py2.7-win-amd64。

有没有办法解决这个限制?

1 个答案:

答案 0 :(得分:7)

不幸的是,您不能超过每个文档16MB的BSON限制。您使用的mongod选项与文档大小无关。它指定了mongodb命名空间文件的默认大小 - 与最大文档大小完全无关。正如文档所建议的,如果你真的需要存储大于16MB的对象,我会看一下GridFS API。

来自文档:

  

BSON文件

     

BSON文件大小

     

最大BSON文档大小为16兆字节。

     

最大文档大小有助于确保单个文档无法使用   使用过量的RAM,或在传输过程中,过量   带宽要存储大于最大大小的文档,MongoDB   提供GridFS API。请参阅mongofiles和您的文档   有关GridFS的更多信息,请参阅驱动程序。

     

命名空间文件的大小

     

命名空间文件不能超过2047兆字节。

     

默认情况下,命名空间文件为16 MB。你可以配置   使用nsSize选项调整大小。

     

- nssize

     

默认值:16

     

指定命名空间文件的默认大小,即文件   结束.ns。每个集合和索引都算作命名空间。

     

使用此设置可控制新创建的命名空间文件的大小。   此选项对现有文件没有影响。 a的最大尺寸   命名空间文件是2047兆字节。默认值为16兆字节   提供大约24,000个名称空间。

http://docs.mongodb.org/manual/reference/limits/

http://docs.mongodb.org/manual/reference/program/mongod/#bin.mongod