【问题标题】:querying and deleting a chat inbox system using cassandara使用 cassandra 查询和删除聊天收件箱系统
【发布时间】:2019-07-06 18:24:47
【问题描述】:

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

【问题讨论】:

  • 查看表的确切架构以及失败的删除语句会很有帮助。

标签: database cassandra


【解决方案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 删除时同时放置两者。

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

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

首先按用户 ID 和聊天 ID 选择。
如果存在则删除它并插入一个带有更新时间戳的新条目。

【讨论】:

    猜你喜欢
    • 2019-03-30
    • 2013-03-28
    • 2015-09-10
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2017-09-21
    • 2020-12-29
    相关资源
    最近更新 更多