当mqtt客户端和代理之间的连接丢失时,将json数据存储在文件中

时间:2017-02-23 12:52:24

标签: python json database serialization mqtt

我有mqtt客户端,它向代理发布一些消息。

消息如下所示

{
    "message": {
        "body": {
            "software_sub_version": "O", 
            "software_version": 1.25, 
            "hardware_id": 17, 
            "machine_id": 39
        }, 
        "header": {
            "Machine_name": "MY_MACHINE", 
            "message_type": "machine_data", 
            "message_version": "1.0", 
            "publish_time": "2017-02-22T06:44:27.281644+00:00"
        }
    }
}

在发布消息时,我正在检查是否存在与代理的连接,如果不存在,我将使用以下代码将消息存储到文件中。

def mqtt_publish():
   if no_connection:
       store_json_data()
   else:
       send_msg()

我还需要将存储的msg逐个发送给经纪人。

while True:
    if stored_msg_present:
         send_stored_msg_to_broker()

这应该是最好的方法。 为此使用像tinydb这样的数据库是否合适? 但是我无法从tinydb数据库中检索元素。

1 个答案:

答案 0 :(得分:0)

保存到数据库或文件或只保存在内存中取决于您和您的环境。

如果连接很少连接并且通常断开很长时间,那么保存到数据库或文件更容易节省内存。但是如果你的消息较少,那么只需保存在内存中即可。 (例如队列或列表)

如果连接非常稳定且很少断开连接,并且会在短时间内恢复(例如几秒钟),那么保存到内存可能不是一个糟糕的选择。但是如果你的消息增长得非常快(例如每秒数千条消息),那么将它们全部留在内存中可能不是一个好的选择。

文件和数据库之间的比较,如果您需要保存大量数据,可能需要多线程编程来访问它们,或者需要查询它们以选择首先上传哪个数据,那么数据库将更容易处理。如果您的数据简单且数据较少,则可以使用文件更轻松地处理它们。

环境是另一个考虑因素,如果你使用一些低质量的芯片,也许你应该考虑它们的性能或稳定性。 (例如内存不足或磁盘已满)

最后是数据的重要性。如果你的内存和磁盘很短,那么数据就不那么重要了,也许你可以丢弃它们,省去你的工作。它取决于你。