Cassandra未读消息很重要

时间:2018-03-19 15:12:07

标签: database cassandra nosql datastax cql

请尝试为未读邮件建模。我有一个user_messages表     

    CREATE TABLE user_messages (
      user text,
      sender text,
      message text,
      read boolean,
      creation_date timestamp,
      PRIMARY KEY (user, creation_date)
    );
    
我怎么知道未读邮件的总数?我是否需要创建一个计数器表并在每次读取消息时更新user_messages表? 我还读到使用select count(*)太贵了,不建议用于生产。我需要帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用静态列来保留未读邮件的数量,并在阅读邮件时更新它(但您需要确保它未从2个位置更新)。类似的东西:

CREATE TABLE user_messages (
  user text,
  unread int static,
  sender text,
  message text,
  read boolean,
  creation_date timestamp,
  PRIMARY KEY (user, creation_date)
);

然后获取未读消息的计数将是简单查询(或缩小到特定字段):

select * from user_messages limit 1;

并从答案中获取unread字段。

P.S。关于count(*) - 当你没有指定分区密钥时,它是昂贵的,但当你在分区内部计算时(在你的情况下如果你有when user = ?) - 那么它&# 39;更便宜,但由于传输数据仍然会有很大的开销。由于read标记不是群集列,因此您无法限制它。