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

2024-05-22 15:03:15 +08:00
 Glkcv

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

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

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

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

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

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

2365 次点击
所在节点    程序员
24 条回复
Glkcv
2024-05-23 08:37:23 +08:00
@opengps #19 不加的话也可以区分是哪个传感器产生的数据吗
Glkcv
2024-05-23 08:43:24 +08:00
@0xsui 看了下有很多格式,确实有比较适合的格式
opengps
2024-05-23 08:48:53 +08:00
@Lexgni 区分来自哪个设备:如果原始数据包不带,那就需要你自己增加识别,要么改造消息队列加入传感器自身 id (首推),要么根据实际配置能通过客户端来源 IP 识别(适用场景较少,不推荐这种)
jimrok
2024-05-23 09:55:05 +08:00
不需要考虑这么紧凑的数据格式吧,数据错了造成的损失比网络开销要大很多。如果网关丢掉了设备的信息,还是让网关把格式改一下,增加传感器的 id 数据到后端。一般都是设备直接对接 mqtt 的 server ,mqtt 的协议里面应该有设备的 session 数据结构,应该是能将数据合并在一起的。

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

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

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

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

© 2021 V2EX