DynamoDB 讀取和寫入操作 - Amazon DynamoDB

DynamoDB 讀取和寫入操作

DynamoDB 讀取操作可讓您透過指定分割區索引鍵值,以及選擇性的排序索引鍵值,從資料表擷取一或多個項目。使用 DynamoDB 寫入操作,您可以在資料表中插入、更新或刪除項目。本主題說明這兩個操作的容量單位耗用量。

讀取的容量單位耗用量

DynamoDB 讀取請求可以是高度一致的、最終一致的,也可以是交易式。

  • 一個項目最多 4 KB 的高度一致性讀取請求需要一個讀取單位。

  • 一個項目最多 4 KB 的最終一致讀取請求需要一半讀取單位。

  • 一個項目最多 4 KB 的交易讀取請求需要兩個讀取單位。

若要進一步了解 DynamoDB 讀取一致性模式,請參閱 DynamoDB 讀取一致性

讀取的項目大小會向上四捨五入到下一個 4 KB 倍數。例如,讀取 3,500 個位元組的項目,將會使用與讀取 4 KB 項目相同的輸送量。

如果您需要讀取大於 4KB 的項目,DynamoDB 需要額外的讀取請求單位。所需的讀取容量單位總數取決於項目大小,以及您需要最終一致或高度一致性讀取。例如,如果您的項目大小為 8 KB,則需要 2 個讀取單位來維持一個高度一致性讀取。如果您選擇最終一致讀取,則需要 1 個讀取單位,對於交易讀取請求則需要 4 個讀取單位。

以下說明 DynamoDB 讀取操作如何使用讀取單位:

  • GetItem:讀取資料表中的單一項目。若要求出 GetItem 會使用的讀取單位數目,請取得項目的大小,然後將其向上四捨五入到下一個 4 KB 界限。如果您已指定高度一致性讀取,則這是所需的容量單位數目。如果是最終一致讀取 (預設),請將此數字除以二。

    例如,如果您讀取的項目大小為 3.5 KB,則 DynamoDB 會將項目大小捨入為 4 KB。如果您讀取 10 KB 項目,則 DynamoDB 會將項目大小捨入為 12 KB。

  • BatchGetItem:從一或多個資料表讀取最多 100 個項目。DynamoDB 會將批次中的每個項目作為個別 GetItem 請求處理。因此 DynamoDB 會先將每個項目的大小,向上四捨五入至下一個 1 KB 界限,然後計算總大小。結果不一定與所有項目的總大小相同。例如,如果 BatchGetItem 讀取兩個大小為 1.5 KB 和 6.5 KB 的項目,DynamoDB 會將大小計算為 12 KB (4 KB + 8 KB)。DynamoDB 不會將大小計算為 8 KB (1.5 KB + 6.5 KB)。

  • Query:讀取具有相同分割區索引鍵值的多個項目。傳回的所有項目都會視為單一讀取操作,而 DynamoDB 會計算所有項目的總大小。DynamoDB 接著會將該大小四捨五入到下一個 4 KB 邊界。例如,假設您的查詢傳回 10 個項目,其合併大小是 40.8 KB。DynamoDB 會將操作的項目大小四捨五入為 44 KB。如果查詢傳回各為 64 位元組的 1500 個項目,則累積大小為 96 KB。

  • Scan:讀取資料表中的所有項目。DynamoDB 會考量所評估項目的大小,而非掃描所傳回項目的大小。如需 Scan 操作的詳細資訊,請參閱 掃描 DynamoDB 中的資料表

重要

如果您對某個不存在的項目執行讀取操作,DynamoDB 仍會耗用讀取輸送量,如上所述。對於 Query/Scan 操作,即使沒有資料,您仍需根據讀取一致性和搜尋來提供請求的分割區數量支付額外的讀取輸送量費用。

針對傳回項目的任何操作,您可請求要擷取的部分屬性。不過,這樣做不會影響項目大小計算。此外,QueryScan 也可以傳回項目計數,而非屬性值。取得項目計數會使用相同數量的讀取單位,而且會進行相同的項目大小計算,這是因為 DynamoDB 必須讀取每個項目,才能遞增計數。

寫入操作的容量單位耗用量

一個寫入單位代表一個大小上限為 1 KB 的項目寫入。如果您需要寫入大於 1 KB 的項目,DynamoDB 需要使用額外的寫入單位。交易寫入請求需要 2 個寫入單位才能執行一個大小上限 1 KB 的項目的寫入。所需的寫入請求單位總數取決於項目大小。例如,如果您的項目大小為 2 KB,您需要 2 個寫入單位來維持一個寫入請求,如果是交易寫入請求,則需要 4 個寫入單位。

寫入的項目大小會向上四捨五入到下一個 1 KB 倍數。例如,寫入 500 個位元組的項目,將會使用與寫入 1 KB 項目相同的輸送量。

以下內容說明 DynamoDB 寫入操作如何使用寫入單位:

  • PutItem:將單一項目寫入資料表。如果資料表中已有具有相同主索引鍵的項目,則操作會取代該項目。若要計算佈建輸送量使用,則有關的項目大小是兩者中較大的一個。

  • UpdateItem:修改資料表中的單一項目。DynamoDB 會考量項目在更新前後所顯示的大小。使用的佈建輸送量會反映這些項目大小中較大的一個。即使您只更新一小部分項目的屬性,UpdateItem 還是會使用完整數量的佈建輸送量 (「之前」和「之後」項目大小中較大的一個)。

  • DeleteItem:從資料表中移除單一項目。佈建輸送量使用是根據所刪除項目的大小。

  • BatchWriteItem:最多可將 25 個項目寫入一或多個資料表。DynamoDB 會將批次中的每個項目作為個別 PutItemDeleteItem 請求處理 (不支援更新)。因此 DynamoDB 會先將每個項目的大小,向上四捨五入至下一個 1 KB 界限,然後計算總大小。結果不一定與所有項目的總大小相同。例如,如果 BatchWriteItem 寫入兩個大小為 500 位元組和 3.5 KB 的項目,DynamoDB 會將大小計算為 5 KB (1 KB + 4 KB)。DynamoDB 不會將大小計算為 4 KB (500 位元組 + 3.5 KB)。

針對 PutItemUpdateItemDeleteItem 操作,DynamoDB 會將項目大小捨入至下一個 1 KB。例如,如果您放置或刪除 1.6 KB 項目,則 DynamoDB 會將項目向上四捨五入到 2 KB。

PutItemUpdateItemDeleteItem 允許條件式寫入,其中您可以指定必須評估為 true,操作才會繼續的表達式。如果表達式計算結果為 false,則 DynamoDB 仍然會從資料表使用寫入容量單位:使用的寫入容量單位數量取決於項目的大小。此項目可以是資料表中的現有項目,或您嘗試建立或更新的新項目。例如,假設現有項目為 300 KB。您嘗試建立或更新的新項目為 310 KB。新項目使用的寫入容量單位將為 310 KB。