image.png

今天在开发平台时,需要做在线设备相关的开发。 下面是一些设计思路。

1.首先看一下设备生命周期

注册 ——》激活 ——》上线 ——》下线
——》禁用

2.设备的几种状态

在线状态:设备当前在线
离线状态:设备上过线,但现在不在线
激活设备:设备上过线,无论现在在不在线
禁用设备:设备被禁用

3.一些需要展示的信息

  1. 在线设备数量
    2. 离线设备数量
    3. 激活设备数量
    4. 禁用设备数量

  2. 条件检索在线设备
    5. 条件检索离线设备
    6. 条件检索禁用设备
    7. 条件检索未激活设备
    8. 检索不同设备的不同状态

4.数据表设计(MySql)

设备状态表 tb_device_status
iot_id(设备唯一id),online_time(上线时间),offline_time(下线时间),if_online(是否在线)

设备信息表 tb_device
iot_id(设备唯一id),if_uesd(是否禁用),if_active(是否激活)

5.说明

其实一开始打算用redis存储设备在线列表(key:iot_id, value: online_time),和设备离线列表的。
但是后来发现redis存储时,没法跟我业务需求想关联。
比如我要条件检索在线设备,我需要先去redis中拿到一页符合条件的在线设备id,然后再去关联库里数据的基本信息,但是redis中我只放了在线时间,没有设备的详细信息。而如果我先去查mysql再去关联redis,这样又不知道哪些是在线的了,所以这样就很烦琐。
且当设备数量很大时,不能一次性查询redis中所有设备信息。
结合公司现有的设备不会频繁上下线,也就是不会频繁更新数据库。
因此,还是考虑将设备在线信息存至MySql中,方便与设备进行关联。