使用 Cassandra 排序

Sorting with Cassandra

我有一个 table 架构:

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

我也有这个 table 列 senderType 的二级索引。

所有查询(直到现在)都需要按 createdAt DESC

排序

但现在我需要执行一个新查询,例如:

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

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

谢谢。

不幸的是Cassandra code has an explicitly check里面的ORDER BY查询没有使用二级索引

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

  1. 创建一个新的 table 并用您的代码填充它。从性能的角度来看,它可能比使用物化视图快得多。但这需要在您的应用中进行更多编码。
  2. 使用实体化视图 - 它比显式 table 慢,但不需要任何额外的代码。但请记住,MV 在 Cassandra 中仍处于试验阶段,您可能会遇到不一致的情况;
  3. 在您的应用程序中执行排序 - 如果您没有那么多数据,那么您可以获取到您的应用程序并排序 - 在这种情况下,像 select * from messages where chatroom_id = xx and senderType = xx; 这样的查询将起作用,只是 return 中的数据 DESC...

对于选项 1 和 2,我建议更改 table 或 MV 结构以包含 senderType 作为主键的一部分,因为它执行起来会快得多,例如:

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