【问题标题】:mongodb and pymongo 16Mb limit on document sizemongodb 和 pymongo 文件大小限制为 16Mb
【发布时间】:2014-08-29 00:40:56
【问题描述】:

我正在使用 Windows 上的“/showIncludes”和 *nix 标志上的“-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版本是

数据库版本 v2.6.3 2014-08-28T16:56:51.534+0100 git 版本:255f67a66f9603c59380b2a389e386910bbb52cb

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

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

【问题讨论】:

  • 16 MB 对于单个文档来说是相当多的数据...
  • 我很惊讶我能成功。但是我的一些包含的成本约为 250 万。其中成本是包含的次数 X 包含的次数。此外,包含记录每个路径到其自己的包含。例如A 包括 B,其中包括 C,其中包括 D。如果 D 被包括一百万次,我猜这些路径可以加起来。

标签: mongodb pymongo


【解决方案1】:

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

来自文档:

BSON 文档

BSON 文档大小

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

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

命名空间文件的大小

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

默认命名空间文件为 16 兆字节。您可以配置 大小使用 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

【讨论】:

  • 啊 - 这解释了很多。我找到了 GridFS API。但没有找到使用它添加 > 16 Mbs 的文档的示例。我还担心它可能不被 pymongo 支持。所以当我注意到 --nssize 时,我想我可以改用它。
猜你喜欢
  • 2018-09-11
  • 2013-02-24
  • 1970-01-01
  • 2017-02-22
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
相关资源
最近更新 更多