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