

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

# 高效大量操作
<a name="BestPractices_EfficientBulkOperations"></a>

**適用情境**

這些模式可協助在 DynamoDB 項目上高效執行大量更新。
+ DynamoDB-shell 不支援用於生產環境。
+ `TransactWriteItems` – 最多可執行 100 個有或無條件的個別更新，並以「全有或全無」的 ACID 套件方式運行 

  取捨 – 額外消耗輸送量，每 1 KB 寫入需耗用 2 WCUs。
+ PartiQL `BatchExecuteStatement` – 最多可執行 25 個有或無條件的更新。

  取捨 – 需額外邏輯以 25 筆為一批分配請求。
+ AWS Step Functions – 開發人員熟悉的速率限制大量操作 AWS Lambda。

  取捨 – 執行時期與速率限制成反比。受限於 Lambda 函式的最大逾時時間。此功能意味著讀取與寫入之間的資料變更可能被覆寫。如需更多資訊，請參閱[使用 Amazon EMR 回填 Amazon DynamoDB 存留時間屬性：第 2 部分](https://aws.amazon.com/blogs/database/part-2-backfilling-an-amazon-dynamodb-time-to-live-attribute-using-amazon-emr/)。
+ AWS Glue 和 Amazon EMR – 具有受管平行處理的速率限制大量操作。對於非即時的應用程式或更新，這些選項可在背景執行，僅耗用少量輸送量。兩項服務皆透過 emr-dynamodb-connector 執行 DynamoDB 操作。這些服務會先進行大量讀取，再進行大量寫入更新項目，並可設定速率限制。

  取捨 – 執行時期與速率限制成反比。功能包括可覆寫讀取與寫入期間發生的資料變更。您無法從全域次要索引 (GSIs) 讀取資料。請參閱[使用 Amazon EMR 回填 Amazon DynamoDB 存留時間屬性：第 2 部分](https://aws.amazon.com/blogs/database/part-2-backfilling-an-amazon-dynamodb-time-to-live-attribute-using-amazon-emr/)。
+ DynamoDB Shell – 透過類似 SQL 的查詢執行具速率限制的大量操作。您可從 GSIs 讀取資料以提升效率。

  取捨 – 執行時期與速率限制成反比。請參閱[在 DynamoDB Shell 中進行速率限制大量操作](https://aws.amazon.com/blogs/database/rate-limited-bulk-operations-in-dynamodb-shell/)。

## 使用此模式
<a name="BestPractices_EfficientBulkOperations_UsingThePattern"></a>

大量更新可能顯著影響成本，特別是在使用隨需輸送量模式時。使用佈建輸送量模式時，速度與成本之間需要權衡。將 rate-limit 參數設定得過於嚴格，可能會造成處理時間過長。您可以根據平均項目大小和速率限制，大致估算更新速度。

或者，您可以根據更新程序的預期持續時間與平均項目大小，估算所需的輸送量。每個模式附帶的部落格參考說明使用該模式的策略、實作方式與限制。如需更多資訊，請參閱[使用 Amazon DynamoDB 進行具成本效益的大量處理](https://aws.amazon.com/blogs/database/cost-effective-bulk-processing-with-amazon-dynamodb/)。

可使用多種方法對即時 DynamoDB 資料表執行大量更新。適合的方法取決於 ACID 與/或冪等性需求、更新項目數量，以及對 API 的熟悉程度。必須同時考量成本與時間的權衡，上述多數方法皆可設定速率限制以控制大量更新任務的輸送量。