【问题标题】:How can you query all the data with an empty set in cassandra db?如何在 cassandra db 中使用空集查询所有数据?
【发布时间】:2022-01-26 13:43:51
【问题描述】:

正如标题所说,我正在尝试查询我得到的所有数据,其中没有存储任何值。找了一阵子,发现唯一允许的操作是CONTAINS,不符合我的需求。

考虑下表:

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

如何获取空集的表中的所有条目?例如。参与者 = {} 还是 null?

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

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

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

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

    【讨论】:

    • 也许由应用程序维护的列participants_count INT 可能是一种便宜的解决方法?
    猜你喜欢
    • 2013-05-15
    • 2012-10-08
    • 2015-01-20
    • 2021-01-31
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多