我有以下architechture: 將數據從SQL導入到MongoDB。全有或全無
我從SQL datbase數據導入的mongodb。我使用導入程序將數據遷移到通過API將數據提供給網站的mongodb中。
導入可能需要幾分鐘的時間,如果失敗,我希望能夠回滾(這將是能夠回滾多個導入)或刪除數據庫/集合的uncommited行(如果你認爲它是SQL事務)。
我試圖導入所有事務到一個事務集合,成功後,將數據移入正確的集合。這花了很多時間來表現。我也嘗試了導入到臨時數據庫然後交換它們的解決方案。但是,如果有人遇到問題,我會遇到問題在數據庫副本之後但在導入完成之前在網站上註冊新用戶(交換時該用戶將丟失)。
如何以安全的方式執行導入操作並且沒有最基本的併發問題?
編輯: 澄清溶液: 我將運行在cron作業的進口商,至少每天一次。我目前保留最新同步的時間戳,並選擇比SQL-db更新的一切。隨着時間的推移,事物會自動出現在SQL-db中。
在導入結束時,我運行一個下載程序,該下載程序從SQL數據庫中的url下載所有圖像。
我不想在下載圖像之前開始新的同步,因爲這可能會導致奇怪的行爲。
是否有原因需要使用節點進行導入?我認爲與節點相比,數據遷移有更多高度專業化的工具可能是更好的選擇; https://開頭github上。com/compose/transporter for one – markthethomas
正如@markthethomas所提到的,極有可能是一個專門的工具。關於回滾,這很複雜,因爲SQL是一個基於ACID的數據庫系統,而Mongo是一個基於BASE的數據庫系統,因此它們與事務的原子性分享非常不同的特性。簡短的故事是,如果您需要回滾SQL事務,則需要跟蹤寫入Mongo DB的內容,然後觸發刪除這些文檔。 – Seonixx