我目前正在使用MQTT在IoT设备和服务器之间交换数据。到目前为止,发送的数据量很小(大约2 MB)。但是现在我们要向服务器发送20 MB的数据(可能增加到30 MB)。
我的问题是从物联网设备向服务器发送如此大量数据的最佳方法是什么?我正在考虑使用相同的方法,并继续使用MQTT协议发送20 MB的数据。
现在连接的设备数量非常少(10个设备)。但最终,预计它将增加到约1000台设备。
我们没有使用任何基于云的解决方案。我正在使用mosquitto MQTT代理进行MQTT通信。如果有人已经解决了这种情况,请告诉我您最终采取了什么方法。
IoT应用程序用于收集车辆数据。物联网应用程序每秒从车辆收集很少的参数(速度,加速度,燃料等)并存储数据,直到数据达到20 Mb。然后将这些数据发送到服务器。此过程会在每个引擎循环中重复执行一次(引擎关闭后再打开)。
答案 0 :(得分:1)
主要问题是IoT设备和服务器之间的网络连接带宽。它不是用于传输的协议或库(MQTT)。即使在设备和服务器之间建立1Gbit / s的以太网链路(这在IoT中是一种奢侈),您也可能需要大约0.3秒来传输30Mbytes。而且重要的是传输频率:如果您每天需要传输20兆字节,则不同于每秒传输20兆字节。
如果在传输大量数据期间连接中断,应该怎么办?
您可以决定传输几个数据块。并对IoT应用程序进行编码,以便每条消息仅传输一个兆字节,并使用多个MQTT(或HTTP)请求发送所有20或30兆字节。您肯定需要记录这样的设计决定。
从概念上讲,您可以认为这20兆字节是一些“文件”,并使用某些文件共享应用程序(例如rsync
或unison
甚至git
在Linux上也是如此);它们通常发送“内容”)并在其协议之上进行构建。在某些情况下,仅传输内容的“差异”。您甚至可以考虑使用庞大的数据来填充服务器上运行的某些“数据库”(有关RDBMS的更多信息)。
正在进行的(2019年至2020年)CHARIOT项目也有类似的担忧(几天前,我们与同事Franck&Yves一起写过-2019年2月-其中的一些页面)。
IoT应用程序每秒从车辆收集很少的参数(速度,加速度,燃料等)并存储数据,直到数据达到20 Mb。
为什么设置此阈值?为什么仅基于容量阈值进行传输?如果我很少使用联网汽车(仅周末,因为在上班时间我要乘公共汽车去上班),您可能仍希望至少每周获取一次该数据(即使我很少开车,整整一个月也是如此)需要填充这20Mbytes。