如何解决搜索值时,是否需要使用分区键中指定的所有列才能获得快速结果?
假设我们有一个聊天室。每个聊天室都有几个参与者。就我而言,它是一个客户端和多个运算符(1个或更多)。此外,每个聊天室都有自己的特定主题。我们在 Cassandra 数据库中知道,表需要基于查询进行设计。
假设我有这样的疑问:
- 获取所有尚无操作员的开放聊天室的列表。
- 获取具有特定操作员的所有打开的聊天列表。
- 获取特定主题上尚无操作员的所有打开的聊天室的列表。
- 获取具有特定操作员的特定主题上所有打开的聊天的列表。
我知道非正规化对于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 举报,一经查实,本站将立刻删除。