5

我有一个包含许多小文档的 MongoDB 集合备份。备份是由 生成的mongodump,但是当我尝试使用导入它时mongorestore出现错误:

AssertionException 处理请求,关闭客户端连接:10334 BSONObj 大小:18039019 (0x11340EB) 无效。大小必须介于 0 和 16793600(16MB) 之间

我正在运行 MongoDB 3.0.3 版(来自主干)。

4

3 回答 3

9

--batchSize=100每次使用都会为我解决这个问题。

例如mongorestore -d my-database --batchSize=100 ./database-dump-directory

于 2015-11-11T17:21:38.910 回答
1

基本上mongoDB接受文件的大小应该小于16MB。如果你打算使用大于16MB的文件,你可以使用gridfs。每个文档占用 2 大小分配的内存。您的应用程序应确保它生成的 bson 文档的大小。否则您可以使用不同的数据模型,而不是将所有数据嵌入到一个文档中。

于 2015-06-01T06:01:17.930 回答
1

mongorestore{"applyOps", entries}在文档中批量发送插入命令。与任何其他文档一样,此文档 (AFAIK) 限制为 16MB。

根据消息来源,存在“许多小操作的数组开销可能会溢出最大命令大小的病态情况”。该变量oplogMaxCommandSize用于帮助在此类情况下mongorestore失败。在 3.0... 开发过程中的某个时间点,它被提升到了 1650 万。那太乐观了。后来又降低到 8M(JIRA TOOLS-754)。

如果需要,您可以根据需要自行调整该值。然后重新编译工具。

于 2015-06-01T10:10:55.367 回答