首页 文章

在cassandra中获取时间序列/范围数据

提问于
浏览 629
1

我是Cassandra的新手并试图查看它是否符合我的数据查询需求 . 我在表中填充测试数据并使用Golang中的cql客户端获取它们 .

我在Cassandra中存储时间序列数据,按时间戳排序 . 我每分钟存储数据 .

架构是这样的:
parent:string
孩子:字符串
bytes:int
val2:int
时间戳:日期/时间

我需要回答提供时间戳范围并给出子名称的查询 . 结果需要是该时间范围内的字节值(单值,而不是系列)我创建了一个主键(子,时间戳) . 我遵循这种方法而不是具有timeuuid的列族,比较器类型,因为在cql中不支持 .

由于存储在每个时间戳(每分钟)中的数据是累加值,当我得到时间t1到t2的范围查询时,我需要找到t2处的字节值,t1处的字节值,并在返回之前减去2个值 . 如果t1和t2实际上在表中有条目,这可以正常工作 . 如果他们不这样做,我需要在(t1,t2)之间找到有数据并返回差异的时间 .

我能想到的一种方法是“select * from tablename WHERE timestamp <= t2 AND timestamp> = t1;”然后找到返回的此行数组中第一个和最后一个条目之间的差异 . 这是最好的方法吗?由于不支持MIN和MAX查询,是否有办法在表中找到小于给定值的最大时间戳?谢谢你的时间 .

1 回答

  • 0

    您是将每个条目存储为具有不同分区键的新行(主键中的第一列)?如果是这样,请从x中选择*,其中f <a和f> b是群集范围的查询,这将导致问题 . 考虑添加“假”分区键,或者每个日期/周/月等使用分区键,以便查询命中单个分区 .

    此外,即使您指定了>和<,您在cassandra中的查询也是> =和<= . 如果您需要严格大于或小于,则需要过滤客户端 .

相关问题