【问题标题】:Cassandra data aggregation and rollupCassandra 数据聚合和汇总
【发布时间】:2019-03-25 16:51:07
【问题描述】:

在 Cassandra 集群中聚合和存储数据的最佳方式是什么?我的意思是,有一个包含小时数据的表,在一天汇总并保存在另一个表中。这可以通过为每个键/句点选择和插入来简单地实现,但是有更好或不同的方法吗?物化视图呢?

【问题讨论】:

  • 您的新版本是否足以使用用户定义的聚合 (UDA/UDF)?你的数据模型是什么
  • 一个简化的版本是 CREATE TABLE POINTS ( id bigint, objid bigint, ts timestamp, avg double, last double, max double, min double, PRIMARY KEY ((id), objid, ts) ) WITH compaction = {'compaction_window_size': '7', 'compaction_window_unit': 'DAYS', 'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy'} and gc_grace_seconds=86400;

标签: cassandra cql3


【解决方案1】:

物化视图

在 cassandra 中物化视图的使用非常有限:

  • 源表中的所有主键都必须出现在视图中,可能以不同的顺序出现。

  • 不能使用 avg 之类的聚合函数

  • GROUP BY 不允许

所以我认为它不适合您的基于时间的汇总,也不适合任何其他聚合。

顺便说一下,物化视图已经被追溯分类了 作为实验性用途,不推荐用于新的生产用途。

手动解决

一旦要聚合的数据永远冻结,这非常棒……否则,一致性将难以处理。

索引

一种完全不同的汇总方法是使用Elassandra 来索引临时列。我们将创建一个弹性搜索二级索引并自动保持同步。然后使用embed elasticsearch API在不同的时间尺度上进行查询,使用date histogram aggregation

这样聚合的结果不会被存储,而是从一个高效的二级数据结构中实时计算出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2016-06-18
    • 2019-11-04
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多