2016-05-31 7 views
0

私が取り組んでいるプロジェクトは、複数の「部屋」に展開されます。各部屋には独自のサーバーがあり、node.jsのインスタンスを実行しており、各部屋には何らかの形式のデータストレージがあります。 (データベースフレーバーはまだ決定されていません)。node.js/DB構造に関する助言が必要

それぞれの部屋はそれ自身で完全に動作することができなければなりません。したがって、5つの部屋があり、4つの部屋が閉鎖されている場合、最後のものは他人なしで働くことができるはずです。これまでのところ問題はありません...

トリッキーな部分は、部屋の間にいくつかの共有データがあります...ユーザーアカウントなど。だから1つの部屋がユーザーを追加すると、そのユーザーはすべての部屋にログインできるようになります。
他の部屋の1つがレコードを変更して、必要に応じてそれらのデータをリロードできるようにnode.jsインスタンスに通知できればいいです...

私は見ていますMongoDBレプリカセットは、それが私の問題のための最善の解決策であるとは確信していません。

私はまた、各部屋がそのDBを担当し、他のnode.jsインスタンスが新しいユーザーを通知するイベントをブロードキャストするときにそれを更新するソリューションについて考えていました。問題は、ある部屋が1日オフラインになっている場合、その休憩時間に行われた変更に追いつかないことです。

ここで膨大な量のデータを見ているわけではありません。適切な方向に私を指すのに十分なDB知識を持っている人は誰ですか?

答えて

1

すべての部屋に、自分のデータベースを持つ必要はありません。

あなたが探しているのは、SQL/NoSQLになることができる単一の中央データベースを持つことです。この中央データベースは、信頼性、可用性、データシャーディング、ロードバランシング、および単一のマシンではなくデータベースクラスタを持つ他の多くのメリットのために、複数のマシンにクラスタ化できます。これを行う方法は、データベースシステムによって異なります。そこにはたくさんのものがあります:mysql、redis、postgresqlなど。あなたはそれらを見ることができます。

すべてのノードインスタンスは、その中央データベースから書き込みおよび読み取りを行います。新しいユーザーがどこかに追加されたときに、インスタンスが互いに通知して、自分のローカルデータベースを更新する必要はありません。これは全く必要ではありません。この場合、ノードが1日オフラインであっても、オンラインに戻ったときに中央データベースからすべての新しいデータにアクセスすることができます。これはあなたが従うべき設計です。

複数のデータベースインスタンスを持つ場合、各部屋に1つずつ、サーバーレベルでコーディネーションレイヤーを実装するのは合計NOです。この調整は、データベース層自体で行う必要があり、すべてのサーバーインスタンスがデータベースに接続でき、一貫性があり更新されている必要があります。

私はこの回答があなたの指導に役立つことを願っています。

関連する問題