簡體   English   中英

用於存儲 IoT 數據的 DynamoDB 地圖與列表

[英]DynamoDB Maps vs Lists for storing IoT Data

我正在嘗試從可以連接各種傳感器的數據記錄器中存儲 IoT 數據,下面是一個示例。 每個記錄器每 20 秒發送一條 MQTT 消息

"state": {
    "reported": {
      "batv": 5105,
      "ts": 1614595073655,
      "temp": 20,
      "humidity": 50
    }
  }

我的問題是關於將這些 MQTT 消息/讀數有效地存儲在 DynamoDB 表中,我是否應該將讀數存儲在包含這樣的地圖的 Map 中。 (注意這是我目前正在做的事情,當讀數變大時,在 AWS DynamoDB 控制台中加載非常慢。)

{
  "readings": {
    "ts1614592810955": {
      "battery_level": 5089,
      "temp": 20,
      "humidity": 50
    },
    "ts1614593692395": {
      "battery_level": 5093,
      "temp": 20,
      "humidity": 50
    }
  },
  "serial_number": "TDG_logger_thing"
}

我傾向於的替代方法是將讀數存儲在列表中

{
  "readings": [
    {
      "batv": 5105,
      "ts": 1614594313407,
      "temp": 20,
      "humidity": 50
    },
     {
      "batv": 5105,
      "ts": 1614594313555,
      "temp": 20,
      "humidity": 50
    }
  ],
  "serial_number": "TDG_Logger_Thing"
}

任何了解 DynamoDB 或存儲 IoT 數據的人有什么建議嗎? 非常感激

(BTW 數據流是)

數據記錄器 -> AWS IoT -> AWS Lambda -> DynamoDB

當您有嘗試可靠地修改列表中保存的屬性等用例時,DDB List操作可能是一個限制因素

示例 - 列表

在一個列表中,要將temp to 30其中ts = 1614594313407 ,您需要從 DDB 獲取列表,搜索/遍歷每個 object 直到ts = 1614594313407set temp to 30 ,然后將整個列表寫回 DDB。 不太具有交易性

[
    {
      "batv": 5105,
      "ts": 1614594313407,
      "temp": 20,
      "humidity": 50
    },
     {
      "batv": 5105,
      "ts": 1614594313555,
      "temp": 20,
      "humidity": 50
    }
  ]

示例 - Map

使用 Map,您可以在一次更新"SET readings.#ts_id.temp =:temp_val"可靠地將temp to 30 ,其中ts = ts1614592810955

{
  "readings": {
    "ts1614592810955": {
      "battery_level": 5089,
      "temp": 20,
      "humidity": 50
    },
    "ts1614593692395": {
      "battery_level": 5093,
      "temp": 20,
      "humidity": 50
    }
  },
  "serial_number": "TDG_logger_thing"
}

我不會使用 map 或列表並將這些讀數拆分並將它們存儲在單獨的項目中。 使用與設備 ID 相同的分區鍵,結合每次讀取的排序鍵,還包括時間戳。 這樣,您可以更輕松地查詢所有臨時數據,並使用排序鍵中的時間戳,您可以使用查詢僅獲取特定時期的測量值。

所以主鍵是:PK[device id] - SK[Measurement type - Data time]:(每次測量的屬性)

之后,您可以存儲每個單獨測量所需的任何數據。 並且您可以快速更新和檢索單個測量值,希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM