2013-10-24 7 views
8

私はちょうどcassandraのデータモデリングでthis youtube video of Patrick McFadinを見ました。Cassandra Compositeのキーを理解する

create table user_activity_history { 
    username varchar, 
    interaction_date varchar, 
    activity_code varchar, 
    detail varchar, 
    PRIMARY KEY((username,interaction_date),interaction_time) 
); 

はなぜ主キー((username,interaction_date),interaction_time)で次のように

つのテーブルがありました。 (username,interaction_date,interaction_time)とはどう違うのですか?

+0

Patrick McFadinのビデオにリンクを追加できますか? – lorcan

+0

http://www.youtube.com/watch?v=HdJlsOZVGwM&feature=share&list=PLqcm6qE9lgKJzVvwHprow9h7KMpb5hcUUが追加されました –

答えて

13

違いは表のpartition_keyに関連しています。 (パーティション化される表に挿入

PRIMARY KEY(username,interaction_date,interaction_time) 

データて位置:これは、以下を使用して、例えば、クラスタ内のデータの物理的位置を定義する - 典型的には、PRIMARY KEYの最初の要素は、パーティション・キーでもあります物理的に)usernameによれば、以下を使用して、一方:

PRIMARY KEY((username,interaction_date),interaction_time) 

username,interaction_date組み合わせに応じて分配されるであろう。後者の方式の利点は、単一のusernameに関連するデータをクラスタ内のノードに格納できることです。

CREATE TABLEにdatastaxのCQLのドキュメントのpartition_keysの詳細があります:

あなたはPRIMARY KEYカサンドラは、パーティション・キーや店舗などの定義で宣言された最初の列に行のすべての列を治療する化合物を使用する場合同じ物理ノード上にある。コンポジット・パーティション・キーを使用すると、Cassandraはネストされたカッコ内のカラムをパーティション・キーとして扱い、複数のノードにローのカラムを格納します。追加の括弧セットを使用して複合キー を宣言し、どの列がデータを分割するかを定義します。

関連する問題