我刚接触过Cassandra,并试图看看它是否适合我的数据查询需求。我正在表中填充测试数据,并使用Golang中的cql客户端获取它们。
我在卡桑德拉存储时间序列数据,按时间戳排序。我以每分钟存储数据。
模式如下所示:
父级:字符串
儿童:字符串
字节: int
val2: int
时间戳:日期/时间
在提供时间戳范围并指定子名称的情况下,我需要回答查询。结果需要是那个时间范围内的字节值(单个值,而不是序列),我做了一个主键(子键,时间戳)。我采用了这种方法,而不是列族、比较器类型和timeuuid,因为在cql中不支持这种方法。
由于存储在每个时间戳(每分钟)中的数据是累积值,所以当我获得时间t1到t2的范围查询时,需要在t2处查找字节值,在t1处查找字节值,并在返回之前减去这2个值。如果t1和t2实际上在表中有条目,这是很好的。如果没有,我需要找到有数据的(t1,t2)之间的时间,并返回差异。
我可以想到的一种方法是“从tablename那里选择*时间戳<= t2和时间戳>= t1”,然后在返回的行数组中找到第一个条目和最后一个条目之间的区别。这是最好的方法吗?由于MIN和MAX查询不受支持,是否有一种方法可以在表中找到小于给定值的最大时间戳?耽误您时间,实在对不起。
发布于 2014-08-06 23:34:15
是否将每个条目存储为具有不同分区键(主键中的第一列)的新行?如果是这样的话,从x中选择*,其中fb是一个集群范围的查询,这将给您带来问题。考虑添加一个“假”分区键,或者在每个日期/周/月等使用分区键,这样您的查询就可以访问单个分区。
而且,即使您指定了>和<,在cassandra中的查询也是>=和<=。如果您需要严格地大于或小于,则需要过滤客户端。
https://stackoverflow.com/questions/25172872
复制相似问题