我有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数据库中检索元素。
答案 0 :(得分:0)
保存到数据库或文件或只保存在内存中取决于您和您的环境。
如果连接很少连接并且通常断开很长时间,那么保存到数据库或文件更容易节省内存。但是如果你的消息较少,那么只需保存在内存中即可。 (例如队列或列表)
如果连接非常稳定且很少断开连接,并且会在短时间内恢复(例如几秒钟),那么保存到内存可能不是一个糟糕的选择。但是如果你的消息增长得非常快(例如每秒数千条消息),那么将它们全部留在内存中可能不是一个好的选择。
文件和数据库之间的比较,如果您需要保存大量数据,可能需要多线程编程来访问它们,或者需要查询它们以选择首先上传哪个数据,那么数据库将更容易处理。如果您的数据简单且数据较少,则可以使用文件更轻松地处理它们。
环境是另一个考虑因素,如果你使用一些低质量的芯片,也许你应该考虑它们的性能或稳定性。 (例如内存不足或磁盘已满)
最后是数据的重要性。如果你的内存和磁盘很短,那么数据就不那么重要了,也许你可以丢弃它们,省去你的工作。它取决于你。