You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cassandra 3.11:如何获取每个Guid的最新Signal值?

获取每个Guid的最新Signal值(Cassandra 3.11)

针对你的表结构(主键为(guid, measurement_time),且按measurement_time降序聚类),有两种可靠的实现方式:

方法一:直接使用PER PARTITION LIMIT查询

Cassandra 3.11支持PER PARTITION LIMIT语法,它可以对每个分区(这里每个guid对应一个分区)返回指定行数的记录。由于你的表已经按measurement_time降序排列,每个分区的第一条记录就是该guid的最新数据,因此可以直接执行:

SELECT guid, signal FROM sensor_data_v3 PER PARTITION LIMIT 1;

说明:

  • 该语句会扫描所有guid分区,但每个分区仅读取第一条(最新)记录,避免了全表扫描所有行的开销。
  • 适合偶尔查询的场景,不需要额外的存储开销。

方法二:创建物化视图(适合频繁查询)

如果需要频繁获取每个guid的最新值,建议创建物化视图预存储最新数据,大幅提升查询性能:

CREATE MATERIALIZED VIEW sensor_data_latest_v3 AS
SELECT guid, measurement_time, signal
FROM sensor_data_v3
WHERE guid IS NOT NULL AND measurement_time IS NOT NULL
PRIMARY KEY (guid)
WITH CLUSTERING ORDER BY (measurement_time DESC);

创建完成后,直接查询物化视图即可得到所有guid的最新signal值:

SELECT guid, signal FROM sensor_data_latest_v3;

说明:

  • 物化视图会自动同步基表的更新,每次基表新增guid的记录时,物化视图会保留该guid对应最新(最大measurement_time)的记录。
  • 查询物化视图的性能远高于直接扫描基表,因为数据已预聚合,适合高频率查询的场景。
  • Cassandra 3.11的物化视图默认异步更新,大部分场景下该机制足够满足需求;若需强一致性,可调整materialized_view_refresh_in_background等参数。

额外说明

  • 原表的主键设计恰好适配这个需求:按guid分区保证同个设备的所有数据在同一分区,measurement_time降序聚类让最新数据始终处于分区头部。
  • 你的场景中guid数量仅数千个,两种方法都能高效运行;若后续guid量级大幅增长,物化视图的性能优势会更显著。

内容的提问来源于stack exchange,提问作者Vitaly Chura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:05:26