与卡桑德拉一起排序



我有一个带有模式的表:

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

我在这个表上也有关于列发送类型的二级索引。

所有查询(到目前为止(都需要由创建在DESC

但现在我需要做一个新的查询,比如:

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

除了实例化视图之外,是否有任何选项可以创建此查询?

谢谢。

不幸的是,Cassandra 代码有一个显式检查,即在查询中没有使用二级索引,里面有ORDER BY

恕我直言,您有以下选择:

  1. 创建一个新表并从您的代码中填充它。从性能的角度来看,它可能比使用具体化视图快得多。但这需要在应用中进行更多编码。
  2. 使用物化视图 - 它比显式表慢,但不需要任何其他代码。但请记住,MV 在 Cassandra 中仍处于实验阶段,您可能会遇到不一致的情况;
  3. 在您的应用程序中执行排序 - 如果您没有那么多数据,那么您可以提取到您的应用程序中并进行排序 - 在这种情况下,像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);

最新更新