2013-11-03 60 views
3

我在Node.js和MySQL中創建了這個Web應用程序,並且我在數據同步上掙扎。MySQL體系結構。當多個用戶擁有一個本地數據庫並且同步到一個雲時

這裏的情景:

假設我們有1000級的客戶,都在他們的辦公室/站點本地網絡服務器的數據庫。用戶可以登錄,編輯數據,數據記錄傳感器等。爲了舉例,所有這些活動有助於每個客戶/站點每天大約500KB的表格數據。因此,1000名客戶中的每一個都擁有一個本地數據庫,該數據庫將會在一天內多次不斷更新新數據。

與此同時,所有1000個客戶都有一項雲服務,允許他們登錄並查看他們所有的數據,就好像他們本地在場。他們還可以從雲端進行更改,編輯/創建/刪除數據。

現在我的問題是:

  • 每個站點需要與雲服務器同步雙向。你有什麼建議? (多主複製?,集羣?,寫一個自定義的?)有什麼優點?

  • 什麼時候客戶的網站離線,並且有新的數據添加到本地數據庫和雲端?通常如何進行衝突和合並?

在此先感謝!

回答

1

想象一下,ATM與銀行沒有聯繫的並行現實,他們使用數據庫的副本並僅在一天結束時進行同步。

您將可以開車到城市的每臺ATM機,並多次提取您擁有的所有資金。當你已經是百萬富翁並離開這個國家時,他們只會注意到這種欺詐行爲。

這只是個例,但你看,即使你搞清楚這個同步技工你仍然可以有意想不到的問題,不僅與被改變的值,但具有相同的主鍵等,這可以被創建也不同記錄是一個主要問題。

我相信沒有解決這個問題的通用技術。您將不得不認真研究應用程序在數據庫中可能採取的每個單一操作的同步方面。我不知道,可能會在用於同步的進程中生成可運行的SQL腳本。

+0

嗨,是絕對正確的,我想在ATM的情況下,它必須始終在線。我認爲在我的情況下,丟失一些傳感器樣本(由於ID衝突)是好的,同時允許辦公室/站點繼續脫機運行。感謝您指出這一點,我現在感到高興,從頭開始寫所有的東西,所以我可以手動處理所有的情況。 :-) – opcode

+0

如果只有其中一方能夠改變信息,那麼做這樣的事情是安全的。例如,您可以讓該網站爲只讀。 – Havenard

1

來自個人經驗的觀點:MySQL複製不能很好地擴展。如果你的同步失敗,你將需要一些機制來通知和恢復。如果你有一千個這樣的管理,你會做很多的操作工作。

另一種觀點:考慮跟蹤更改。當任一端進行更改時,將該更改提交給更改控制系統。在預定義的時間,兩端都鎖定更改,兩端運行一個進程以從更改日誌中挑選重複項,然後使兩端都以非重複項更新其數據庫。最後,解鎖更改。同時,編寫兩端都要諮詢更改系統以列出待處理的更改。

這不是一個容易的情況:你有大規模,分佈處理。儘可能減少運動部件,以減少維修點。

相關問題