【发布时间】:2020-12-28 04:55:12
【问题描述】:
我正在尝试构建一个 cassandra 架构来表示聊天。 我似乎无法弄清楚的一件事是如何查询最近更新的房间(类似于大多数聊天应用列表视图)
- 列表视图中所需的字段按
updated_atdesc 排序- *房间号
- 房间名称
- 房间图片
- *用户
- *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 的方式?
有没有更好的方法来为我的数据建模?
【问题讨论】: