3

假设我在 Cassandra 中有一个这样的项目表:

CREATE TABLE items (
id uuid,
tags set<text>,
name text,
available boolean,
PRIMARY KEY (id));

所以我基本上都有带有标签的物品,标签的数量是未知的,最多可以达到几百个,不同的物品可能会共享一些标签。我有两个要求:

  • 我想查询包含特定标签集的项目数,例如我想知道标签列中带有 tag1 或 tag2 或 tag200 的项目数。

  • 我想更新所有包含一组特定标签(在要求 1 中找到)的项目,例如,我想available = true在标签列中为所有带有 tag1 或 tag2 或 tag200 的项目设置。

这些可以使用 Spark 或二级索引来完成,但我不想使用它,并且想探索这些是否可以有效地使用纯 CQL 来完成。所以也许我必须从这样的表开始:

CREATE TABLE itemsByTag (
id uuid,
tag text,
tags set<text>,
name text,
available boolean,
PRIMARY KEY ((tag),id);

但是这个表可以给我相同的项目两次或更多(假设 item1 有 tag1 和 tag2 和 tag200 那么当我通过标签查询上一个表时我会得到 item1 三次)另外,如何为 Cassandra 计数器构建一个合适的表表满足要求 1?

在 RDBMS 中,这是使用此处提到的三个表完成的,问题是如何在 Cassandra 中有效地对其进行非规范化。

4

0 回答 0