Cassandra 中的排序列是否仅使用一组节点? (一组 = 重复因子)

Are sorted columns in Cassandra using just one set of nodes? (one set = repeat factor)

使用旧版本的 Cassandra,我们需要使用 特殊 行列创建我们自己的排序行,因为列在 Cassandra 中保存时已排序。

Cassandra 3.0 与 CQL 在创建 PRIMARY KEY 时是否使用相同的概念?

例如,我创建了一个 table 像这样:

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 个节点上。)

在你的例子中,主键是分区键,它曾经是行键。这意味着如果复制因子设置为 4,您要插入的数据将出现在 100 个节点中的 4 个上。

在 CQL 中,您可以向主键添加更多列,这些列称为聚簇键。使用 CQL 查询 C* 时,结果集可能包含多个分区键行。这些行是逻辑行,存储在它们共享分区键的分区中(但它们的聚簇键值不同)。这些逻辑行中的数据与分区一样被复制。

查看 CREATE TABLE 语句的官方文档中可能的主键示例。

编辑(行排序):

C* 按照分区键值的哈希码顺序保存 table 的分区。因此,排序不是直接的,并且分区键值范围查询的结果不是您所期望的。但由于分区实际上是有序的,您仍然可以在 token function 的帮助下进行服务器端分页。 也就是说,您可以使用 ByteOrderedPartitioner 来实现分区的词法排序。但是使用那个分区器很容易创建热点,通常不鼓励使用它。

给定分区的行按其聚簇键的实际值排序。范围查询的行为与您预期的一样。