搜索值时,是否需要使用分区键中指定的所有列才能获得快速结果?

问题描述

假设我们有一个聊天室。每个聊天室都有几个参与者。就我而言,它是一个客户端和多个运算符(1个或更多)。此外,每个聊天室都有自己的特定主题。我们在 Cassandra 数据库中知道,表需要基于查询进行设计。

假设我有这样的疑问:

  1. 获取所有尚无操作员的开放聊天室的列表。
  2. 获取具有特定操作员的所有打开的聊天列表。
  3. 获取特定主题上尚无操作员的所有打开的聊天室的列表。
  4. 获取具有特定操作员的特定主题上所有打开的聊天的列表。

我知道非正规化对于Cassandra是正常的。但是,仍然需要为所有这些查询创建单独的表吗?我还想知道如何检查SELECT查询列表中是否包含值?如您所见,在我的案例中,operators列具有list数据类型。

在这个特定时刻,对于前两个查询,我创建了下表:

CREATE TABLE IF NOT EXISTS "chat_rooms" (
    room_id uuid,created_at timestamp,updated_at timestamp,client varchar,operators frozen list<varchar>,last_message text,unread_message_number int,is_open boolean,theme varchar,PRIMARY KEY (
        (is_open,operators),updated_at
    )
) WITH CLUSTERING ORDER BY (updated_at desc);

对于第三和第四次查询,我只是更改了分区键并添加theme列。这有多正确?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)