2015-12-18 94 views
4

我有以下architechture: enter image description here將數據從SQL導入到MongoDB。全有或全無

我從SQL datbase數據導入的mongodb。我使用導入程序將數據遷移到通過API將數據提供給網站的mongodb中。

導入可能需要幾分鐘的時間,如果失敗,我希望能夠回滾(這將是能夠回滾多個導入)或刪除數據庫/集合的uncommited行(如果你認爲它是SQL事務)。

我試圖導入所有事務到一個事務集合,成功後,將數據移入正確的集合。這花了很多時間來表現。我也嘗試了導入到臨時數據庫然後交換它們的解決方案。但是,如果有人遇到問題,我會遇到問題在數據庫副本之後但在導入完成之前在網站上註冊新用戶(交換時該用戶將丟失)。

如何以安全的方式執行導入操作並且沒有最基本的併發問題?

編輯: 澄清溶液: 我將運行在cron作業的進口商,至少每天一次。我目前保留最新同步的時間戳,並選擇比SQL-db更新的一切。隨着時間的推移,事物會自動出現在SQL-db中。

在導入結束時,我運行一個下載程序,該下載程序從SQL數據庫中的url下載所有圖像。

我不想在下載圖像之前開始新的同步,因爲這可能會導致奇怪的行爲。

+0

是否有原因需要使用節點進行導入?我認爲與節點相比,數據遷移有更多高度專業化的工具可能是更好的選擇; https://開頭github上。com/compose/transporter for one – markthethomas

+0

正如@markthethomas所提到的,極有可能是一個專門的工具。關於回滾,這很複雜,因爲SQL是一個基於ACID的數據庫系統,而Mongo是一個基於BASE的數據庫系統,因此它們與事務的原子性分享非常不同的特性。簡短的故事是,如果您需要回滾SQL事務,則需要跟蹤寫入Mongo DB的內容,然後觸發刪除這些文檔。 – Seonixx

回答

0

在這樣的,你需要非常不同類型的數據庫之間移動數據的情況下,你會傾向於想要的東西真的可靠,功能強大,而且,最重要的是,它的主要關注正在傳輸數據並做得很好。 Node.js非常棒,但我強烈建議你找一些專注於傳輸/映射/等的工具。並使用它,而不管它使用什麼語言/技術。關於node.js沒有任何關於node.js的內容,我喜歡它,特別推薦它用於這類事情(例如,最好的特性不是必然使它適合這種傳輸/遷移)。

最好還是找個成熟發達庫,處理這樣的事情:)

有些工具/資源,在我的研究打開了:

如果人們可以在評論中提出更多建議,我們會很樂意:)

+0

我完全同意成熟,發達。您可以看到我的編輯以更好地瞭解手頭的問題。 –

相關問題