首页 > 解决方案 > 按 Cassandra 中的两个时间戳字段过滤

问题描述

我在卡桑德拉有一张桌子

CREATE TABLE measurements
(
    device_id            text,
    first_measurement_time   timestamp,
    last_measurement_time    timestamp

PRIMARY KEY ...
)

如果我的查询如下所示,我应该如何配置主键:

select * from measurements 
where device_id=? 
    and first_measurement > ? 
    and last_measurement < ?

标签: sqlcassandracassandra-3.0

解决方案


即使它们都是主键的一部分,也不能在两个不同的列上存在不等式条件。Cassandra 要求,如果您在聚类列上进行不等式比较,则所有先前的聚类列都必须具有相等条件。

如果您只在分区 ( device_id) 内进行搜索,那么您可以使用 强制执行此查询ALLOW FILTERING,尽管通常不建议这样做,并且可能导致更高的读取延迟。在这种情况下,您可以将两列作为集群列放入主键中。然后进行性能测试,例如使用NoSQLBench


推荐阅读