私は、以下のタイプの違いを理解するために、ネット上の記事を読んできました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の両方を含まないもの