我有一个包含许多小文档的 MongoDB 集合备份。备份是由 生成的mongodump
,但是当我尝试使用导入它时mongorestore
出现错误:
AssertionException 处理请求,关闭客户端连接:10334 BSONObj 大小:18039019 (0x11340EB) 无效。大小必须介于 0 和 16793600(16MB) 之间
我正在运行 MongoDB 3.0.3 版(来自主干)。
我有一个包含许多小文档的 MongoDB 集合备份。备份是由 生成的mongodump
,但是当我尝试使用导入它时mongorestore
出现错误:
AssertionException 处理请求,关闭客户端连接:10334 BSONObj 大小:18039019 (0x11340EB) 无效。大小必须介于 0 和 16793600(16MB) 之间
我正在运行 MongoDB 3.0.3 版(来自主干)。
--batchSize=100
每次使用都会为我解决这个问题。
例如mongorestore -d my-database --batchSize=100 ./database-dump-directory
基本上mongoDB接受文件的大小应该小于16MB。如果你打算使用大于16MB的文件,你可以使用gridfs。每个文档占用 2 大小分配的内存。您的应用程序应确保它生成的 bson 文档的大小。否则您可以使用不同的数据模型,而不是将所有数据嵌入到一个文档中。
mongorestore
{"applyOps", entries}
在文档中批量发送插入命令。与任何其他文档一样,此文档 (AFAIK) 限制为 16MB。
根据消息来源,存在“许多小操作的数组开销可能会溢出最大命令大小的病态情况”。该变量oplogMaxCommandSize
用于帮助在此类情况下mongorestore
不失败。在 3.0... 开发过程中的某个时间点,它被提升到了 1650 万。那太乐观了。后来又降低到 8M(JIRA TOOLS-754)。
如果需要,您可以根据需要自行调整该值。然后重新编译工具。