假设我们有一个聊天室。每个聊天室都有几个参与者。在我的例子中,它是一个客户机和几个操作员(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
列。这有多正确?
暂无答案!
目前还没有任何答案,快来回答吧!