パーティショナー

パーティショナーは、クラスター内のノードにデータをどのように分散させるかを決定します(レプリカを含む)。

cassandra.yaml

cassandra.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/cassandra/cassandra.yaml
tarボール・インストール installation_location/resources/cassandra/conf/cassandra.yaml

パーティショナーは、クラスター内のノードにデータをどのように分散させるかを決定します(レプリカを含む)。

パーティショナーは、パーティション・キーを表すトークンを導き出す機能で、通常はハッシュによって行われます。データの各行は、トークンの値によってクラスター全体に分散されます。クラスパス内にあるものであれば、独自のものも含めて、任意のIPartitionerを使用できます。

デフォルトのMurmur3Partitionerは、トークンを使用して各ノードに等しい割合のデータを割り当てることで、すべてのテーブルのデータをリング、またはkeyspaceのような他のグループの全域に均等に分散します。テーブルがユーザー名やタイムスタンプなど、異なるパーティション・キーを使用している場合でも同じです。ハッシュ範囲の各部分は平均して同じ数のパーティションを受け取るため、クラスターへの読み取り要求と書き込み要求は均等に分散され、ロード・バランスが簡略化されます。詳細については、「コンシステント・ハッシュ法」を参照してください。

トークンを各ノードに割り当てる必要があるかどうかは、アーキテクチャーのタイプによって異なります。
  • 仮想ノード:割り当てアルゴリズムまたはランダム選択アルゴリズムのいずれかを使用して、データ・センター内のノードに分散されるトークンの数を指定します。データ・センター内のすべてのシステムで、同じアルゴリズムを使用する必要があります。
  • 単一トークン・アーキテクチャー:データがクラスター内のノード間で均等に分割されるようにするには、各ノードの initial_tokencassandra.yaml ファイルでinitial_tokenパラメーターの値を入力する必要があります。トークン値を決定するには、「単一トークン・アーキテクチャー・ノードのトークンを計算する」を参照してください。
注: パーティショナーは互いに互換性がないことに注意してください。1つのパーティショナーでパーティション分割されたデータを、その他のパーティショナーに簡単に変換することはできません。

DataStax Enterpriseには、以下のパーティショナーがあります。

Murmur3Partitioner(デフォルト)
MurmurHashハッシュ値に基づいてデータをクラスター全体に均等に分散させます。このハッシュ関数は、-263~+263-1の可能な範囲でパーティション・キーの64ビットのハッシュ値を生成します。このパーティショナーは、ほとんどの場合に新しいクラスターに適しており、RandomPartitionerよりも3~5倍のパフォーマンスが得られます。
このパーティショナーを使用する場合は、CQLクエリーでトークン関数を使用して、すべての行をページングして取得できます。
RandomPartitioner
このパーティショナーは、後方互換性を維持するために含まれています。これは、行キーのMD5ハッシュ値を使用してノード全体に均等にデータを分散します。ハッシュ値の可能な範囲は、0~2127 -1です。データベースで必要とされない暗号化ハッシュを使用するため、Murmur3Partitionerよりもハッシュ値の生成に時間がかかります。
このパーティショナーを使用する場合は、CQLクエリーでトークン関数を使用して、すべての行をページングして取得できます。
ByteOrderedPartitioner
このパーティショナーは、後方互換性を維持するために含まれています。このパーティショナーはキーのバイトに基づいて行を辞書順に順序付けます。クラスターのロード・バランスをとるには非常に多くの管理オーバーヘッドが必要になり、シーケンシャル書き込みによってホット・スポットが発生し、1つのテーブルのバランスをとると同じクラスター内の別のテーブルの分散が不均一になる可能性があるため、推奨しません。

DataStaxはデフォルト・パーティショナー、Murmur3Partitionerの使用を推奨します。パーティショナーは cassandra.yamlファイルで変更できます。