[解決済み】Cassandraのパーティションキー、コンポジットキー、クラスタリングキーの違い?
質問
以下の違いを理解するために、ネット上の記事を読んでいます。
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 の両方を含まないもの
関連
-
[解決済み】識別関係と非識別関係の違いとは?
-
[解決済み] SequelizeでfindOrCreateを使う方法
-
[解決済み] どのようにneo4jデータベースをリセット/クリア/削除するには?
-
[解決済み] Hibernateです。ManyToOne生成フィールドraw(255)
-
[解決済み] FactテーブルとDimensionテーブルの違い?
-
[解決済み] ORA-011033 を解決する方法。ORACLE の初期化またはシャットダウンが進行中です。
-
[解決済み] rake db:migrate db:reset とdb:schema:loadの違いについて
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】すべてのテーブルに主キーを持たせるべきですか?
-
[解決済み】データベースのMongoDBダンプを作成する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] どのようにneo4jデータベースをリセット/クリア/削除するには?
-
[解決済み] PostgresqlのSCRAM認証の問題はどうすれば解決できますか?
-
[解決済み] シーケンシャルフラッディングとは何ですか?
-
[解決済み] スキーマとテーブルとデータベースの違いは何ですか?
-
[解決済み] 外部キーを主キーにするのは問題ないですか?
-
[解決済み] Python 3 - JDBCで接続する
-
[解決済み] ORA-011033 を解決する方法。ORACLE の初期化またはシャットダウンが進行中です。
-
[解決済み】データベース、テーブルとカラムの命名規則?[クローズド]
-
[解決済み】既存のENUM型に新しい値を追加する
-
[解決済み】pgadminでherokuのデータベースに接続する。