2014-08-29 304 views
0

我新手卡珊德拉,我需要一個表格模型存儲城鎮排序。在卡桑德拉

CREATE TABLE towns(
root text, 
name text, 
type text, 
PRIMARY KEY(root,name) 
) WITH CLUSTERING ORDER BY (name ASC); 

INSERT INTO towns(root,name,type) VALUES('.','New York','city'); 
INSERT INTO towns(root,name,type) VALUES('.','London','city'); 
INSERT INTO towns(root,name,type) VALUES('.','Paris','city'); 
INSERT INTO towns(root,name,type) VALUES('.','Tokio','city'); 

是,要得到記錄排序在卡桑德拉城鎮的名字遞增的唯一途徑?

我試着模擬表如下:

CREATE TABLE towns(
    name text, 
    type text, 
    PRIMARY KEY(name) 
); 

但需要我永遠無法城鎮排序。

回答

1

通過這種方式,你可以有一個工作的排序,但你不能擴展你創建熱點。 想象一下,你有3一個複製因子20個節點集羣... 17出20個節點不會被用來存儲你的數據,因爲你有一個固定的分區鍵(非常糟糕的主意)。

你的分區鍵是「」,什麼情況是,卡桑德拉選擇的羣集的節點將通過計算分區鍵的散列託管您的數據,然後發送副本到其他2個節點。

以這種方式使用Cassandra是一個非常糟糕的主意。我寧願執行客戶端,如果我不能找到一些有效的分區鍵排序......想象一下,你必須通過國家的城市,你可以使用國家作爲分區鍵

INSERT INTO towns(country,city,type) VALUES('Italy','Rome','city'); 
INSERT INTO towns(country,city,type) VALUES('Italy','Florence','city'); 
INSERT INTO towns(country,city,type) VALUES('Italy','Venice','city'); 
INSERT INTO towns(country,city,type) VALUES('England','London','city'); 
INSERT INTO towns(country,city,type) VALUES('England','Liverpool','city'); 

要知道,如果有排序是一種組織數據的方式,您需要知道您必須執行的確切查詢。

HTH, 卡羅

+0

我agree.Thanks你的答案。 – ejq11827 2014-08-29 10:40:35

+0

如果在這種情況下指定20的複製因子,該怎麼辦? – ejq11827 2014-08-29 11:15:15

+2

然後你仍然在使用卡桑德拉的方式不好。射頻的想法是沒有單點故障,不讓每個節點擁有相同的數據 – 2014-08-29 11:16:19