Cassandra订单更新时间



我正在尝试构建一个cassandra模式来表示聊天。我似乎不明白的一件事是如何查询最近更新的房间(类似于大多数聊天应用程序列表视图(

  • 列表视图中所需字段按updated_atdesc排序
    • *房间id
    • 房间标题
    • 房间图像
    • *用户
    • *更新日期
    • *消息输入
    • *消息类型
    • *元数据

当前表格

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中,通常使用one table per query,这意味着您应该根据查询的结构来设计表。

也可以按partition keyclustering column查询(第二个应该是partition key + clustering column(。因此,为了通过updater_at进行查询,您需要将该列作为集群列。请记住,在卡桑德拉中,您不能更改密钥。

最新更新