【问题标题】:Fetch the specific number of time series data from Cassandra从 Cassandra 中获取特定数量的时间序列数据
【发布时间】:2018-09-21 02:52:57
【问题描述】:

显然,在处理与某些自然分区键(如传感器 ID)相关的时间序列数据时,它可以用作主键。但是,如果我们对全局视图感兴趣并且没有自然的分区键候选者,该怎么办?如果我们这样建模模式:

CREATE TABLE my_data(
 year smallint,
 day smallint,
 date timestamp,
 value text
 PRIMARY KEY ((year, day), timestamp)
) WITH CLUSTERING ORDER BY (date DESC);

它(可能)在大多数情况下都可以正常工作,但鉴于我们知道要获取的年份和日期。

如果我们不关心今天是哪一天,但我们希望看到前 50 个最新项目怎么办?如果我们想看到接下来的 50 个项目怎么办?有没有办法在 Cassandra 中做到这一点?这样做的推荐方法是什么?

【问题讨论】:

    标签: cassandra time-series


    【解决方案1】:

    保留年/日的第二张表格。阅读的时候可以先从中抓取。添加到 my_data 时也要更新,但保留插入的天数缓存,这样每个应用程序每天只会尝试插入一次。即例如添加额外的键,因此每个时间序列可以有多个流,而不仅仅是一个表:

    CREATE TABLE my_data (
      key blob,
      year smallint,
      day smallint,
      date timestamp,
      value text
      PRIMARY KEY ((key, year, day), timestamp)
    ) WITH CLUSTERING ORDER BY (date DESC);
    
    CREATE TABLE my_data_keys (
       key blob,
       year smallint,
       day smallint,
       PRIMARY KEY ((key), year, day)
    )
    

    对于插入:

    INSERT INTO my_data_keys (key, year, day) VALUES (0x01, 1, 2)
    INSERT INTO my_data ...
    

    然后在内存中设置一个您存储该密钥/年份/数据的位置,这样您就不需要每次都插入它。阅读最新:

    SELECT year, day FROM my_data_keys WHERE key = 0x01; 
    

    驱动程序返回迭代器,对于其中的每个元素,对 my_data 进行查询,直到达到 50 条记录。

    如果插入足够频繁,则可以从“今天”开始向后工作,发出查询直到获得 50 个事件。如果数据稀疏,那么可能会浪费大量读取数据,而另一个表会更好。

    【讨论】:

    • 您能否提供描述这个想法的架构和查询?我很难理解第二张表会有什么帮助。
    • 这是否意味着如果有 - 比如说 - 每几天只有一个条目,我需要顺序查询 Cassandra 50 次?我是否应该保留条目数并在我(异步)插入日期表时自动增加条目数?
    • 是的。但是,如果您的数据如此稀疏,请不要使用天进行存储,而是使用月份
    猜你喜欢
    • 2015-02-14
    • 2015-01-10
    • 2011-01-13
    • 2012-11-16
    • 2020-01-31
    • 2011-07-22
    • 2014-03-23
    • 2018-02-02
    • 2016-08-29
    相关资源
    最近更新 更多