如何一次性获取海量设备(以 5W 为例)的最新当前状态(在线离线打开关闭)

2024-01-17 09:24:43 +08:00
 unt

仅有且已有 redis+mysql+mongo 。

目前已采用两种方式:

  1. 用户刚进入页面时直接用 HMGET 。缺点:害怕 redis 存在性能瓶颈,需要专门做优化处理,比如拆分成小批量或者使用管道;
  2. 每次 iot 数据上报时,改变 mysql 的状态字段,那样每次调用业务接口,直接就能拿到状态;

请问最合理、性能开销最小的方案是什么。请教大家一些经验。

4569 次点击
所在节点    程序员
39 条回复
allenby
2024-01-17 12:53:55 +08:00
redis bitmap 不错
xmumiffy
2024-01-17 13:04:57 +08:00
5w 用 redis 有啥好怕的
totoro52
2024-01-17 13:09:48 +08:00
我之前阅读 thingsboard 源码他是两种都做的, 数据库也更新面板统计也存在缓存里
cutchop
2024-01-17 13:26:25 +08:00
5w 又不多,直接读 mysql 不就好了吗
unt
2024-01-17 13:43:23 +08:00
@Mithril #19 嗯,现在想来在服务端内存中再做一层维护比较好。 可是那块业务不是我做的,哎,以后再说吧。
iv8d
2024-01-17 14:15:58 +08:00
都是临时状态,一般存内存或 redis 里,没必要存 rdbms
unt
2024-01-17 14:29:31 +08:00
@iv8d #26 主要是 mysql 读没有性能压力,随便玩
cnsdytedison
2024-01-17 15:18:15 +08:00
你说的这个 aws 家有现成的方案,可以参考。不过我也没用过,只是看过宣传。推广期价格也不贵
yannxia
2024-01-17 16:26:45 +08:00
@unt 看内容是更新的是 mysql ,每次都要读 5w 的 mysql 数据啊,应该更前置到后端服务的内存里面
LiaoMatt
2024-01-17 16:54:12 +08:00
设备离线上线更新数据库, 在线状态的维持靠心跳或者消息更新缓存, 然后定时读缓存刷新状态, redis 读 5W 应该还是很轻松的, 如果对实时要求不高直接通过数据库做聚合, 几万条数据应该也很轻松
LiaoMatt
2024-01-17 16:55:33 +08:00
放数据库一半是因为要用设备在线状态做业务, 筛选排序, 或者一些关联数据查询需要指定某种状态的设备
ITdream
2024-01-17 17:58:12 +08:00
上 IoTDB
koloonps
2024-01-17 18:30:19 +08:00
在集群内部广播一下,让每个服务发送下当前在线客户端列表.
hamsterbase
2024-01-17 23:04:35 +08:00
如果是实时上报的话,是不是直接在内存里维护一个 map 就行了。


1. 在内存里维护一个 map
2. 定时将 map 的数据备份储存。
unt
2024-01-18 00:54:53 +08:00
@hamsterbase 嗯,因为这种方法最简单粗暴,性能也强,但是现在一般都默认不会这么做。

其实想想这样做也挺好
a67793581
2024-01-18 02:05:28 +08:00
op 记得更新一下最终方案 回馈社区
F7TsdQL45E0jmoiG
2024-01-18 09:07:36 +08:00
这种是典型是时序数据,用时序数据库最好,最简单的实现方式是 Prometheus
yc8332
2024-01-18 09:10:25 +08:00
不知道你存的数据多少?。。不大的话,redis 主从,查询从从库查,直接一次性 hgetall 出来,几十万一点问题都没有。
所以你说的海量到底是多少?真是海量也不可能会一次性需要把所有数据都展示。顶多做个多少在线这种,这样只要取计数就好了。具体要查看某些目标的值的时候再取详细的
unt
2024-01-18 09:10:33 +08:00
@a67793581 #36 那块业务不是我做的,而且已经上线运行,暂时改不动,数据库端不动话目前的解决方法应该是在服务器内存中再维护一层设备 map ,但是需要综合考虑一下性能消耗并完善下逻辑

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

https://tanronggui.xyz/t/1009238

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

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

© 2021 V2EX