我有一些大的XML文件(每个5GB)要导入mongodb数据库。我使用Expat解析文档,做一些数据操作(删除一些字段、单元转换等),然后插入数据库。我的脚本基于这个:https://github.com/bgianfo/stackoverflow-mongodb/blob/master/so-import
我的问题是:有没有办法通过批量插入来改进这一点?在插入之前将这些文档存储在数组中是个好主意吗?那么,在插入之前,我应该存储多少文档?将json写入文件,然后使用mongoimport会更快吗?
我很感激你的建议。
Tags:
是的,很有可能。它减少了到数据库的往返次数。您应该监视您的系统,在插入时可能会因为IO等待而大量空闲(也就是说,开销和线程同步比实际的数据传输花费更多的时间)。
这很难说,因为这取决于很多因素。经验法则:1000-10000。你得做点实验。在mongodb的旧版本中,整个批处理不能大于16MB的文档大小限制。
不,除非你的代码有缺陷。这意味着您必须复制数据两次,并且整个操作应该是IO绑定的。
另外,最好先添加所有文档,然后添加任何索引,而不是相反(因为这样每次插入都必须修复索引)
如果您想将XML导入MongoDB,而Python正是您目前所选择的完成这项工作的方法,但是您对进一步的方法持开放态度,那么您还可以通过以下步骤执行此操作:
XMLStarlet和AWK都非常快,您可以使用非平凡的结构(子对象、数组)存储JSON对象。
http://www.joyofdata.de/blog/transforming-xml-document-into-csv-using-xmlstarlet/http://www.joyofdata.de/blog/import-csv-into-mongodb-with-awk-json/
相关问题 更多 >
编程相关推荐