【发布时间】:2019-11-13 05:15:44
【问题描述】:
使用 Cassandra,可以在具有特定列的表上指定集群排序。
CREATE TABLE myTable (
user_id INT,
message TEXT,
modified DATE,
PRIMARY KEY ((user_id), modified)
)
WITH CLUSTERING ORDER BY (modified DESC);
注意:在此示例中,每个 user_id 有一条消息(预期)
鉴于此表,我的理解是,在查询最近的数据的情况下,查询的性能会更好。
但是,如果在哪里对“已修改”列进行更新,是否会在服务器上增加额外的“重新排序”开销,并且该开销与查询性能相比是否显着?
换句话说,如果“CLUSTERING ORDER BY (modified DESC)”被删除,这个表的性能会更好吗?
更新:通过向主键添加修改来更新无效的 CQL,但是,原来的问题仍然存在。
【问题讨论】:
-
提示:该表定义不是有效的 CQL。
-
我把它和cassandra.apache.org/doc/latest/cql/ddl.html#create-table这里的表定义进行了比较,似乎是有效的,请您指出问题
-
问题是
modified没有被定义为聚类键,所以你不能在它上面定义聚类顺序。要解决此问题,应将主键定义为PRIMARY KEY (user_id, modified)。有关组合键的更多信息,以及集群键的特征stackoverflow.com/questions/24949676/… -
我的错误是疏忽,我将日期作为服务器上的主键,只是在我的示例中没有。
-
另请注意,如果您想通过
modified设置聚类顺序,您将无法更新该记录(如stackoverflow.com/questions/27075596/… 中所述); Cassandra 是一个仅追加的数据库引擎:这意味着对记录的任何更新都将添加具有不同时间戳的新记录,选择将考虑具有最新时间戳的记录。这意味着永远不会有 “重新排序” 操作。