我們做約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