数千个设备的实时数据,每 30 分钟内存储最大值即可,如何设计方案?

2021-12-26 22:20:38 +08:00
 tuine

比如数千个温度传感器,每 5s 采集一次数据,后期数据使用只会使用每 30 分钟内最大值,由于大数据及实时数据处理经验较少,目前考虑是数据存储到 kafka 中,然后消费端使用 Redis 存储当前 30 分内最大值,并持续对比更新最大值,且每过一个 30 分钟循环则刷新一次 redis 值到时序数据库,求教

3024 次点击
所在节点    程序员
32 条回复
tuine
2021-12-27 09:54:57 +08:00
@Rocketer #11 每台设备每 5s 都产生一条,算作临时数据,这样 30 分钟存一次数据量就下来了
tuine
2021-12-27 09:55:51 +08:00
@vance123 #8 😂要是几千个我就不问了。。。可能没描述太清楚,Append 重新说明了一下~
yolee599
2021-12-27 10:04:22 +08:00
在设备端统计好 30 分钟最大值再上传服务器,如果要调整间隔可以设计一条设备配置指令来配置
glfpes
2021-12-27 12:40:44 +08:00
Redis zset
zrt
2021-12-27 13:29:11 +08:00
看起来 c++写个单调队列就可以解决
SmiteChow
2021-12-27 14:37:11 +08:00
就这点数据不用思考任何算法
YouKnowIt
2021-12-27 16:36:40 +08:00
数千个设备数据直接放内存,我估计你的数据 1gb 都用不完,每 30 分钟 load 到 db 中就行,注意内存读写锁
frozenshadow
2021-12-27 16:50:23 +08:00
想玩一下的话,可以看看 flink 。可以按照 30min 时间窗计算
cnuser002
2021-12-27 17:01:20 +08:00
你的设备上报是 5 秒一个,但是你实际是每个 30 分钟存一个值到数据库。

那你的主要工作,其实就是写一个比较程序,将每台设备每次上报的数据,跟 30 分钟段内最高的温度,做一个比较就行了。

到点把最高值往数据库里写就完事了。

那我感觉,你也没必要搞 Redis ,用你熟悉的语言把这个变换的流程,写一下就 Ok 了。
tuine
2021-12-27 17:08:43 +08:00
@frozenshadow #28 准备学习一下 玩个试试
tuine
2021-12-27 17:09:00 +08:00
@cnuser002 #29 是这个道理
jellyspot
2021-12-28 23:55:25 +08:00
你这个我理解就是个监控需求么,Prometheus 能实现采集监控,然后也可以用 promql 查询出 30 分钟最大的值,然后把这个值写到数据库之类的就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/824554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX