2013-09-05 49 views

回答

34

假設你的集羣鍵

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

其中,ki是第i個鍵名和Ti是第i個密鑰類型。然後訂單數據以字典順序存儲,其中使用該類型的比較器比較每個維度。

所以(A1,A2,...,AN)<(B1,B2,...,BN)如果A1 < B1使用T1比較,或A1 = B1和a2 < B2使用T2比較,或( a1 = b1和a2 = b2)和a3 < b3使用t3比較器等。

這意味着找到具有某個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

非常感謝Richard。在您的示例中,我能夠理解集羣列和CQL文檔「爲PRIMARY KEY定義列的順序」。從http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmt。 – Vinodh