使用旧版本的Cassandra,我们需要使用特殊列来创建我们自己的排序行,因为列保存在Cassandra中。
创建PRIMARY KEY
时Cassandra 3.0与CQL是否使用相同的概念?
例如,假设我创建了一个这样的表:
CREATE TABLE my_table (
created_on timestamp,
...,
PRIMARY KEY (created_on)
);
然后我添加各种条目:
INSERT INTO my_table (created_on, ...) VALUES (1, ...);
...
INSERT INTO my_table (created_on, ...) VALUES (9, ...);
Cassandra如何管理PRIMARY KEY
的排序?这会发生在所有节点上,还是只有一个集合(我称之为集合的是重复数量,所以如果你有一个100个节点的集群,复制因子为4,那么主键会出现在100个节点上,25,或者只是4?对于旧版本,它只能在4个节点上。)
答案 0 :(得分:2)
在您的情况下,主键是分区键,它曾经是行键。这意味着如果复制因子设置为4,则插入的数据将出现在100个节点中的4个中。
在CQL中,您可以向主键添加更多列,这些列称为群集键。使用CQL查询C *时,结果集可能包含多个分区键行。这些行是逻辑的,存储在它们共享分区键的分区中(但它们的聚类键值不同)。这些逻辑行中的数据将作为分区进行复制。
在CREATE TABLE声明的官方文档中查看可能的主键示例。
编辑(行排序):
C *按照分区键值的哈希码的顺序保存表的分区。因此排序不是直接的,并且按分区键值进行范围查询的结果不是您期望的结果。但是,由于分区实际上已被命令,您仍然可以在token function的帮助下进行服务器端分页。 也就是说,您可以使用ByteOrderedPartitioner来实现分区的词法排序。但是使用该分区创建热点非常容易,并且通常不鼓励使用它。
给定分区的行按其聚类键的实际值排序。对这些行为的范围查询的行为与您期望的一样。