我在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。
有没有办法解决这个限制?
答案 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