使用cassandra排序

mpbci0fu  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(483)

我有一个带有模式的表:

CREATE TABLE messages {
   chatroom_id,
   id,
   createdAt,
   senderType,
   ...,
 PRIMARY KEY ((chatroom_id), createdAt)
} WITH CLUSTERING ORDER BY (createdAt DESC);

在这个表上,我还有一个列sendertype的二级索引。
所有查询(到目前为止)都需要由createdat desc排序
但是现在我需要做一个新的查询,比如:

select * from messages where chatroom_id = xx
and senderType = yy
order by createdAt ASC;

除了物化视图之外,是否还有创建此查询的选项?
谢谢。

w41d8nur

w41d8nur1#

不幸的是,cassandra代码有一个显式检查,即在带有 ORDER BY 在里面。
我知道你有以下选择:
创建一个新表并从代码中填充它。从性能的Angular 来看,它可能比使用物化视图快得多。但这需要在你的应用程序中进行更多的编码。
使用物化视图-它比显式表慢,但不需要任何额外的代码。但是请记住,mvs在cassandra中仍然是实验性的,并且您可能会得到不一致的结果;
在您的应用程序中执行排序-如果您没有那么多数据,那么您可以提取到您的应用程序中并进行排序-在本例中,查询如下 select * from messages where chatroom_id = xx and senderType = xx; 会有用的,只需返回数据 DESC ...
对于选项1和2,我建议更改表或mv结构,以包括 senderType 作为主键的一部分,执行起来会快得多,例如:

PRIMARY KEY ((chatroom_id), senderType, createdAt)
) WITH CLUSTERING ORDER BY (createdAt ASC);

相关问题