Mongodb 如果使用jsonArray,则对Mongo的导入限制为16MB
我正在使用Mongo2.6.1。我想从大于16MB的json文件导入数据。json是一个文档数组。根据他们的文档,如果我使用Mongodb 如果使用jsonArray,则对Mongo的导入限制为16MB,mongodb,Mongodb,我正在使用Mongo2.6.1。我想从大于16MB的json文件导入数据。json是一个文档数组。根据他们的文档,如果我使用--jsonArray选项,文件只能是16MB,请参阅 奇怪的是,我已经成功导入了大于16MB(24MB)的数据,使用mongoimport没有问题,方法是: mongoimport -db mydb --collection product --file products.json --jsonArray 那么16MB的限制是什么呢?16MB是MongoDB。这意味着M
--jsonArray
选项,文件只能是16MB,请参阅
奇怪的是,我已经成功导入了大于16MB(24MB)的数据,使用mongoimport没有问题,方法是:
mongoimport -db mydb --collection product --file products.json --jsonArray
那么16MB的限制是什么呢?16MB是MongoDB。这意味着MongoDB中的任何文档都不能超过16MB
注意,MongoDB文档的JSON表示可能会超过这个限制,因为BSON更紧凑
--jsonArray
标志的问题是mongoimport
首先将整个.json
文件作为单个文档读取,然后对其每个元素执行导入,因此会受到BSON文档大小限制的影响
新MongoDB版本(2.5.x
及更高版本)的解决方案
我刚刚用最新的MongoDB2.6.4
测试了mongoimport
,使用了非常大的JSON数组(~200MB),效果非常好
我非常肯定,在MongoDB2.2.x
中,这样的操作是不可能的。因此,看起来好像只是忘记了更新mongoimport
文档
我搜索了MongoDB bug追踪器,然后找到了它。根据它的说法,这个问题在一年前就解决了,修复程序是通过MongoDB2.5.0
发布的
因此,请随意导入大型JSON文档
旧MongoDB版本的解决方案(早于2.5.0
)
如果您使用的是旧版本的MongoDB,那么仍然可以导入大量文档,使用--type json
标志而不是--jsonArray
。但它假定要从中导入的文件具有特殊的结构。它类似于JSON格式,只是每行只允许一个文档,每个文档后面都不允许有逗号:
{ name: "Widget 1", desc: "This is Widget 1" }
{ name: "Widget 2", desc: "This is Widget 2" }
奇怪的是,我已经成功导入了大于16MB(24MB)的数据,使用mongoimport没有问题,方法是:
mongoimport -db mydb --collection product --file products.json --jsonArray
如果您对以这种方式导入的数据感到满意,则不必担心16MB的限制。该限制适用于集合中的每个记录(文档)。16MB的文本数据非常多——你可以在这么大的空间里拥有整本书——因此,单个记录的大小超过16MB是极不寻常的 面对类似的问题,我想16MB的限制在旧版本中仍然存在。尽管在任何情况下都有办法,但只要使用LinuxSED命令将包含jsonArray的json转换成普通的json文件,这将删除一些初始部分和结束部分。
然后,您可以使用普通的mongoimport命令导入文件。等等,您说您不能使用mongoimport,但是您说您可以使用完全相同的选项?是哪一个?那么如何导入大型json文档?我很快就会达到这个极限。