【问题标题】:Cassandra Order By Updated AtCassandra 订单更新于
【发布时间】:2020-12-28 04:55:12
【问题描述】:

我正在尝试构建一个 cassandra 架构来表示聊天。 我似乎无法弄清楚的一件事是如何查询最近更新的房间(类似于大多数聊天应用列表视图)

  • 列表视图中所需的字段按updated_at desc 排序
    • *房间号
    • 房间名称
    • 房间图片
    • *用户
    • *updated_at
    • *消息条目
    • *消息类型
    • *元数据

当前表格

Create TYPE user(
   id uuid,
   name text,
   avatar text
);

CREATE TABLE rooms(
  id uuid,
  "name" text,
  image text,
  users set<user>,
  archived boolean,
  created_at timestampz,
  updated_at timestampz,
  PRIMARY KEY(id)
);


CREATE TABLE messages(
  room_id uuid,
  message_id timeuuid,
  user user,
  message_type int,
  entry text,
  metadata map<text, text>,
  PRIMARY KEY(room_id, message_id)
) WITH CLUSTERING ORDER BY (message_id DESC);


CREATE TABLE rooms_by_user(
  user_id uuid,
  room_id uuid,
  PRIMARY KEY(user_id, room_id)
);

我能想出的可能解决方案。

  • 将所有房间详细信息复制到每条消息
    • 允许使用SELECT * FROM messages PER PARTITION LIMIT 1 轻松查询
    • 这将是每条消息的大量重复数据...
  • 查询用户所属的最新消息获取房间ID然后查询房间
    • 这似乎不是 cassandra 的方式?

有没有更好的方法来为我的数据建模?

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:

    通过查看架构,您似乎需要关系数据库。

    在 Cassandra 中,您通常使用 one table per query,这意味着您应该根据查询的结构来设计表。

    您也可以通过partition keyclustering column查询(第二个应该是partition key + clustering column)。 因此,为了通过updater_at 进行查询,您需要将该列设为聚类列。请记住,在 Cassandra 中您无法更改密钥。

    【讨论】:

    • 是的,我可以使用物化视图进行更新。还请阅读帖子的其余部分...如果您还可以详细说明,否则此答案对任何人都没有帮助...
    • 物化视图尚未准备好生产。
    • @jklaw90 嘿,我明白你的意思了,我建议你将updated_at作为聚类列,这样你就可以对其进行排序并按值查询。
    猜你喜欢
    • 2019-11-13
    • 2013-04-27
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多