在卡桑德拉
问题描述:
我新手卡珊德拉,我需要一个表格模型存储城镇排序。在卡桑德拉
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)
);
但需要我永远无法城镇排序。
答
通过这种方式,你可以有一个工作的排序,但你不能扩展你创建热点。 想象一下,你有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, 卡罗
我agree.Thanks你的答案。 – ejq11827 2014-08-29 10:40:35
如果在这种情况下指定20的复制因子,该怎么办? – ejq11827 2014-08-29 11:15:15
然后你仍然在使用卡桑德拉的方式不好。射频的想法是没有单点故障,不让每个节点拥有相同的数据 – 2014-08-29 11:16:19