【发布时间】:2023-03-14 03:12:02
【问题描述】:
【问题讨论】:
【问题讨论】:
所说的一切都是真的。
现在关于您的示例聊天,这里有一些建议
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 的聊天,因此这是一个很好的分区键。 2 个用户之间的聊天不应超过 100.000 行,这是建议的分区最大行数。
您希望您的项目按时间排序,最晚在前(仅显示聊天中的最后一条消息)。您希望您的消息是独一无二的。因此timeuuid 是message_id 的好类型,您可以轻松地从中提取时间并确保唯一性。
您要避免使用time 作为列名或与 cql 的现有关键字冲突的任何术语。
【讨论】:
在 Cassandra 中,表设计应该基于您要执行的查询来完成;在这种情况下,您将如何请求数据?基于fromuser 或touser 列?
Datastax Academy 的课程 DS220 可以作为学习 Cassandra 数据建模的良好起点
【讨论】:
在 Cassandra 中,您必须处理数据模型部分并根据 Datastax 或 Cassandra 建议优化您的查询。根据您的应用程序,您还应该处理 Cassandra 配置部分,这对繁重的写入和读取有好处。为了在您的应用上获得良好的性能,您不仅应该考虑数据库部分,还需要考虑操作系统、网络等。
【讨论】: