如何更改Cassandra分区方案以保持订单?

问题描述 投票:0回答:1

我在单节点集群中安装了Apache Cassandra。当我构建列族时,由于基于主键的murmur3分区器,数据被分区,并且表不保留主键的顺序。因此,我看到的SStable输出将按位置排序,但主键的顺序会有所改变。

根据我的要求,我不希望改变主键的顺序。那么,我该如何改变Cassandra的分区方案呢?我查看了cassandra.yaml文件,但没有关于如何更改默认的murmur3分区程序的说明。如果更改默认值会有什么影响吗?

这是我创建的表:

CREATE TABLE ycsb.expt (
y_id varchar,
field0 varchar,
field1 varchar,
field2 vachar,
PRIMARY KEY (y_id, field0) WITH CLUSTERING ORDER BY (field0 ASC);

将数据添加到表后,当我执行“select * from expt”时,这是我的输出

     y_id   | field0     | field1       | field2
    --------+------------+--------------+------------
     user48 |   ?O3 :<5[ |       *B-0Qa |          .
     user14 |         .J |     (=~/0`"4 |         03
     user40 |       (Uu' |          +.0 |          ;
     user42 |         // |          ((* |         3O
      user8 |          , |     =Ao3[??< |   4.2(Hm6O

我希望此输出的顺序与插入数据的顺序相同,我按排序顺序插入(例如:User8,User 14,User40)。尽管创建了聚类键,但它已经改变了数据。

如何确保输出按上表排序?

cassandra cassandra-3.0
1个回答
0
投票

cassandra.yaml中的“partitioner”配置决定了集群使用的分区程序。你有三种可能性,但我怀疑你确实想要Murmur3 Partitioner。

文档可以进一步解释其他选择如何工作:https://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archPartitionerAbout.html

但是听起来你的问题不在于使用分区器而是使用数据模型。如果您的要求决定了您的行的顺序,则应重新评估它以使其具有群集密钥。请注意,这将与分区键分开,分区键确定行将落入哪些分区。

请参阅此处发布的答案,以获取有关配置主键的各种方法的说明:Difference between partition key, composite key and clustering key in Cassandra?

一旦拥有了一个您满意的集群密钥,您就可以在CQL查询中的那些列上使用ORDER BY指令。

© www.soinside.com 2019 - 2024. All rights reserved.