我有一些大型XML文件(每个5GB),我正在导入mongodb数据库。我正在使用Expat来解析文档,进行一些数据操作(删除一些字段,单位转换等),然后插入数据库。我的脚本基于这个:https://github.com/bgianfo/stackoverflow-mongodb/blob/master/so-import
我的问题是:有没有办法通过批量插入来改善这一点?在插入之前将这些文档存储在数组上是个好主意?插入前我应该存储多少文件呢?将jsons写入文件然后使用mongoimport会更快吗?
我感谢任何建议。
答案 0 :(得分:3)
如果您想要将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/
答案 1 :(得分:1)
在插入之前将这些文档存储在数组上是个好主意?
是的,这很有可能。它减少了到数据库的往返次数。您应该监视您的系统,因为IO等待(即开销和线程同步比实际数据传输花费的时间更多),它在插入时可能会闲置很多。
插入之前我应该存储多少个文件呢?
这很难说,因为它取决于很多因素。经验法则:1,000 - 10,000。你将不得不尝试一点。在旧版本的mongodb中,整个批处理不得大于16MB的文档大小限制。
将jsons写入文件然后使用mongoimport会更快吗?
不,除非你的代码有缺陷。这意味着您必须复制数据两次,整个操作应该是IO绑定。
此外,最好先添加所有文档,然后添加任何索引,而不是相反(因为那时索引必须在每次插入时修复)