请问保存 MQTT 的数据应该如何设计数据库结构

272 天前
Lexgni  Lexgni

第一次使用这个协议,服务器使用的 emqx ,具体流程是 [多个传感器->网关->emqx ] ,问题主要是出在了数据是网关把所有传感器数据一起发布,但是这个网关下又不能保证每个项目的传感器数量是一致的

目前的消息结构大概是这样:

{
    "data": [
        -0.06106870248913765,
        5.2061066627502441
    ],
    "time": "2024-05-22T06:47:24.391927"
}

只发送了传感器的数据,具体是哪个设备根据 0,1,2 去对应,但是可以预见的问题是这个数据设备端全靠手写配置去对应,万一手抖就对应不上了,也考虑过给每个传感器一个唯一的编号,但是问了硬件的小伙伴说拿不到一个唯一的值,如果要靠手动分发可能会有些复杂

绕了一圈后还是想着回到上面的消息结构,毕竟出厂后增减传感器的几率不大,但是现在出现了一个问题就是这个数据不好存,因为每个项目的传感器数量不一致,如果不分配一个传感器的唯一值,就不好把传感器的值单独放在一个表,如果放在一条里有没法确定要加几个传感器的键,如果把数据放在一起,又怕影响查询效率

希望有大佬可以指点一二,谢谢

1995 次点击
所在节点   程序员  程序员
24 条回复
ipoh
ipoh
272 天前
| 网关 ID | 设备索引(0,1,2...) | Data |
如果是我会这样设计
IvanLi127
IvanLi127
272 天前
看起来这情况只能把网关 id 加传感器索引作为传感器的 id 了,问题就变成网关去转还是 mqtt 之后的程序去转了。
Lexgni
Lexgni
272 天前
@ipoh 这样就怕索引有变动
Lexgni
Lexgni
272 天前
@IvanLi127 感觉比较好的方式是这样,但是一个个去对应这些设备可能会比较麻烦
wssy001
wssy001
272 天前
时序数据库了解一下
Eiden
Eiden
272 天前
硬件的偷懒吧, 传感器里有单片机吧, 有单片机就有唯一编号, 这种场景肯定传感器要编号的
KongLiu
KongLiu
272 天前
硬件怎么可能拿不到,最起码的 MAC 地址有吧,不过我们的做法是硬件第一次上传数据都是 000000 ,然后服务器这边看到是 000000 ,就会给他下发一个唯一编码
Lexgni
Lexgni
272 天前
@Eiden 这个还得再去问问,我感觉也不太可能拿不到
@KongLiu 这个不太适用于下发,主要是没法知道那个是什么传感器
Lexgni
Lexgni
272 天前
@wssy001 还在设计数据库的阶段
cnuser002
cnuser002
272 天前
传感器脱钩的话,那你就只能以网关+索引去关联了吧,你看配置文件在哪写吧。
至于数据库,时序数据没有特别要设计的吧, 时间戳 ,数字,然后就是索引啦。
Lexgni
Lexgni
272 天前
@cnuser002 看样子需要分发一个唯一 id ,数据库里靠 0,1,2 索引感觉会出问题
opengps
opengps
272 天前
最好的存储结构是跟你数据使用方式有直接关系。
你这只列出了数据结构,目前最多可以知道怎么设计可以保证写入快。还没有读取场景来决策怎么兼顾读取快
sunjiayao
sunjiayao
272 天前
硬件忽悠你,问下他环境。肯定能获取到 uid
cxsz
cxsz
271 天前
我司也是类似的,有一个终端来收集各个传感器信息,统一 mqtt 发送到服务端

传感器大部分都是串口协议给终端的,解决方案是,把串口接入的线序,按顺序编号编好,然后硬件终端要维护个点表,按顺序获取数据,就能对应到具体的传感器了,给服务端的时候,不光要上送数据,点表也要同步上送
Lexgni
Lexgni
271 天前
@cxsz 也是个好办法
Lexgni
Lexgni
271 天前
@opengps 没有更好办法就设备参数里加 uuid ,直接保存
Curtion
271 天前
硬件设备一定有唯一值, 你问问传感器和网关是什么协议通信, 就算传感器没有上报自身唯一信息, 也可以从通信协议中找一个唯一值.
xylophone21
271 天前
> 毕竟出厂后增减传感器的几率不大
看起来像深坑
opengps
271 天前
@Lexgni uuid 不合适,你这种叫做 iot,最好的办法是类似于时序数据库的方式来存储,最佳的类主键设计应当是 time
0xsui
271 天前
有这么一个国家标准《水文监测数据通信规约》,可以参考。

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

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

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

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

© 2021 V2EX