【问题标题】:Using Cassandra CQL, how can I fetch a range of data including last point before and first point after使用 Cassandra CQL,我如何获取一系列数据,包括之前的最后一点和之后的第一点
【发布时间】:2017-05-07 13:24:36
【问题描述】:

我有一些时间序列数据以名称、时间戳、值的形式存储在 Cassandra 中。

我想获取数据以显示在时间序列图表上,因此我从 Cassandra 获取时间范围。但是为了正确渲染图表,我实际上需要范围之前的最后一个点和之后的第一个点,以便图表线继续离开图表的边缘。

我目前的计划是有两个具有相同列的表,如上所述,但一个按时间升序排列,另一个按时间降序排列。

然后我可能需要进行 3 次查询。

  • 从 asc 表中获取范围内的所有点
  • 从 asc 表中获取时间大于结束时间限制 1 的点。这给了我超出结束时间的点。
  • 从 desc 表中获取时间小于开始时间限制 1 的点。这给了我开始前的点。

这是最好的方法吗?任何 Cassandra 专家有任何想法吗?

谢谢! 克里斯

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    我认为一张桌子就足够了。检查下面的实验。

    ts - 时间序列表; t——时间价值;并且您想找到 t=3 的左/右边缘

    cqlsh:ks> create table ts(pk int, t int, v int, primary key(pk, t, v));
    cqlsh:ks> insert into ts (pk, t, v) values (1, 1, 1);
    cqlsh:ks> insert into ts (pk, t, v) values (1, 2, 2);
    cqlsh:ks> insert into ts (pk, t, v) values (1, 3, 3);
    cqlsh:ks> insert into ts (pk, t, v) values (1, 4, 4);
    cqlsh:ks> insert into ts (pk, t, v) values (1, 5, 5);
    
    cqlsh:ks> select * from ts where pk=1 and t<3 order by t desc limit 1;
    
     pk | t | v
    ----+---+---
      1 | 2 | 2
    
    (1 rows)
    cqlsh:ks> select * from ts where pk=1 and t>3 order by t asc limit 1;
    
     pk | t | v
    ----+---+---
      1 | 4 | 4
    
    (1 rows)
    

    【讨论】:

    • 谢谢米哈伊尔!看起来很棒。为了获得快速性能,我假设我应该始终在查询中的排序方向与集群键的排序方向相同。我将测试看看是否是这种情况。谢谢
    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多