2016-05-31 72 views
0

我工作的項目將被部署到多個「房間」。每個房間都有它自己的服務器,運行node.js的一個實例,每個房間都會有某種形式的數據存儲。 (數據庫風格尚未確定)。需要關於node.js/DB結構的建議

每個房間都必須能夠完全自行操作...所以如果我們有5個房間,並且有4個房間關閉,最後一個房間應該能夠在沒有其他房間的情況下繼續工作。到目前爲止沒有問題...

棘手的部分是,房間之間有一些共享數據...例如用戶帳戶。所以如果一個房間添加了一個用戶,該用戶應該能夠在所有房間中登錄。
這也將是很好,如果Node.js的情況下,如果可能的其他房間一個進行了更改的記錄,通知,以便在需要他們可以重新加載數據...

我一直在尋找MongoDB副本集,但我不相信這是我的問題的最佳解決方案。

我也一直在考慮一個解決方案,其中每個房間負責其數據庫,並在其他node.js實例廣播一個事件來通知新用戶時更新它。問題在於,如果一個房間在一天內脫機,它將無法趕上停機期間所做的更改。

我們沒有在這裏看到大量的數據......這裏有足夠的數據庫知識指向正確的方向嗎?

回答

1

沒有必要讓每個房間都有自己的數據庫。

你打算做的是有一個單一的中央數據庫,可以是SQL/NoSQL。這個中央數據庫可以集羣在多臺機器上,以實現可靠性,可用性,數據分片,負載平衡以及擁有數據庫集羣而不是單臺機器的許多其他好處。對於不同的數據庫系統,這可以做的方式是不同的。這裏有很多:mysql,redis,postgresql等等。你可以看看他們。

所有的節點實例都會從該中央數據庫中讀寫。當一個新用戶被添加到某個地方時,不需要實例通知對方並更新他們自己的本地數據庫。這完全沒有必要。在這種情況下,即使某個節點在一天內脫機,也能夠在再次聯機時從中央數據庫訪問所有新數據。這是你應該遵循的設計。

有多個數據庫實例,每個房間一個,在服務器級別上實現協調層的總數爲NO。這種協調應該在數據庫層本身完成,並且所有的服務器實例都應該能夠聯繫數據庫,而數據庫又是一致的和更新的。

我希望這個答案有助於指導你。