我们做约50万的元素读取(使用xml-stream
)的XML文件并执行把它们插入到MongoDB的是这样的:如何在node.js断开连接期间缓冲MongoDB插入?
xml.on(`endElement: product`, writeDataToDb.bind(this, "product"));
插入在writeDataToDb(type, obj)
看起来是这样的:
collection.insertOne(obj, {w: 1, wtimeout: 15000}).catch((e) => { });
现在蒙戈时连接断开连接,xml流仍会读取,并且控制台将充满错误消息(无法插入,断开连接,EPIPE断开...)。
在docs它说:
当您关闭mongod的过程中,驾驶员停止处理操作,并保持缓冲它们由于bufferMaxEntries是-1默认情况下,这意味着缓存中的所有操作。
这个缓冲区实际上做了什么?
当我们插入数据并关闭蒙戈服务器我们注意到,这个事情得到缓冲,然后我们把蒙戈服务器备份,本地驱动程序成功地重新连接和节点恢复插入数据,但缓存文件(蒙戈beeing离线时)不要再插入。
所以我质疑这个缓冲区及其用法。
目标:
我们正在寻找保持缓冲区插入的最佳方式,直到蒙戈回来(在根据wtimeout
15000milliseconds),并让然后将缓冲的文件或利用xml.pause();
和xml.resume()
这我们尝试没有成功。
基本上,我们需要一点帮助,以便如何处理断开连接而没有数据丢失或中断。
不能复制此,无论是在使用'XML的stream'插入一旦周一缓冲的对象的文档和测试的示例去服务器备份..也许你可以发布更多的代码/提供有关您的设置的更多信息? – cviejo
@cviejo我不能分享我的脚本,因为它们是公司相关的,但是您会介意将您尝试复制的脚本发给我吗? Gist/pastebin就可以了。 – DanFromGermany