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

时间:2014-08-07 01:30:14

标签: cassandra

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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