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

在cassandra cql中获取用户消息的最佳方法?,cassandra,cql,cqlsh,Cassandra,Cql,Cqlsh,我正在尝试使用Cassandra数据库创建聊天应用程序。所以我想获得在用户之间发送的消息(私人聊天)。所以我想得到做CQL查询的最佳方法?你的想法是什么 我的用户消息表结构。 在Cassandra中,表的设计应该基于要执行的查询来完成;在这种情况下,您将如何请求数据?基于fromuser或touser列,两者都可以吗 Datastax Academy的课程可以作为学习Cassandra数据建模的良好起点。在Cassandra,您必须学习数据模型部分,并根据Datastax或Cassandra的建

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

我的用户消息表结构。

在Cassandra中,表的设计应该基于要执行的查询来完成;在这种情况下,您将如何请求数据?基于
fromuser
touser
列,两者都可以吗


Datastax Academy的课程可以作为学习Cassandra数据建模的良好起点。在Cassandra,您必须学习数据模型部分,并根据Datastax或Cassandra的建议优化查询。根据你的应用程序,你也应该在卡桑德拉配置部分工作,这将有利于繁重的写和读。要在应用程序上获得良好的性能,不仅要考虑数据库部分,还要考虑操作系统、网络等。

< P>以上所说的一切都是正确的。p>
  • 基于查询的数据模型
  • 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\u id
    来说是一种很好的类型,您可以轻松地从中提取时间,并确保统一性

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