我还在学习理解卡桑德拉。我也读过类似的问答,但不满意,因为它不符合我的需要。这些是我想解决的问题
用户可以向一个或多个用户发送消息
会话表-保存用户用户之间的消息
对话表-显示所有用户的最近对话消息
与某个日期建立对话,标记为已读或未读。
A对话消息表-用户A可以加载与用户B的所有对话
或用户C
会话消息表-发送的消息将标记为已读或未读
对话消息表-用户A可以删除消息,但用户B可以
不会删除邮件。非常重要
我有下列表格
创建表用户(
用户名文本主键,
密码文本
)(二)
创建表好友(
用户名文本,
朋友短信,
从时间戳开始,
主键(用户名、朋友)
)(二)
创建表关注者(
用户名文本,
跟随者文本,
从时间戳开始,
主键(用户名,跟随者)
)(二)
创建表对话(
参与者文本,
参与者B文本,
会话ID文本,
消息文本,
读取布尔值,
日期时间戳,
主键(参与者,日期)
)(二)
创建表对话(
参与者文本,
参与者B文本,
会话ID文本,
消息文本,
读取布尔值,
日期时间戳,
主键(参与者,日期)
)(二)
创建已发送的表对话(
会话ID文本,
消息id bigint,
发件人文本,
收件人文本,
消息文本,
读取布尔值,
日期时间戳,
主键(会话ID、日期)
};
创建表对话消息接收(
会话ID文本,
消息id bigint,
发件人文本,
收件人文本,
消息文本,
读取布尔值,
日期时间戳,
主键(会话ID、日期)
};
创建发送的表消息(
消息id bigint,
消息文本,
日期时间戳,
主键(MessageID,日期)
)(二)
创建表消息(
消息id bigint,
消息文本,
日期时间戳,
主键(MessageID,日期)
)(二)
如果用户a id为100,则与用户b建立会话,并且用户b id为101,则会话id为100-101。
请是新的卡桑德拉我想知道我的模特是否正确。
如果用户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),
);
你也可以添加头像url和其他东西
create table thread (
id uuid,
participants set<uuid>,
created_at timestamp,
PRIMARY KEY (id),
);
参与者现在对我来说没用了,但不需要更多的信息,
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);
我用它来显示最后一条消息的第一页
这是我为消息应用程序im工作得到的,我和你有一些不同之处,因为你没有这样的线程,但你可以实现我所做的适合你的事情。
关于database - Cassandra对话消息建模,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48658280/