设计: 一个统计设备上下线的方案

2021-03-30 11:56:43 +08:00
 lanqing
假设有 10000 台设备,统计任意 A 天到 B 天的某设备 SN 的在线时长
我能收到每台设备的上线下线消息。
如何存储,如何查询,大佬们有啥方案么?

本人不才,设计到 mysql 存储每台设备每天的上下线消息,但是不管是查询还是设计,都感觉丑陋无比,有啥更好的方案么?
4688 次点击
所在节点    Python
39 条回复
Kinnice
2021-03-30 16:09:09 +08:00
下线时记录 时长
zardly666
2021-03-30 16:10:26 +08:00
我目前做的是以某台设备某天为一条数据存储。限定到某台机器,某一天的上下线信息都只更新这一条数据。
{
"date": "2021-03-26",
"online_sum": 40044000,
"device_sn": "xxxxxxxxxx",
"last_online_time": "2021-03-26 12:52:36",
"last_status": "online",
"merchant": "xxx"
}
ch2
2021-03-30 16:12:44 +08:00
用 mongo 正好,数据类型简单的话存再多也能 cache 的住无压力
lanqing
2021-03-30 16:22:04 +08:00
@zardly666 如果设备连续 3 天在线,这 3 天怎么统计的?
lanqing
2021-03-30 16:25:22 +08:00
@Lee2019 后续优化会去考虑 tsdb,目前公司业务没有用到这个 db,而且赶工期,所以不尝试,哭
lanqing
2021-03-30 16:27:41 +08:00
@silencegg 你这个能保证下线消息一定能够收到,或者能够处理成功么?如果不能,心跳结束时间永远不会更新
zardly666
2021-03-30 17:23:23 +08:00
@lanqing 忘记说了。每天零点有一个调度任务:
①把零点时前一天最后状态仍为在线的,用零点的时间戳减去前一天最后一次上线时间的时间戳,加和进前一天这条记录的在线时长。
②插入一条这台机器,时间为今天的新数据,以今天零点为上次在线时长戳,在线时长为 0.
zardly666
2021-03-30 17:28:28 +08:00
@lanqing 这样涉及有个弊端,就是想查看今天的在线时长,从记录查不出来,需要计算。

比如机器从昨天一直开机,在今天早上零点产生了一条数据,今天零点为上次在线时长戳,在线时长为 0.

需要用当前时间戳-今天凌晨的时间戳。
redtea
2021-03-30 17:32:36 +08:00
存 MongoDB,每隔几秒向服务器发送一次消息,超过时间视为离线。
Maboroshii
2021-03-30 18:43:00 +08:00
心跳吧, 频率越高越精准 。 丢失心跳视为下线
dapang1221
2021-03-30 18:54:14 +08:00
@lanqing 才 1kw 条数据,太小看 mysql 了。。实在不行就分表,1w 台按照 id 平均分到 10~100 个表里,而且冷数据也能定期清掉或转移
securityCoding
2021-03-30 18:56:22 +08:00
往高大上的方向整就对了
joesonw
2021-03-30 19:03:07 +08:00
influxdb 每在线 5 分钟, 插一条. 随便怎么统计.
owenliang
2021-03-30 19:10:42 +08:00
spark 处理一下就好
useben
2021-03-31 09:35:46 +08:00
心跳统计
uselessVisitor
2021-03-31 09:48:11 +08:00
我们是冗余了一张最新设备信息表
LeeReamond
2021-03-31 11:38:33 +08:00
@dapang1221 1kw 慢明显是没优化,不用嘲讽楼主了。。不过话说回来 mysql 确实跟同类产品比性能不行啊,pg 和 oracle 大概 1kw 数据没优化硬顶也能顶住吧
Lee2019
2021-03-31 12:20:58 +08:00
@lanqing 不过感觉你们的场景天然就该用 tsdb
SHSF
2021-04-03 16:39:33 +08:00
没人提 MQTT 吗

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

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

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

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

© 2021 V2EX