1. ホーム
  2. データベース

[解決済み】Cassandraのパーティションキー、コンポジットキー、クラスタリングキーの違い?

2022-03-23 07:43:04

質問

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

primary key,
partition key, 
composite key 
clustering key

解決方法は?

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

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

主キーは シンプル とインラインで宣言しているほどです。

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

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

しかし、主キーはまた コンポジット (別名 コンポジット )、より多くの列から生成される。

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

の状況では コンポジット プライマリ・キーは、キーの最初の部分(quot; first part")を PARTITION KEY (この例では キー_パート_ワン がパーティション・キー)、キーの2番目の部分が クラスタリングキー (この例では キーパート2 )

パーティション・キー、クラスタリング・キーとも、より多くのカラムで作ることができることに注意してください。 その方法は以下の通りです。

 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 ドキュメント


小さな使い方・コンテンツ例

***simple*** キーです。
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';

テーブルコンテンツ

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

合成/複合キー は、ワイド行を取得することができます(つまり、クラスタリング・キーが定義されていても、パーティション・キーだけでクエリーを実行することができます)。

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 の両方を含まないもの