如何在cassandra数据库中查询空集的所有数据



正如标题所说,我试图查询所有没有存储值的数据。我已经搜索了一段时间,但我找到的唯一允许的操作是CONTAINS,这不符合我的需求。

考虑下表:

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

如何获取表中所有有空集的条目?例如,参与者={}或为null?

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

您必须处理的另一个问题是(一般来说(Cassandra不允许通过nulls进行过滤。同样,这是一个设计选择。。。查询存在的数据要比查询不存在的数据容易得多。尽管如此,在使用轻量级事务进行编写时,有一些方法可以绕过这一点(使用IF子句(。

如果你提前知道所有的id,你可以写一些东西来迭代它们,SELECT,并在应用程序端检查null。尽管这种方法会很慢(但不会给集群带来压力(。也许更好的方法是使用像ApacheSpark这样的分布式OLAP层。这仍然不会很快,但这可能是处理这种情况的最佳方式。

最新更新