【问题标题】:CassandraQL allow filteringCassandraQL 允许过滤
【发布时间】:2022-01-27 12:59:50
【问题描述】:

我正在 cassandra 数据库中创建一个表,但出现允许过滤错误:

CREATE TABLE device_check (
  id   int,
  checked_at  bigint,
  is_power    boolean,
  is_locked   boolean,
  PRIMARY KEY ((device_id), checked_at)
);

当我进行查询时

 SELECT * FROM device_check where checked_at > 1234432543

但它给出了允许过滤错误。我尝试从 device_id 中删除括号,但它给出了同样的错误。即使我尝试仅将 checked_at 设置为主键,它仍然无法与 > 运算符一起使用。使用 = 运算符就可以了。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    Cassandra 中的PRIMARY KEY 包含两种类型的键

    1. 分区键
    2. 集群键

    表示为'PRIMARY KEY((Partition Key), Clustering keys)`

    Cassandra 是一个分布式数据库,其中数据可以存在于任何节点上,具体取决于分区键。因此,为了快速搜索数据,Cassandra 要求用户发送一个分区键来识别数据所在的节点并查询该节点。因此,如果您没有在查询中提供parition key,那么 Cassandra 会抱怨您的查询方式不正确。如果你不给它partition key,Cassandra 必须搜索所有节点。因此,如果您想在没有分区键的情况下进行查询,Cassandra 会给出错误ALLOW FILTERING

    关于partition key 不支持>,答案与在查询中进行范围搜索时相同,然后 Cassandra 必须扫描所有节点以进行响应,这不是使用 Cassandra 的正确方法。

    【讨论】:

    • 那么你的意思是不能用 > 操作符搜索值?
    • 是 >, >=, 1234432543 WITH ALLOW FILTERING with this PRIMARY KEY ((device_id), checked_at)。但是“允许过滤”会产生严重的性能后果。
    猜你喜欢
    • 2017-07-23
    • 2014-07-05
    • 2019-01-13
    • 2023-03-10
    • 2015-05-07
    • 2014-07-24
    • 2011-09-20
    • 2020-10-12
    • 2021-09-10
    相关资源
    最近更新 更多