我有一個node.js應用程序,在一週內將生產mongodb後端,我對如何處理應用程序崩潰和重新啓動有一些疑問。Node.js(&MongoDB)服務器崩潰,數據庫操作一半?
說我有一個簡單的路線/followUser
中,我有2個數據庫操作
/followUser
----->Update User1 Document.followers = User2
----->Update User2 Document.followers = User1
----->Some other mongodb(via mongoose)operation
,如果有一臺服務器崩潰,會發生什麼(由於電源故障或可能的遠程MongoDB的服務器關閉)這樣的場景:
----->Update User1 Document.followers = User2
SERVER CRASHED , FOREVER RESTARTS NODE
以下操作會發生什麼?該系統目前正處於不一致的狀態,我可能有錯誤,每次我要求用戶2追隨者
----->Update User2 Document.followers = User1
----->Some other mongodb(via mongoose)operation
也請推薦優秀的日誌記錄和在Linux上運行的應用程序啓動/顯示器模塊。
現在我正在使用域來捕獲異常,做server.close,但在process.exit()之前我想確保所有的數據庫事務都完成了,我可以通過測試來檢查事件循環是否爲空或者不(如何?)然後process.exit(1)?
對於這款TokuMX,您對這款多狀態交易支持的看法如何呢? –
我沒有進入MongoDB內部,但據我所知,不能在沒有任何權衡的情況下實現ACID(請參閱http://en.wikipedia.org/wiki/CAP_theorem)。所以如果你真的需要事務處理,你最好使用DBMS和本地事務處理支持。 – vkurchatkin
^這。MongoDB不支持在多個文檔上進行完整的原子操作。或者你嘗試一些或多或少便宜的解決方法,或者你去RDBMS。 – durum