讀取和寫入作業 - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

讀取和寫入作業

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

讀取作業的容量單位消耗量

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

  • 高達 4 KB 的項目的強度一致讀取請求需要一個讀取單元。

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

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

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

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

如果您需要讀取大於 4 KB 的項目,DynamoDB 需要額外的讀取單元。所需的讀取單元總數取決於項目大小,以及您是否需要最終一致性還是強烈一致的讀取。例如,如果您的項目大小為 8 KB,則需要 2 個讀取單元才能維持一個強烈一致的讀取。如果您選擇最終一致讀取或交易讀取請求選擇 4 個讀取單元,則需要 1 個讀取單元。

下列清單說明 DynamoDB 讀取作業如何使用讀取單位:

  • GetItem:從表格中讀取單個項目。若要判斷GetItem將耗用的讀取單元數目,請取得項目大小並將其四捨五入至下一個 4 KB 邊界。這是指定強烈一致讀取時所需的讀取單元數。對於最終一致讀取 (預設值),請將此數字除以 2。

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

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

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

  • 掃描:讀取表格中的所有項目。DynamoDB 會考量所評估項目的大小,而非掃描所傳回項目的大小。如需掃描作業的詳細資訊,請參閱掃描資料表中 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)。不會將大小計算為 4 KB (500 位元組 + 3.5 KB)。

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

PutItemUpdateItem、和DeleteItem運算允許條件式寫入,您可以在其中指定必須評估為 true 的運算式,才能成功執行作業。如果表達式計算結果為 false,則 DynamoDB 仍然會從資料表使用寫入容量單位:耗用的寫入容量單位數取決於項目的大小。此物品可以是表格中的現有物品,也可以是您嘗試建立或更新的物品。例如,假設現有項目為 300 KB。您嘗試建立或更新的新項目為 310 KB。對於新項目,使用的寫入容量單位將為 310 KB。