2017-02-23 141 views
0

我有mqtt客戶端,它向broker發佈了一些消息。當mqtt客戶端和代理之間的連接丟失時,將json數據存儲在文件中

該消息是像下面

{ 
    "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() 

我還需要將存儲的味精一個一個地發送給經紀人。

while True: 
    if stored_msg_present: 
     send_stored_msg_to_broker() 

什麼應該是最好的方法來做到這一點。 使用tinydb這樣的數據庫是否好用。 但我不能從tinydb數據庫中檢索元素。

回答

0

保存到數據庫或文件或只保存在內存中取決於您和您的環境。

如果連接很少連接,並且通常會斷開很長時間,那麼保存到數據庫或文件更容易節省內存。但是如果你的信息少了,只要保存在內存中就行了。 (例如隊列或列表)

如果連接非常穩定並且很少斷開連接,並且會在短時間內恢復(例如幾秒鐘),那麼保存到內存可能不是一個錯誤的選擇。但是如果你的消息增長非常快(例如每秒數千條消息),那麼將它們全部保存在內存中可能不是一個好的選擇。

文件和數據庫之間的比較,如果你必須保存大量的數據,可能是多線程編程來訪問它們,或者需要查詢它們來選擇首先上傳哪一個數據庫,那麼數據庫將更容易處理。如果你的數據簡單而且少,你可以更容易地用文件處理它們。

環境是另一個考慮因素,如果你使用一些低質量的芯片,也許你應該考慮它們的性能或穩定性。 (例如內存不足或磁盤已滿)

最後是數據重要性。如果你的內存和磁盤很短,數據不是很重要,可能會丟掉它們,節省你處理它們的工作量。這取決於你。

相關問題