使用 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
查询没有使用二级索引
恕我直言,您有以下选择:
- 创建一个新的 table 并用您的代码填充它。从性能的角度来看,它可能比使用物化视图快得多。但这需要在您的应用中进行更多编码。
- 使用实体化视图 - 它比显式 table 慢,但不需要任何额外的代码。但请记住,MV 在 Cassandra 中仍处于试验阶段,您可能会遇到不一致的情况;
- 在您的应用程序中执行排序 - 如果您没有那么多数据,那么您可以获取到您的应用程序并排序 - 在这种情况下,像
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);
我有一个 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
查询没有使用二级索引
恕我直言,您有以下选择:
- 创建一个新的 table 并用您的代码填充它。从性能的角度来看,它可能比使用物化视图快得多。但这需要在您的应用中进行更多编码。
- 使用实体化视图 - 它比显式 table 慢,但不需要任何额外的代码。但请记住,MV 在 Cassandra 中仍处于试验阶段,您可能会遇到不一致的情况;
- 在您的应用程序中执行排序 - 如果您没有那么多数据,那么您可以获取到您的应用程序并排序 - 在这种情况下,像
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);