クラスター全体にわたってデータが分散される方法(仮想ノードを使用して)

Vnodeでは、コンシステント・ハッシュ法を使用してデータを分散させますが、新しいトークンの生成と割り当ては必要ありません。

Cassandra1.2以前では、クラスターの各ノードに対して1つのトークンを計算して割り当てる必要がありました。各トークンによって、リングにおける各ノードの位置と、データのハッシュ値に応じた各ノードが担当するデータ範囲が決まりました。Cassandra 1.2以降は、各ノードに多数のトークンが許可されています。この新しいパラダイムは仮想ノード(vnode)と呼ばれます。vnodeにより、各ノードは、クラスター全体にわたって分散される多数の小さなパーティション範囲を持つことができるようになります。vnodeは、コンシステント・ハッシュ法を使用してデータを分散しますが、トークンの生成および割り当ては必要ありません。

図: 仮想アーキテクチャーと単一トークン・アーキテクチャー

図の上半分は、vnodeなしのクラスターを示します。このパラダイムでは、各ノードが、リング内での位置を表す1つのトークンを割り当てられます。各ノードは、1つ手前のノードからそのノードに割り当てられている値までの範囲のトークン値にマッピングされるパーティション・キーを持つデータを格納します。各ノードには、クラスターの他のノードからの各行のコピーも含まれています。たとえば、レプリケーション係数が3の場合、範囲Eはノード5、6、および1にレプリケートされています。ノードは、リング空間の中で連続的なパーティション範囲を1つだけ所有していることに注目してください。

図の下半分は、vnodeを持つリングを示します。クラスター内では、仮想ノードがランダムに選択され、連続していません。行の配置は、各ノードが担当する多数の小さいパーティション範囲に納まるパーティション・キーのハッシュによって決まります。