2013-09-05 17 views

答えて

34

あなたのクラスタリング・キーがKiはi番目のキー名とtiはi番目のキータイプである

k1 t1, k2 t2, ..., kn tn 

あると仮定します。次に、注文データは辞書順に格納され、各次元はそのタイプのコンパレータを使用して比較されます。

だから(A1、A2、...、)<(B1、B2、...、BN)であれば、T1のコンパレータを用いて< B1 A1、又はA1 = B1とT2のコンパレータを使用してA2 < B2、または(

これは、データが一緒に格納されるため、特定のk1 = aを持つすべての行を見つけることが効率的であることを意味します。しかし、i> 1に対してki = xを持つすべての行を見つけるのは効率的ではありません。実際には、このようなクエリは許可されていません - 唯一のクラスタ化キー制約では、 。

次を挿入しなかった場合たとえば、スキーマに

create table clustering (
    x text, 
    k1 text, 
    k2 int, 
    k3 timestamp, 
    y text, 
    primary key (x, k1, k2, k3) 
); 

を考慮してください。

insert into clustering (x, k1, k2, k3, y) values ('x', 'a', 1, '2013-09-10 14:00+0000', '1'); 
insert into clustering (x, k1, k2, k3, y) values ('x', 'b', 1, '2013-09-10 13:00+0000', '1'); 
insert into clustering (x, k1, k2, k3, y) values ('x', 'a', 2, '2013-09-10 13:00+0000', '1'); 
insert into clustering (x, k1, k2, k3, y) values ('x', 'b', 1, '2013-09-10 14:00+0000', '1'); 

を、それらがディスク上の順(順select * from clustering where x = 'x'リターン)に格納されています。

x | k1 | k2 | k3      | y 
---+----+----+--------------------------+--- 
x | a | 1 | 2013-09-10 14:00:00+0000 | 1 
x | a | 2 | 2013-09-10 13:00:00+0000 | 1 
x | b | 1 | 2013-09-10 13:00:00+0000 | 1 
x | b | 1 | 2013-09-10 14:00:00+0000 | 1 

​​注文が支配的な場合、k2、次にk3

+0

リチャードに感謝します。あなたは例を挙げていただけますか? – Vinodh

+2

答えに例を追加しました。 – Richard

+1

リチャードに感謝します。あなたの例では、クラスタ化カラムとCQLドキュメント "カラムがPRIMARY KEYの問題のために定義されている順序"を理解することができます。 http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmtから入手できます。 – Vinodh

関連する問題