2017-02-23 2 views
0

私はブローカにいくつかのメッセージを公開するmqttクライアントを持っています。メッセージを公開しながら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() 

また、ブローカーに1つずつメッセージを送信する必要があります。

while True: 
    if stored_msg_present: 
     send_stored_msg_to_broker() 

これを行うには最良の方法が必要です。 これにtinydbのようなデータベースを使うのは良いですか? しかし、私はtinydbデータベースから要素を取得できません。

答えて

0

データベースに保存するか、ファイルに保存するか、メモリに保存するかは、お使いの環境によって異なります。

接続が非常にまれで、通常は長時間切断すると、データベースまたはファイルに保存するほうがメモリを節約しやすくなります。しかし、あなたのメッセージが少なければ、メモリに保存するだけでもOKです。 (例えば、待ち行列又はリスト)

接続が非常に安定しており、接続が稀で短時間(例えば数秒)で回復する場合、メモリへの保存は悪い選択ではないかもしれない。しかし、メッセージが非常に速く(例えば、毎秒何千ものメッセージ)成長した場合、それらをすべてメモリに保存することは良い選択ではないかもしれません。

ファイルとデータベースの比較では、大量のデータを保持する必要がある場合、マルチスレッドプログラミングを使用してアクセスする場合、またはそれらをクエリして最初にアップロードするデータを選択する必要がある場合はデータベースを扱いやすくなります。データがシンプルで少ない場合は、ファイルで簡単に処理できます。

低品質のチップを使用している場合、環境は別の考慮事項ですが、パフォーマンスや安定性を考慮する必要があります。 (たとえば、メモリ不足またはディスク不足)

最後にデータの重要性があります。あなたのメモリとディスクが短ければ、データはあまり重要ではありません。たぶんあなたはそれらを破棄して、それらを処理する努力を省くことができます。それはあなた次第です。

関連する問題