【问题标题】:Best way to get user messages in cassandra cql?在 cassandra cql 中获取用户消息的最佳方式?
【发布时间】:2023-03-14 03:12:02
【问题描述】:

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

我的用户消息表结构。

【问题讨论】:

    标签: cassandra cql cqlsh


    【解决方案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 的现有关键字冲突的任何术语。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-23
          • 2012-08-08
          • 2016-11-22
          • 2018-10-24
          相关资源
          最近更新 更多