带更新的cassandra聚类次序[性能]

sbtkgmzw  于 2021-06-14  发布在  Cassandra
关注(0)|答案(3)|浏览(338)

使用cassandra,可以在具有特定列的表上指定集群顺序。

CREATE TABLE myTable (
    user_id INT,
    message TEXT,
    modified DATE,
    PRIMARY KEY ((user_id), modified)
)
WITH CLUSTERING ORDER BY (modified DESC);

注意:在本例中,每个用户\ id(预期)有一条消息
根据这个表,我的理解是,在查询最近数据的情况下,查询的性能会更好。
但是,如果要更新“modified”列,是否会在服务器上增加额外的开销来“重新排序”,并且开销与查询性能相比是否显著?
换句话说,给定这个表,如果删除“clustering order by(modified desc)”,它的性能会更好吗?
更新:更新了无效的cql,添加了修改的主键,但是原来的问题仍然存在。

o7jaxewo

o7jaxewo1#

为了修改集群列,需要在主键中定义它。

CREATE TABLE myTable (
    user_id INT,
    message TEXT,
    modified DATE,
    PRIMARY KEY ((user_id), modified)
)
WITH CLUSTERING ORDER BY (modified DESC);

这样,您的数据将主要按用户id的散列值排序,并在每个用户id中按modified排序。您不需要删除“with clustering order by(modified desc)”

eagi6jfj

eagi6jfj2#

移动评论作为答案,作为更新问题的答复:
如果在哪里对“modified”列进行更新,是否会在服务器上为“reorder”增加额外的开销,并且该开销与查询性能相比是否显著?
如果 modified 如果定义为群集键的一部分,则您将无法更新该记录,但可以根据需要添加任意多个记录,每次都有不同的修改日期。
cassandra是一个只附加的数据库引擎:这意味着对记录的任何更新都将添加一个具有不同时间戳的新记录,select将考虑具有最新时间戳的记录。这意味着不存在“重新订购”操作。
删除或创建聚类顺序应该在查询如何检索信息的基础上定义,如果您只打算使用该用户id的最新记录,那么按照您定义的聚类顺序进行排序是有意义的。

lstz6jyr

lstz6jyr3#

在您的数据模型中,userid是一个rowkey/shardkey/partition键(userid),它对数据局部性很重要,而clustering列(modified)指定了数据在分区内的排列顺序。这两个键的组合构成主键。
即使在RDB世界中,为了数据完整性,也可以避免更新pk。
但是在cassandra中,列族/表之间没有约束/关系。将完全相同的值赋给pk字段(userid,modified)将导致更新现有记录,否则将添加字段集。
参考文献:https://www.datastax.com/dev/blog/we-shall-have-order

相关问题