2014-08-29 307 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