答案 0 :(得分:1)
所有所说的都是真的。
现在关于您的示例聊天有一些建议
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的现有关键字冲突的任何术语。
答案 1 :(得分:0)
在Cassandra中,应根据要执行的查询来进行表设计。在这种情况下,您将如何请求数据?基于fromuser
或touser
列,两者都是?
Datastax学院的课程DS220可以作为学习Cassandra数据建模的良好起点
答案 2 :(得分:0)
在Cassandra中,您必须处理数据模型部分,并根据Datastax或Cassandra建议优化查询。根据您的应用程序,您还应该在Cassandra配置部分上进行工作,这对于大量的读写操作是有好处的。为了在您的应用上获得良好的性能,您不仅应该考虑数据库部分,还需要考虑操作系统,网络等。