Cassandra如何查询获取最新消息

Cassandra how to query to get the most recent message

我需要帮助,我是 Cassandra 的新手。我有一个 table 通话, user1 是我的分区键,而 time 是我的集群键

我如何查询此 table 以获取所有用户,user1 已与之建立对话,包括最近的消息。

CREATE TABLE conversation (
  user1 text,
  conversationId text,
  message text,
  user2,
  time,
  PRIMARY KEY(user1, time) 
) WITH CLUSTERING ORDER BY (time DESC)

.............................................................
| User1 | ConversationId |    Message    | User 2  |  Time  |
|.......|................|...............|.........|........|
| Bobby | 100 - 101      | Hello         | Chris   |12:10pm |
| Bobby | 100 - 101      | U there?      | Chris   |12:11pm |
| Bobby | 100 - 102      | Am here       | Dan     |12:12pm |
| Bobby | 100 - 102      | Hello Dan     | Dan     |12:13pm |
| Bobby | 100 - 103      | Am coming     | Sam     |12:14pm |
| Bobby | 100 - 103      | Hello sam     | Sam     |12:15pm |

This should be my output after query.

.............................................................
| User1 | ConversationId |    Message    | User 2  |  Time  |
|.......|................|...............|.........|........|
| Bobby | 100 - 103      | Hello sam     | Sam     |12:15pm |
| Bobby | 100 - 102      | Hello Dan     | Dan     |12:13pm |
| Bobby | 100 - 101      | U there?      | Chris   |12:11pm |



您无法使用现有的 table 在 Cassandra 中执行此操作。但是您可以为此创建一个新的 table,并将所有记录也插入到 table 中。

CREATE TABLE conversation_lastmessage (
  user1 text,
  conversationId text,
  message text,
  user2 text,
  time timestamp,
  PRIMARY KEY ((user1), user2));

假设你按时间顺序插入你的数据,你会得到user1和每个通讯员的最新消息。

SELECT * FROM conversation_lastmessage WHERE user1 = 'user1';

在 Cassandra 中,您将数据按顺序存储在磁盘上,因此在 select 数据时不使用 order by 子句。使用@medvekoma table 示例,您将按以下方式添加 WITH CLUSTERING ORDER BY。请记住,您需要在主键声明中包含时间元素,然后您可以在聚类 order by 语句中使用时间元素。

CREATE TABLE conversation_lastmessage (
  user1 text,
  conversationId text,
  message text,
  user2 text,
  time timestamp,
  PRIMARY KEY ((user1), user2, time)
)
WITH CLUSTERING ORDER BY (time DESC);

因此,无论您的数据加载顺序如何,它都会按照您需要的顺序存储在磁盘上。 Cassandra 中的最佳实践是为每个单独的查询创建一个 table。要了解有关 Cassandra 中数据建模的更多信息,您应该参考 Datastax academy,注册并参加数据建模课程,