gpt4 book ai didi

Cassandra:列出用户最近的对话

转载 作者:行者123 更新时间:2023-12-03 03:09:52 25 4
gpt4 key购买 nike

我们使用 cassandra 来存储聊天数据。我们必须维护所有用户对话并根据收到的消息对它们进行排序。

对话:是 2 个或更多用户之间的消息流。对话没有结束时间并且是连续的。

我们正在维护一个表,其中包含基于对话创建时间的“用户对话”。但我们希望根据收到的消息对其进行排序。

解决方案

  • 解决方案-1:

我看过类似的问题Cassandra: List 10 most recently modified records

建议使用物化 View 。这种方法适合频繁更新的记录(例如消息)吗?

  • 解决方案-2:使用另一个表来维护列表中的 user_recentconversations。当用户接收/发送消息/由用户发送消息时更新列表。

考虑到用例,请提出更好的解决方案。

最佳答案

您真正想要的是全局对所有消息进行排序。事实上,按最新消息对对话进行排序意味着也会对所有消息进行排序。

解决问题的一个简单方法是创建另一个表,在其中存储每条到达的消息,以便对对话进行排序:

CREATE TABLE conversations_by_most_recent_message (
conversation_id int,
ts timestamp,
message text,
PRIMARY KEY (conversation_id, ts)
) WITH CLUSTERING ORDER BY (ts DESC);

每当消息到达时,您都会将其存储在那里。在此表中,您将看到与每个对话相关的所有消息按时间顺序倒序排列。从该表中获取数据将帮助您了解每个对话的最后一条消息的时间戳。

您需要做的第二步是从每个分区获取最新记录,这可以利用 Cassandra 3.6 中引入的 PER PARTITION LIMIT 子句轻松解决:

SELECT * FROM conversations_by_most_recent_message PER PARTITION LIMIT 1;

这将仅从每个分区中获取第一条记录,即每个对话中的最新消息。

最后一步是对在应用程序级别检索到的行进行排序(按时间戳记)。

关于Cassandra:列出用户最近的对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41519349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com