database - 使用cassandra查询和删除聊天收件箱系统

标签 database cassandra

我正在使用 Cassandra 制作聊天应用程序。我有一个名为“聊天”的表,我在其中存储聊天 ID、用户 ID 和时间戳。我有另一个存储消息的表。 (chatid,messageid,消息)。每当收到一条关于聊天 ID 的新消息时,我想更新该聊天 ID 的“聊天”表中的时间戳值。我想在时间戳列上使用 CLUSTERING ORDER BY。当用户需要获取他们所有的聊天记录时,我使用 userid 查询此表以按时间戳顺序获取所有聊天记录。我遇到的问题是我无法使用 userid 和 chatid 从“聊天”表中删除一行。如果我创建 userid 和 chatid 主键,我将无法仅使用 userid 来获取用户的所有聊天记录。我该如何着手解决我的问题。

最佳答案

在您的桌面聊天中:

您应该创建用户 ID 作为分区键。 chatid & timestamp 应该是聚类列。 请参阅以下架构:

CREATE TABLE chats (    
    userid text,
    chatid text,
    timestamp timestamp,
    PRIMARY KEY ((userid), chatid, timestamp)
) WITH CLUSTERING ORDER BY (userid ASC, timestamp DESC );

现在您只能通过用户 ID 删除,如果您想删除特定聊天,您必须知道该聊天的用户。这样您就可以在删除时同时放置两者。

现在,如果您想在时间戳列上使用 CLUSTERING ORDER BY,那么它必须是上面创建的集群列。

如果你只想更新一行中的时间戳是不可能的,因为它会插入一个新行。所以你需要通过以下方式管理你的代码:

首先通过userid & chatid选择。
如果存在则删除它并插入一个具有更新时间戳的新条目。

关于database - 使用cassandra查询和删除聊天收件箱系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54661388/

相关文章:

mysql - 有没有办法显示 mysql 中查询执行的实际 i/o

sql - 使用多个复合输出参数调用 PostgreSQL 函数

java - 在 cassandra 中设置 TTL 后无法运行选择查询

mysql - SSRS多个数据库源要加入

php - 警告:mysqli::mysqli() [mysqli.mysqli]: (08004/1040): OpenCart 中的连接过多

mysql - SQL查询从所有数据库中获取数据

cassandra - 如果复制因子为 3,是否意味着数据中心需要 4 个节点?

cassandra - Cassandra 中的 RPC 超时

cassandra - 退役后如何重用cassandra节点?

Cassandra 和 super 列