Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 会话消息的Cassandra建模_Database_Cassandra_Nosql_Datastax_Cassandra 3.0 - Fatal编程技术网

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可以删除 邮件不会被删除非常重要
我有下列表格

CREATE TABLE user ( username text PRIMARY KEY, password text ); CREATE TABLE friends ( username text, friend text, since timestamp, PRIMARY KEY (username, friend) ); CREATE TABLE followers ( username text, follower text, since timestamp, PRIMARY KEY (username, follower) ); CREATE TABLE conversation_A ( participantA text, participantB text, conversationid text, message text, read boolean, date timestamp, PRIMARY KEY(participantA, date) ); CREATE TABLE conversation_B ( participantA text, participantB text, conversationid text, message text, read boolean, date timestamp, PRIMARY KEY(participantA, date) ); CREATE TABLE conversation_message_sent ( conversationid text, messageid bigint, sender text, recipient text, message text, read boolean, date timestamp, PRIMARY KEY(conversationid, date) }; CREATE TABLE conversation_message_receive ( conversationid text, messageid bigint, sender text, recipient text, message text, read boolean, date timestamp, PRIMARY KEY(conversationid, date) }; CREATE TABLE messages_sent ( messageid bigint, message text, date timestamp, PRIMARY KEY(messageid, date) ); CREATE TABLE messages_receive ( messageid bigint, message text, date timestamp, PRIMARY KEY(messageid, date) ); 创建表用户( 用户名文本主键, 密码文本 ); 创建桌面好友( 用户名文本, 朋友短信, 由于时间戳, 主键(用户名、好友) ); 创建表跟随者( 用户名文本, 跟随者文本, 由于时间戳, 主键(用户名、跟随者) ); 创建表对话\u A( 参与文本, 参与者B文本, 会话ID文本, 消息文本, 读布尔, 日期时间戳, 主键(参与者、日期) ); 创建表对话( 参与文本, 参与者B文本, 会话ID文本, 消息文本, 读布尔, 日期时间戳, 主键(参与者、日期) ); 创建表对话\u消息\u已发送( 会话ID文本, messageid bigint, 发件人文本, 收件人文本, 消息文本, 读布尔, 日期时间戳, 主键(会话ID,日期) }; 创建表对话\u消息\u接收( 会话ID文本, messageid bigint, 发件人文本, 收件人文本, 消息文本, 读布尔, 日期时间戳, 主键(会话ID,日期) }; 创建已发送的表消息( messageid bigint, 消息文本, 日期时间戳, 主键(messageid、日期) ); 创建表消息\u接收( messageid 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),
);
这应该写两次(交换发件人和收件人)为了便于阅读查询,您需要有两种删除(删除发件人和删除收件人),涵盖您的最后一个问题点

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);