如何在 cassandra db 中使用空集查询所有数据?

How can you query all the data with an empty set in cassandra db?

正如标题所说,我正在尝试查询我获得的所有数据,其中没有存储任何值。我已经搜索了一段时间,我发现唯一允许的操作是 CONTAINS,这不符合我的需要。

考虑以下 table:

CREATE TABLE environment(
  id uuid,
  name varchar,
  message text,
  public Boolean,
  participants set<varchar>,
  PRIMARY KEY (id)
)

如何获得空集的 table 中的所有条目?例如。参与者 = {} 或 null?

不幸的是,你真的做不到。 Cassandra 在设计上让这样的查询变得困难,因为如果不进行完整的 table 扫描(扫描每个节点)就无法完成查询。这就是为什么 Cassandra 数据建模的很大一部分是了解 table 将被查询的所有方式,并构建它以支持这些查询。

您必须处理的另一个问题是(一般而言)Cassandra 不允许按 null 过滤。同样,这是一种设计选择……查询存在的数据比查询不存在的数据要容易得多。虽然,在使用 lightweight transactions 编写时,有一些方法可以解决这个问题(使用 IF 子句)。

如果您提前知道所有 id,您可以编写一些内容来遍历它们,SELECT 并在应用程序端检查是否为 null。虽然这种方法会很慢(但不会对集群造成压力)。可能更好的方法是使用像 Apache Spark 这样的分布式 OLAP 层。它仍然不会很快,但这可能是处理这种情况的最佳方式。