从JSON文件批量加载具有许多对象的MongoDB

时间:2011-07-01 12:04:19

标签: json couchdb bulkinsert mongodb

我想对MongoDB进行批量加载。我有大约200GB的文件包含我想要加载的JSON对象,问题是我不能使用mongoimport工具,因为对象包含对象(即我需要使用--jsonArray aaram),限制为4MB。

CouchDB中有Bulk Load API,我可以编写脚本并使用cURL发送POST请求来插入文档,没有大小限制......

MongoDB中有这样的东西吗?我知道有困,但我想知道这是否可以应对JSON嵌套数组插入..?

谢谢!

2 个答案:

答案 0 :(得分:2)

好吧,基本上看起来没有真正好的答案,除非我用Java或Ruby之类的东西编写我自己的工具来传递对象(meh努力)......但这是一个真正的痛苦所以我决定简单地拆分文件低至4MB ...只是使用split编写了一个简单的shell脚本(请注意,由于局限性,我不得不多次拆分文件)。我使用带有-l(行号)的split命令,因此每个文件中都有x行。在我的情况下,每个Json对象大约4kb所以我只是猜测行大小。

对于任何想要这样做的人,请记住拆分只能生成676个文件(26 * 26),因此您需要确保每个文件中都有足够的行以避免丢失一半文件。任何方式都把这一切都放在一个好的旧bash脚本中并使用mongo import并让它在一夜之间运行。最简单的解决方案IMO,无需剪切和混搭文件,并在Ruby / Java或w.e.中解析JSON。其他。

脚本有点习惯,但是如果有人想要它们只是发表评论和发帖。

答案 1 :(得分:2)

如果您不了解数据的结构,我会说,如果您不能使用mongoimport,那么您运气不佳。没有其他标准实用程序可以调整来解释任意JSON数据。

如果您的数据不是导入实用程序所期望的1:1,那么使用Ruby或Python等语言编写一次性导入脚本几乎总是最容易的。批量插入将大大加快导入速度,但不要进行太大的批量生成,否则会出现错误(1.8+中插入的最大大小为16Mb)。在Ruby驱动程序中,可以通过简单地将哈希数组传递给insert方法而不是单个哈希来完成批量插入。

如果您在问题中添加数据示例,我可以为您提供进一步的帮助。