使用cassandara查询和删除聊天收件箱系统

时间:2019-02-13 02:02:08

标签: database cassandra

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

1 个答案:

答案 0 :(得分:1)

在表中聊天:

您应该创建用户ID作为分区键。 chatid和时间戳记应为“聚类”列。 请参阅以下架构:

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

现在,您只能按用户ID删除,也要删除特定的聊天,您必须是该聊天的用户。这样您就可以在通过chatid删除内容时将两者放在一起。

现在,如果要在时间戳列上使用CLUSTERING ORDER BY,则它必须是上面创建的聚类列。

如果您仅想直接更新一行中的时间戳是不可能的,因为它将插入新行。因此,您需要通过以下方式来管理代码:

首先通过用户ID和聊天对象进行选择。
如果存在,则将其删除并插入具有更新时间戳记的新条目。