簡體   English   中英

在AWS DynamoDB達到限制大小時如何處理?

[英]How to deal with limit size when reached at AWS DynamoDB?

我們正在嘗試充分利用AWSDynamoDBNoSQLIoT的優勢 ,但是我們不確定關於項目長度或項目插入的最佳實踐。

順帶一提,每個設備都可以讀取環境數據,具體取決於捕獲的數據類型,設備將該“事件”的 JSON消息發送給IoT 代理 ,然后發送給Lambda函數,以映射該負載,對其進行處理並寫入DynamoDB表。

然后,每種捕獲的事件類型都有一個表,每個從設備接收到的事件消息都有一個表。 但是我們已經意識到那只是另一種偽關系方法。

閱讀文檔,並僅將一張表作為最佳實踐,將每台設備中的一個表放入其中,並按鍵名稱對這些JSON事件進行分類。

就像是:

    {
        "partition":"<str_an_id>"",
        "range":<uint_maybe_a_timestamp>,
        "event_soil":[
            {<<object with variable length #0},
            {<<object with variable length #1}
            ...
            {<<object with variable length #n}
        ],
        "event_humidity":[
            {<<object with variable length #0},
            {<<object with variable length #1}
            ...
            {<<object with variable length #n}
        ],
        "event_light":[
            {<<object with variable length #0},
            {<<object with variable length #1}
            ...
            {<<object with variable length #n}
        ],
        "event_temperature":[
            {<<object with variable length #0},
            {<<object with variable length #1}
            ...
            {<<object with variable length #n}
        ]
    }

當前,我們有兩個設備,因此隨着設備的JSON有效負載,我們預計會有兩個項目在增長。 但是,在某個時候,內存閾值已達到,並且DynamoDB發出400錯誤代碼。

這種方法正確嗎? 還是完全錯誤?

有什么方法可以知道何時達到該極限? 像是某種分頁或類似的東西?

很難進行計算項目大小的數學運算,因為JSON對象當前的長度有所不同,並且將來可能會有所不同。

另外,我們已經開始考慮每台設備每隔一到兩個月(從理論上講,因為我們會加速設備)創建項目。 但是,不確定。

每個設備內部都有一個項目,其中包含一系列按密鑰名稱分類的JSON事件。

如果我了解上述內容以及代碼示例...

我會說你做錯了。 反復更新一些記錄不是一個好主意。 除了您似乎認識到的項目空間不足外,您還需要為所需的I / O支付兩倍的費用(1讀+ 1寫)。 不知道你從哪里得到這個主意的。

對於物聯網設備,似乎您正在處理時間序列數據,因此請確保了解DynamoDB中處理時間序列數據的最佳實踐。

也許只用兩個設備就算太過分了...但是假設您要大幅度擴展...

我的第一遍是分區鍵:“ deviceName#date”,排序鍵:“時間”

在這種情況下,“日期”可以是完整日期,YYYY-MM-DD,或者僅僅是YYYY-MM,甚至YYYY。 將剩余的日期部分移至排序鍵。 一切取決於您期望的數據量。 要考慮的是,給定的分區(鍵)只能存儲10GB的數據。

如果您可以將設備的數據保留量限制在10GB以下,那么我將使用設備作為分區鍵,將日期移至排序鍵。

編輯
關鍵點

  1. 了解將生成(寫入)多少數據
  2. 了解您的應用如何將數據呈現給用戶
  3. 一個分區可提供10GB的數據存儲空間和3000 RCU / 1000 WCU
  4. 您只能Query()給定的分區。 (PartitionKey ==“某些東西”)

2非常重要,假設您選擇了給定時間段(過去24小時,上周等),那么您將要處理給定設備的所有事件,特定類型的所有事件,所有設備的所有事件,或.. ..

並不是說您不能完成上述所有操作,但是主要的訪問權限是什么?

每次“將所有時間的所有數據給我”將是Scan()...肯定不是一種經濟有效的訪問方法。

暫無
暫無

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

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