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

5n0oy7gb  于 2021-06-09  发布在  Cassandra
关注(0)|答案(0)|浏览(188)

假设我们有一个聊天室。每个聊天室都有几个参与者。在我的例子中,它是一个客户机和几个操作员(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 列。这有多正确?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题