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

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

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

3237 次点击
所在节点    程序员
32 条回复
masterclock
2021-12-26 22:37:29 +08:00
Influxdb 存储每 5 秒的数据,然后搞个 continuous 的 notebook 就差不多了。
其他的 TSDB ,如 TimescaleDB (continuous aggregation)也都有类似的机制。
git00ll
2021-12-26 22:57:08 +08:00
30 分钟是指现实世界中的每 30 分钟作为一个区间吗?
感觉建张表存就可以了,内存里持有当前区间最大值,处理数据时比内存中值大就更新到数据库,否则就跳过。

如果是滚动 30 分钟,可以使用找个时序数据库用一下。
ipwx
2021-12-26 22:58:51 +08:00
为啥我觉得你用 c++ 写个程序用内存 map 就能扛下来。。。
wangyu17455
2021-12-26 23:32:33 +08:00
mysql 存储时间和温度,查的时候走时间索引,查最近半小时所有数据然后 max 函数取最大值
T0m008
2021-12-26 23:46:01 +08:00
每 5 秒几千个数值不算啥大数据,随便什么数据库都能轻松搞定
lauix
2021-12-27 00:11:59 +08:00
TSDB 了解下,当然没多少数据 redis 完全可以胜任
1423
2021-12-27 00:22:53 +08:00
现在方案就挺好的,不用改
vance123
2021-12-27 00:39:16 +08:00
笑死,几千个数据存 JSON 里都可以
lyz1990
2021-12-27 00:44:59 +08:00
放内存得了
learningman
2021-12-27 00:46:58 +08:00
才这点,map 套 priority_queue 就好了
Rocketer
2021-12-27 00:55:52 +08:00
看得不是很明白,你是总共每 30 分钟产生一条数据,还是每台设备每 30 分钟都要产生一条数据?

5 秒钟的那个算临时数据,不该进数据库,直接内存里处理就行。
f165af34d4830eeb
2021-12-27 01:04:27 +08:00
既然用了 kafka ,可以看看 ksqldb ?感觉 ksqldb 给的样例场景和你的需求挺接近的
geniussoft
2021-12-27 01:33:00 +08:00
怎么感觉内存里随便放一下,然后 JSON 或者 XML 序列化都行呢...
pengtdyd
2021-12-27 08:59:14 +08:00
这点数据光盘就能搞定了
xukongyang
2021-12-27 09:00:15 +08:00
可以学习一下 tdengine ,轻量、简单、易用.
ebingtel
2021-12-27 09:34:47 +08:00
flink 等类似的滑动窗口都可以……如果场景简单,你目前的方案就不错了
tuine
2021-12-27 09:50:16 +08:00
@git00ll #2 对,不是滑动。现在想的就是这种方案,数据量也没那么大
tuine
2021-12-27 09:51:17 +08:00
@T0m008 #5 那一天也 8 千多万数据,要是直接存储到 mysql 这种也不太好吧
tuine
2021-12-27 09:52:24 +08:00
@xukongyang #15 目前就是打算用这个,而且是国产 TSDB
tuine
2021-12-27 09:53:13 +08:00
@1423 #7 好的,3Q ,先按这个方案落地,后续再优化吧

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

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

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

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

© 2021 V2EX