Database 会话消息的Cassandra建模
我还在学习理解卡桑德拉。我读过类似的关于对话信息的问题和答案,但我并不满意,因为它不符合我的需要。这些是我想要解决的问题Database 会话消息的Cassandra建模,database,cassandra,nosql,datastax,cassandra-3.0,Database,Cassandra,Nosql,Datastax,Cassandra 3.0,我还在学习理解卡桑德拉。我读过类似的关于对话信息的问题和答案,但我并不满意,因为它不符合我的需要。这些是我想要解决的问题 用户可以向一个或多个用户发送消息 会话表-在用户之间保存消息 对话表-显示您所访问的所有用户的最近对话消息 已与建立对话,标记为已读或未读日期 会话消息表-用户A可以加载与用户B的所有会话 或用户C 对话消息表-发送的消息将标记为已读或未读 会话消息表-用户A可以删除消息,但用户B可以删除 邮件不会被删除非常重要 我有下列表格 CREATE TABLE user (
- 用户可以向一个或多个用户发送消息
- 会话表-在用户之间保存消息
- 对话表-显示您所访问的所有用户的最近对话消息 已与建立对话,标记为已读或未读日期
- 会话消息表-用户A可以加载与用户B的所有会话 或用户C
- 对话消息表-发送的消息将标记为已读或未读
- 会话消息表-用户A可以删除消息,但用户B可以删除 邮件不会被删除非常重要
我是卡桑德拉的新手,我想知道我的造型是否正确。
如果用户A向用户B发送消息,则哪些对话表属于用户A或用户B
如果用户A与用户B建立了对话,用户C与用户A建立了对话,并且用户A希望加载与用户C的所有对话,则从哪个对话消息表中获取消息?
我将如何查询对话表以列出所有用户、与用户A建立对话的用户以及与用户A建立对话的所有用户,其中包含上次发送或接收的消息
create table users(
id uuid,
username text,
name text,
pass text,
roles text,
thread_ids set<uuid>,
PRIMARY KEY (username),
);
这应该写两次(交换发件人和收件人)为了便于阅读查询,您需要有两种删除(删除发件人和删除收件人),涵盖您的最后一个问题点
create table thread_last_message_by_user (
message_id uuid,
user_id uuid,
thread_id uuid,
owner_id uuid,
reply_of uuid,
edited boolean,
body text,
year int,
month int,
day int,
hour int,
minute int,
updated_at timestamp,
PRIMARY KEY (user_id, thread_id, updated_at, message_id)
) WITH CLUSTERING ORDER BY (thread_id DESC, updated_at DESC);
我用它作为messager的第一页,它只显示最后一条消息
这是我为我正在开发的messager应用程序所得到的,我和你的原因有一些不同,你没有这样的线程,但你可以实现我所做的,以适合你消息的目的是什么?发送/接收?@Danicheta Yesi没有得到你的答案,你为什么不创建一个线程表并用fiel将消息存储在其中D像“删除”、“看到”、参与者a…?这也是我想要实现的。我可以得到一个样本吗
create table thread_users (
thread_id uuid,
from uuid,
to uuid,
PRIMARY KEY (thread_id),
);
create table thread_messages (
id timeuuid,
from uuid,
to uuid,
edited boolean,
deleted boolean,
seen boolean,
body text,
thread_id uuid,
year int,
month int,
day int,
hour int,
minute int,
PRIMARY KEY ((thread_id, year), id)
) WITH CLUSTERING ORDER BY (id DESC);
create table thread_last_message_by_user (
message_id uuid,
user_id uuid,
thread_id uuid,
owner_id uuid,
reply_of uuid,
edited boolean,
body text,
year int,
month int,
day int,
hour int,
minute int,
updated_at timestamp,
PRIMARY KEY (user_id, thread_id, updated_at, message_id)
) WITH CLUSTERING ORDER BY (thread_id DESC, updated_at DESC);