在Cassandra CQL中获取用户消息的最佳方法?

时间:2020-02-10 06:55:37

标签: cassandra cql cqlsh

我正在尝试使用Cassandra数据库创建一个聊天应用程序。所以我想获得发送给用户的消息(私人聊天)。所以我想获得最佳和最佳的方法来进行CQL查询?你的想法是什么?

我的用户消息表结构。 enter image description here

3 个答案:

答案 0 :(得分:1)

所有所说的都是真的。

  • 基于查询的数据模型
  • 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;

理性:

  • 您要基于fromusertouser检索聊天,因此这是一个很好的分区键。 2个用户之间的聊天行数不能超过100.000,这是分区的建议最大行数。

  • 您希望按时间从小到大的顺序排列商品(仅显示聊天中的最后一条消息)。您希望您的消息是唯一的。因此,timeuuidmessage_id的好类型,您可以轻松地从中提取时间并确保其唯一性。

  • 您要避免使用time作为列名或与cql的现有关键字冲突的任何术语。

答案 1 :(得分:0)

在Cassandra中,应根据要执行的查询来进行表设计。在这种情况下,您将如何请求数据?基于fromusertouser列,两者都是?

Datastax学院的课程DS220可以作为学习Cassandra数据建模的良好起点

答案 2 :(得分:0)

在Cassandra中,您必须处理数据模型部分,并根据Datastax或Cassandra建议优化查询。根据您的应用程序,您还应该在Cassandra配置部分上进行工作,这对于大量的读写操作是有好处的。为了在您的应用上获得良好的性能,您不仅应该考虑数据库部分,还需要考虑操作系统,网络等。