【问题标题】:Use MQTT or remote MySQL to get data on a server? [closed]使用 MQTT 或远程 MySQL 在服务器上获取数据? [关闭]
【发布时间】:2020-02-01 23:16:55
【问题描述】:

我目前在不同位置设置了几个 Raspberry Pi,每 5 秒收集一次数据(温度、湿度)。为了可视化这些数据,我想知道是否最好通过 MQTT 将该数据发送到 VPS 并将其保存到本地 MySQL 数据库,或者仅使用远程 MySQL 连接并将数据直接插入 MySQL 数据库。 目前,我真的看不到 MQTT 的任何优势。你们还有其他意见吗?

感谢和问候, 乔纳斯。

【问题讨论】:

  • "...或者只是使用远程 MySQL 连接并将数据直接插入 MySQL 数据库" -- 在不受信任的网络上使用远程连接是不安全的,而且非常不稳定且容易出错。

标签: mysql raspberry-pi mqtt


【解决方案1】:

对此的任何答案都将在某种程度上基于意见,但我相信以下是 MQTT 可能为您带来好处的一些领域:

  • 消息传递(尤其是在质量较差的链接上) - 一旦消息被接受,使用 MQTT(和 QOS>0)保证传递(在限制内!);客户端/代理将处理网络问题等。请注意,某些 MQTT 客户端不支持离线缓冲(例如Paho .Net client),但您可以通过在每个 Pi 设置上运行代理作为桥接来解决此问题。如果您使用 MySQL,那么您将需要自己处理连接问题(并在网络中断期间处理数据持久性,如果这对您很重要)。
  • 带宽 - MQTT 消息可能更小(这取决于您如何打包消息,但协议增加的开销非常小)。
  • 安全性 - MySQL security guidelines 声明 MySQL“端口不应从不受信任的主机访问”。任何产品都可能存在安全问题,但 MySQL 是一个比 MQTT 代理更大、更复杂的系统,因此具有更大的攻击面。
  • 松散耦合 - 从远程节点直接连接到数据库会将您锁定在该数据库和架构中。使用 MQTT 可以让您重新架构后端(包括迁移到 PostgreSQL),而无需将任何更改推送到客户端(当您拥有大量远程设备或无法远程更新它们时这很重要)。
  • Pub/Sub 模型 - MQTT 使用的 Publish/Subscribe 模型具有许多优势,例如从您的测试系统订阅实时数据。
  • 双向 - 例如,如果您需要控制远程设备上的继电器,则可以轻松地从服务器向其发送消息(这也可用于执行请求日志等操作以进行诊断)。

【讨论】:

  • 很好的答案,非常感谢!我也考虑过使用 MySQL 双向(不断检查表中的更改),但最终 MQTT 可能是更好的选择。我目前正在考虑是否要使用 AWS IoT Core 或自己处理 MQTT 到 MySQL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多