Apache Cassandra に関する DataStax の記事を読んだことがあり、書き込むデータが何であれ、すべてのノードに均等に分散されることに気付きました。他のすべての分散データベース管理システムに当てはまるのでしょうか? 他のシステムは、データベース間でデータを均等に分散しますか? それらが均等に分散されていない場合、それらの分散データベース間でデータはどのように分散されますか?
1 に答える
書き込むデータが何であれ、すべてのノードに均等に分散されることに気付きました。
必ずしも。データ複製のレベルは、キースペースごとに設定される複製係数によって決まります。3 つのノードのクラスターがあり、キースペースを次のように定義するとします。
CREATE KEYSPACE stackoverflow
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '3'};
この場合「はい」、データは各ノードに均等に複製されます。しかし、ディスク容量が不足しているとしましょう。(スタートアップとして) 大容量のハード ドライブを購入する余裕はありません。その場合、キースペースを変更して、代わりにレプリケーション ファクターを 2 にすることができます。
CREATE KEYSPACE stackoverflow
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '2'};
このように、各ノードはデータの 3 分の 2 のみを担当します。もちろん、ここでの欠点は、クラスター内の 1 つのノードのみが失われる可能性があることです。
他のすべての分散データベース管理システムに当てはまるのでしょうか? 他のシステムは、データベース間でデータを均等に分散しますか?
簡単に言えば、「いいえ」と「いいえ」です。
それらが均等に分散されていない場合、それらの分散データベース間でデータはどのように分散されますか?
何百もの分散型 DBMS (何らかの方法で「分散型」であると主張する NoSQL と RDBMS の両方を含む) が存在するため、それらすべてがどのようにデータを分散するか (一般的であっても) を要約することはできません。しかし、そのうちのいくつかは「シャード キー」や「セカンダリ ノード」の概念を利用して分散とスケールを実現していると言えます。
Cassandra では、すべてのノードは同等です...「マスター ノード」という概念はありません。ただし、一部のシステムには、「プライマリ」ノードまたは「マスター」ノードと「セカンダリ」ノードの概念があります。これらのシナリオでは、マスターがすべての書き込み操作を処理し、データを 1 つ以上のセカンダリにレプリケートします。シャード キーを使用すると、特定の範囲のシャード値が各ノードに割り当てられます。その後、データは、データのシャード キーが該当する範囲を担当するノードにのみ保存されます。