0

假设我们有一个聊天室。每个聊天室都有几个参与者。就我而言,它是一个客户和几个运营商(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列。这有多正确?

4

0 回答 0