Cassandra 卡桑德拉分类法

Cassandra 卡桑德拉分类法,cassandra,Cassandra,我是卡桑德拉的新手,我需要为储存城镇的桌子建模 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(

我是卡桑德拉的新手,我需要为储存城镇的桌子建模

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');
这是唯一一种在卡桑德拉按城镇名称asc排序的方法吗

我尝试按如下方式对表格进行建模:

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

但我永远无法按要求对城镇进行分类

通过这种方式,您可以进行工作排序,但不能进行缩放并创建热点。 假设您有一个复制因子为3的20节点群集。。。20个节点中有17个不会用于存储数据,因为您有一个固定的分区键(这是一个非常糟糕的主意)

您的分区键是“”,发生的情况是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');
要知道是否有一种组织数据的方法,您需要知道必须执行的确切查询

嗯,,
卡洛

我同意。谢谢你的回答。如果在这种情况下指定一个复制因子20会怎么样?那么你仍然以一种糟糕的方式使用卡桑德拉。RF的理念是没有单点故障,而不是每个节点都拥有相同的数据。我很困惑。你能给我一些有用的链接来了解情况吗?从这开始: