Cassandra のパーティション キー、複合キー、クラスタリング キーの違いは何ですか? 質問する

Cassandra のパーティション キー、複合キー、クラスタリング キーの違いは何ですか? 質問する

私は、以下のタイプの違いを理解するために、ネット上の記事を読んできましたkey。しかし、私には理解するのが難しいようです。例を見れば、理解が深まることは間違いありません。

primary key,
partition key, 
composite key 
clustering key

ベストアンサー1

これについては多くの混乱があるので、できるだけ簡単に説明したいと思います。

主キーは、テーブルからデータを取得するために使用される 1 つ以上の列を示す一般的な概念です。

主キーはSIMPLEで、インラインで宣言することもできます。

 create table stackoverflow_simple (
      key text PRIMARY KEY,
      data text      
  );

つまり、1つの列で作られているということです。

ただし、主キーは、より多くの列から生成されるCOMPOSITE (別名COMPOUND ) にすることもできます。

 create table stackoverflow_composite (
      key_part_one text,
      key_part_two int,
      data text,
      PRIMARY KEY(key_part_one, key_part_two)      
  );

複合主キーの場合、キーの「最初の部分」はパーティション キー(この例ではkey_part_oneがパーティション キー) と呼ばれ、キーの 2 番目の部分はクラスタリング キー(この例ではkey_part_two )と呼ばれます。

パーティション キーとクラスタリング キーはどちらも複数の列で作成できることに注意してください。方法は次のとおりです。

 create table stackoverflow_multiple (
      k_part_one text,
      k_part_two int,
      k_clust_one text,
      k_clust_two int,
      k_clust_three uuid,
      data text,
      PRIMARY KEY((k_part_one, k_part_two), k_clust_one, k_clust_two, k_clust_three)      
  );

これらの名前の背後には...

  • パーティションキーは、ノード間でのデータ分散を担当します。
  • クラスタリングキーは、パーティション内のデータのソートを担当します。
  • キーは、単一フィールドキー テーブル (つまり、シンプル)のパーティション キーと同等です。
  • 複合キーは、複数列のキーです。

さらなる使用情報:DATASTAX ドキュメント


小さな使用法とコンテンツの例
***シンプル*** キー:
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';

表の内容

key | data
----+------
han | solo

COMPOSITE/COMPOUND KEY は「ワイド行」を取得できます (つまり、クラスタリング キーが定義されている場合でも、パーティション キーだけでクエリを実行できます)

insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 9, 'football player');
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 10, 'ex-football player');
select * from stackoverflow_composite where key_part_one = 'ronaldo';

表の内容

 key_part_one | key_part_two | data
--------------+--------------+--------------------
      ronaldo |            9 |    football player
      ronaldo |           10 | ex-football player

ただし、すべてのキー (パーティションとクラスタリングの両方) を使用してクエリを実行することは可能です...

select * from stackoverflow_composite 
   where key_part_one = 'ronaldo' and key_part_two  = 10;

クエリ出力

 key_part_one | key_part_two | data
--------------+--------------+--------------------
      ronaldo |           10 | ex-football player

重要な注意: パーティションキーは、を使用してクエリを実行するために必要な最小指定子ですwhere clause。次のような複合パーティションキーがある場合

例えば:PRIMARY KEY((col1, col2), col10, col4))

少なくとも col1 と col2 の両方を渡すことによってのみクエリを実行できます。これらはパーティション キーを定義する 2 つの列です。クエリを作成するための「一般的な」ルールは、少なくともすべてのパーティション キー列を渡す必要があるということです。その後、各クラスタリング キーを、設定されている順序でオプションで追加できます。

したがって、有効なクエリは次のようになります(セカンダリインデックスを除く

  • col1 と col2
  • col1 と col2 と col10
  • col1 と col2 と col10 と col4

無効:

  • col1 と col2 と col4
  • col1とcol2の両方を含まないもの

おすすめ記事