
比如数千个温度传感器,每 5s 采集一次数据,后期数据使用只会使用每 30 分钟内最大值,由于大数据及实时数据处理经验较少,目前考虑是数据存储到 kafka 中,然后消费端使用 Redis 存储当前 30 分内最大值,并持续对比更新最大值,且每过一个 30 分钟循环则刷新一次 redis 值到时序数据库,求教
1 masterclock Dec 26, 2021 Influxdb 存储每 5 秒的数据,然后搞个 continuous 的 notebook 就差不多了。 其他的 TSDB ,如 TimescaleDB (continuous aggregation)也都有类似的机制。 |
2 git00ll Dec 26, 2021 30 分钟是指现实世界中的每 30 分钟作为一个区间吗? 感觉建张表存就可以了,内存里持有当前区间最大值,处理数据时比内存中值大就更新到数据库,否则就跳过。 如果是滚动 30 分钟,可以使用找个时序数据库用一下。 |
3 ipwx Dec 26, 2021 为啥我觉得你用 c++ 写个程序用内存 map 就能扛下来。。。 |
4 wangyu17455 Dec 26, 2021 via Android mysql 存储时间和温度,查的时候走时间索引,查最近半小时所有数据然后 max 函数取最大值 |
5 T0m008 Dec 26, 2021 每 5 秒几千个数值不算啥大数据,随便什么数据库都能轻松搞定 |
6 lauix Dec 27, 2021 TSDB 了解下,当然没多少数据 redis 完全可以胜任 |
7 slowman Dec 27, 2021 现在方案就挺好的,不用改 |
8 vance123 Dec 27, 2021 via Android 笑死,几千个数据存 JSON 里都可以 |
9 lyz1990 Dec 27, 2021 via Android 放内存得了 |
10 learningman Dec 27, 2021 才这点,map 套 priority_queue 就好了 |
11 Rocketer Dec 27, 2021 via iPhone 看得不是很明白,你是总共每 30 分钟产生一条数据,还是每台设备每 30 分钟都要产生一条数据? 5 秒钟的那个算临时数据,不该进数据库,直接内存里处理就行。 |
12 f165af34d4830eeb Dec 27, 2021 既然用了 kafka ,可以看看 ksqldb ?感觉 ksqldb 给的样例场景和你的需求挺接近的 |
13 geniussoft Dec 27, 2021 怎么感觉内存里随便放一下,然后 JSON 或者 XML 序列化都行呢... |
14 pengtdyd Dec 27, 2021 这点数据光盘就能搞定了 |
15 xukongyang Dec 27, 2021 可以学习一下 tdengine ,轻量、简单、易用. |
16 ebingtel Dec 27, 2021 flink 等类似的滑动窗口都可以……如果场景简单,你目前的方案就不错了 |
19 tuine OP @xukongyang #15 目前就是打算用这个,而且是国产 TSDB |
23 yolee599 Dec 27, 2021 在设备端统计好 30 分钟最大值再上传服务器,如果要调整间隔可以设计一条设备配置指令来配置 |
24 glfpes Dec 27, 2021 via iPhone Redis zset |
25 zrt Dec 27, 2021 看起来 c++写个单调队列就可以解决 |
26 SmiteChow Dec 27, 2021 就这点数据不用思考任何算法 |
27 Jf35jxN3fwBXyeLh Dec 27, 2021 数千个设备数据直接放内存,我估计你的数据 1gb 都用不完,每 30 分钟 load 到 db 中就行,注意内存读写锁 |
28 frozenshadow Dec 27, 2021 想玩一下的话,可以看看 flink 。可以按照 30min 时间窗计算 |
29 cnuser002 Dec 27, 2021 你的设备上报是 5 秒一个,但是你实际是每个 30 分钟存一个值到数据库。 那你的主要工作,其实就是写一个比较程序,将每台设备每次上报的数据,跟 30 分钟段内最高的温度,做一个比就行了。 到点把最高值往数据库里写就完事了。 那我感觉,你也没必要搞 Redis ,用你熟悉的语言把这个变换的流程,写一下就 Ok 了。 |
30 tuine OP @frozenshadow #28 准备学习一下 玩个试试 |
32 jellyspot Dec 28, 2021 你这个我理解就是个监控需求么,Prometheus 能实现采集监控,然后也可以用 promql 查询出 30 分钟最大的值,然后把这个值写到数据库之类的就行了 |