技术求助帖,关于 redis 大 value 存储的问题

2020-11-30 16:41:50 +08:00
 hehe12980

这是我在 V2EX 的第一个帖子

最近遇到一个业务场景,外部接口每隔 5 秒种会给我一批温度参数, 分别为每个机器上的不同温度,需要在前台动态曲线图实时显示,前台 每次 只能 看某 1 天和某一个机器的 温度参数, 历史数据曲线图 可以查询

技术上我做了分表,每一天的数据建一张表,大概 100 台左右的机器数量,每一天的数据 172 万, 单台机器的温度数据每天大概为 1.7 万

前置条件: 任何一台机器温度数据一旦生成是不会变的,我的思路能不能放缓存中,这样就不用去 100 多万条数据,拿机器编号去匹配了

但是我尝试把 1.7 万条数据 放入 redis 中,这个时候 redis 直接报了个命令超时,应该是 value 过大,导致性能下降,IO 瓶颈太大

所以 这种场景的需求究竟要怎么处理呢? 感觉 我这个需求和股票的实时曲线很像 好难啊 呜呜呜

5564 次点击
所在节点    程序员
73 条回复
akira
2020-12-01 01:02:48 +08:00
influxdb + prometheus
no1xsyzy
2020-12-01 01:49:08 +08:00
你这是把 redis 当 kv store 了?
no1xsyzy
2020-12-01 01:51:57 +08:00
我跟你说,你只是作一个复杂 query 的缓存的话,取巧的,直接拿文件做
noparking188
2020-12-01 07:05:13 +08:00
我咋感觉分表分得更难做了,也许应该换个分表方式
noqwerty
2020-12-01 08:31:25 +08:00
这两天刚好在玩类似的东西,influxdb+grafana 完美契合
Yuansir
2020-12-01 08:36:06 +08:00
这应该是时序数据干的活
jhhhh
2020-12-01 09:08:35 +08:00
redis 不合适,mysql 不想用。
那可以尝试下文件方式。按你后续要搜索的条件去存储响应格式内容的文件。
xuanbg
2020-12-01 09:24:20 +08:00
这个需求不适合用 redis,内存会炸。influxdb 还是比较合适的。

问题是你画曲线直接用 5 秒的原始数据?这 x 轴 17280 个坐标点?什么显示器能把 1 天的数据给显示全了,18K 么???
hehe12980
2020-12-01 09:42:58 +08:00
@xuanbg 那个可以曲线图可以伸缩的
hehe12980
2020-12-01 09:45:47 +08:00
@xuanbg 像股票的曲线图是秒级的 一天差不多也 1 万多个点 它们的曲线图 不就显示全了,只要曲线很平滑就能显示的很舒服
fengpan567
2020-12-01 09:58:23 +08:00
K 线图都没你这数据量大,时间周期短的也是 1 分钟
Mithril
2020-12-01 10:01:32 +08:00
直接上时序数据库。懒得折腾 influxdb 的花,直接 prometheus 。
连代码都不用写。。
dynastysea
2020-12-01 10:04:34 +08:00
@hehe12980 因为从你的场景出发,这个是完全没必要的,你说的这个 sql 完全就可以满足,没必要提早过度优化。
stevenkang
2020-12-01 10:09:05 +08:00
5 秒钟上报一次,按天的维度下,并不需要 5 秒钟刷新一次前端展示。

按天算,24 小时 x 60 分钟 = 1440,一分钟刷新一次足以满足需求。多了也看不出来有啥变化。

按小时算,60 分钟 x 60 秒 = 3600,算一半 1800,两秒钟刷新一次也满足需求,多了同样看不出来啥变化。

总之,不要在一个时间范围很大的维度上,展示的数据粒度又很小,那样无意义(参考各种监控系统的设计)。
xiaofan2
2020-12-01 10:09:13 +08:00
上面说的时序数据库完全可以 目前我们公司运维用的是 clicckhouse,这个感觉应该也可以,但我还没深入了解过,你可以了解下
hehe12980
2020-12-01 10:18:28 +08:00
@fengpan567 K 线图是分钟级别的么 那比如一分钟 60 个价格的点 K 线图的价格 怎么变成一个点 取平均值?
Garland
2020-12-01 11:13:48 +08:00
唔,这个是时序数据库的标准场景了。
Jrue0011
2020-12-01 11:24:02 +08:00
哈哈哈所以这算是一个经典 XY 问题吗,本身要解决的不是 redis 存大 value,甚至都不是大量数据的查询优化,而是本身这个数据展示的需求设计
muskill
2020-12-01 11:28:10 +08:00
influxdb 合适
hehe12980
2020-12-01 11:35:46 +08:00
@Jrue0011 咋展示比较合理呢 ==

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

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

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

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

© 2021 V2EX