使用redis zset做流式数据预聚合统计

IoT场景流计算

在IoT场景有时我们想看某个设备的每小时/每天的工时信息. 电压的平均值.油耗的总值 平均值 等这时我们可以用一些流计算框架来做例如flink sparkstream 等. 但是如果用flink来做的话 每台设备一个时间窗口 如果设备量很多十万 二十万的话窗口会很多.会存在窗口风暴的问题.

Redis 流计算

如果说我们只想看某设备每天的工时信息.不妨也可以使用redis 的 zset数据结构来存储. 我们把一个设备做成redis的一个key 每个消息产生一条预聚合信息. zset的排序字段为当时时间戳(小时级别)这样我们如果想看当天的实时总工时只需要获取当天的预聚合信息加起来即可. 当然我们也可以看历史某天到某个小时聚合的信息.根据排序字段统计下. 但是建议redis不要保存太多的数据 比如每个设备只保留一周的数据.然后把这些数据持久化到数据库中.提供更多维度的计算.例如天级别.周级别.月级别的统计信息都是ok的

流批统一

当然这样设计也是支持对批处理也是支持的.只是把历史的数据回放一遍当天的信息也就有了

你可能感兴趣的:(笔记)