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;
3条答案
按热度按时间wecizke31#
所说的一切都是真的。
基于查询的数据模型
academy.datastax.com上的ds2020是一个完整的课程,解释如何做。
关于你的示例聊天,这里有一些建议
理性:
您想检索基于
fromuser
以及touser
因此,这是一个很好的分区密钥。两个用户之间的聊天不应超过100.000行,这是建议的分区最大行数。您希望您的项目按时间排序,且最新时间排在第一位(仅显示聊天中的最后一条消息)。您希望您的消息是唯一的。像这样的
timeuuid
是一个很好的类型message_id
你可以很容易地从中提取时间,它确保了唯一性。你想避免使用
time
作为列名或与cql的现有关键字冲突的任何术语。z4bn682m2#
在cassandra中,表的设计应该基于要执行的查询来完成;在这种情况下,您将如何请求数据?基于
fromuser
或者touser
列,两者?datastax学院的ds220课程是学习cassandra数据建模的一个很好的起点
uqdfh47h3#
在cassandra中,您必须处理数据模型部分,并根据datastax或cassandra建议优化查询。根据你的应用程序,你也应该在Cassandra配置的一部分工作,这将有利于重型写入和读取。要在应用程序上获得良好的性能,不仅要考虑数据库部分,还要考虑操作系统、网络等。