[英]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 = 1614594313407
, set 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.