技术求助帖,关于 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 瓶颈太大

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

5861 次点击
所在节点    程序员
73 条回复
hehe12980
2020-12-01 11:38:45 +08:00
@stevenkang 那历史的数据 比如 17200 多个点 汇成曲线 展示的话 不全拿出来 那曲线图是不是就不对了 从某种意义上来说 实时数据 可以按你说的 那样干 历史数据 要怎么 拿出来展示比较合理呢
BadAngel
2020-12-01 11:40:59 +08:00
Redis 要解决的问题是快。
一次查询,缓存一天所有设备数据数据,下一次查询把之前的缓存删掉,又缓存另外一天?和查数据库没有区别吧。
除非你缓存全量数据,否则解决不了你的需求。
neptuno
2020-12-01 11:43:18 +08:00
1.精简数据结构,1.7 万条数据尽量精简到时间-温度两个纬度
2.你用 redis 和用 influxdb 都是引入第三方,为啥不一步到位用 influxdb,正好学学新知识嘛
hehe12980
2020-12-01 11:46:38 +08:00
@neptuno 嗯,实在不行 就整 influxdb
9684xtpa
2020-12-01 12:29:50 +08:00
zset,取得时候分页取就好了,按天做 KEY,我们以前一个 ZSET 存放一百多万条的 value 一点问题都没有
9684xtpa
2020-12-01 12:31:58 +08:00
@9684xtpa #65 得,直接审题就回答了,看完答案和后面楼主的回复,我这回答 0 分
kvkboy
2020-12-01 14:02:15 +08:00
你可以了解下 RedisTimeSeries,是 Redis 的一个扩展模块。

专门面向时间序列数据
luwill
2020-12-01 14:07:15 +08:00
如果一定要用 mysql 。合并数据:将一定的区间段( 10 分钟 120 条)的数据合并,压缩存入 blob 列。并计算存储平均值,用于粗粒度查询。

这样一天 144 条,根据前端选择范围返回粗或细粒度数据。粗粒度使用平均数,细粒度解压 blob 展开。
bugmakerxs
2020-12-01 14:26:34 +08:00
@hehe12980 『如果结果是固定不变的冷数据,为什么不能放缓存呢?』因为内存 /三级缓存很贵,所以只有少量热数据才会放缓存。计算机原理如是说。
hehe12980
2020-12-01 15:30:41 +08:00
@bugmakerxs 额 好吧 我错了 这思路却是不对
remarrexxar
2020-12-01 15:49:09 +08:00
如果是写入后不修改只查询的话落入文件就行了吧,机器 id+日期作为文件名。数据进来先进 redis,每 N 分钟把前 N 分钟的数据写进文件。查询过去记录直接读文件,当日的综合 redis 中记录。
ggabc
2020-12-01 15:58:50 +08:00
redis 里只存最新,历史数据继续用数据库吧
GrayXu
2020-12-01 16:32:58 +08:00
@Jrue0011 是这样 233

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

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

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

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

© 2021 V2EX