在cassandra cql中获取用户消息的最佳方法?

xa9qqrwz  于 2021-06-10  发布在  Cassandra
关注(0)|答案(3)|浏览(351)

我正在尝试用cassandra数据库创建一个聊天应用程序。所以我想得到消息,发送给用户之间(私人聊天)。所以我想得到做cql查询的最佳方法?你的主意是什么?
我的用户消息表结构。

wecizke3

wecizke31#

所说的一切都是真的。
基于查询的数据模型
academy.datastax.com上的ds2020是一个完整的课程,解释如何做。
关于你的示例聊天,这里有一些建议

DROP TABLE IF EXISTS sample_chat;

CREATE TABLE IF NOT EXISTS sample_chat (
  fromuser    text,
  touser      text,
  message_id  timeuuid,
  body        text,
  PRIMARY KEY ((fromuser, touser), message_id)
) WITH CLUSTERING ORDER BY (msg_time DESC);

INSERT INTO sample_chat(fromuser, touser, message_id, body) VALUES('Cedrick', 'Hasan', now(), 'Hi Hasan do you like Cassandra');
INSERT INTO sample_chat(fromuser, touser, message_id, body) VALUES('Hasan', 'Cedrick', now(), 'Yeah Cassandra rocks');
INSERT INTO sample_chat(fromuser, touser, message_id, body) VALUES('Cedrick', 'Hasan', now(), 'Take ds220 and give us some feedback');

select fromuser, touser, body from sample_chat;

理性:
您想检索基于 fromuser 以及 touser 因此,这是一个很好的分区密钥。两个用户之间的聊天不应超过100.000行,这是建议的分区最大行数。
您希望您的项目按时间排序,且最新时间排在第一位(仅显示聊天中的最后一条消息)。您希望您的消息是唯一的。像这样的 timeuuid 是一个很好的类型 message_id 你可以很容易地从中提取时间,它确保了唯一性。
你想避免使用 time 作为列名或与cql的现有关键字冲突的任何术语。

z4bn682m

z4bn682m2#

在cassandra中,表的设计应该基于要执行的查询来完成;在这种情况下,您将如何请求数据?基于 fromuser 或者 touser 列,两者?
datastax学院的ds220课程是学习cassandra数据建模的一个很好的起点

uqdfh47h

uqdfh47h3#

在cassandra中,您必须处理数据模型部分,并根据datastax或cassandra建议优化查询。根据你的应用程序,你也应该在Cassandra配置的一部分工作,这将有利于重型写入和读取。要在应用程序上获得良好的性能,不仅要考虑数据库部分,还要考虑操作系统、网络等。

相关问题