

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

# Amazon DynamoDB 的限制
<a name="Constraints"></a>

本節說明 Amazon DynamoDB 中的當前配額 (過去稱為限制)。

**注意**  
DynamoDB 中的所有大小測量都會使用二進位單位。DynamoDB 表示 1 KB = 1024 位元組，1 MB = 1024 KB，1 GB = 1024 MB，1 TB = 1024 GB。

**Topics**
+ [讀取/寫入容量模式](#default-limits-capacity-modes)
+ [次要索引](#limits-secondary-indexes)
+ [分割區索引鍵和排序索引鍵](#limits-partition-sort-keys)
+ [命名規則](#limits-naming-rules)
+ [資料類型](#limits-data-types)
+ [項目](#limits-items)
+ [屬性](#limits-attributes)
+ [表達式參數](#limits-expression-parameters)
+ [DynamoDB 交易](#limits-dynamodb-transactions)
+ [DynamoDB Streams](#constraints-dynamodb-streams)
+ [DynamoDB Accelerator (DAX)](#limits-dax)
+ [API 特定限制](#limits-api)
+ [DynamoDB 靜態加密](#limits-dynamodb-encryption)

## 讀取/寫入容量模式
<a name="default-limits-capacity-modes"></a>

您可在 24 小時滾動期間內，最多將資料表從佈建容量模式切換至隨需模式四次。您可隨時將資料表從隨需模式切換回佈建容量模式。

如需了解如何在讀取與寫入容量模式間切換，請參閱 [切換 DynamoDB 容量模式時的注意事項](bp-switching-capacity-modes.md)。

### 容量單位大小 (已佈建的資料表)
<a name="limits-capacity-units"></a>

一個讀取容量單位 = 每秒一個高度一致性讀取，或每秒兩個最終一致讀取，適用於大小上限為 4 KB 的項目。

一個寫入容量單位 = 每秒一個寫入，適用於大小上限為 1 KB 的項目。

交易讀取請求需要 2 個讀取容量單位才能執行每秒讀取一個大小上限為 4 KB 的項目。

交易讀取請求需要兩個寫入容量單位才能執行每秒寫入一個大小上限為 1 KB 的項目。

### 請求單位大小 (隨需資料表)
<a name="limits-request-units"></a>

一個讀取請求單位 = 每秒一個高度一致性讀取，或每秒兩個最終一致讀取，適用於大小上限為 4 KB 的項目。

一個寫入請求單位 = 每秒一個寫入，項目大小上限為 1 KB。

交易讀取請求需要兩個讀取請求單位，才能執行每秒讀取一個大小上限為 4 KB 的項目。

交易讀取請求需要兩個寫入請求單位，才能執行每秒寫入一個大小上限為 1 KB 的項目。

## 次要索引
<a name="limits-secondary-indexes"></a>

### 每份資料表的預估次要索引屬性
<a name="limits-tables-projected-secondary-index-attributes"></a>

您最多可以投影 100 個屬性到資料表所有的區域和全域次要索引。這只適用於使用者指定的投影屬性。

在 `CreateTable` 操作中，如果您指定 `INCLUDE` 的 `ProjectionType`，則 `NonKeyAttributes` 中指定的屬性總數，即所有次要索引總數，絕對不能超過 100。如果您將相同的屬性名稱投影到兩個不同的索引，在判斷總數時，這會計算為兩個不同的屬性。

這項限制不適用於含 `KEYS_ONLY` 或 `ALL` 的 `ProjectionType` 的次要索引。

## 分割區索引鍵和排序索引鍵
<a name="limits-partition-sort-keys"></a>

### 分割區索引鍵長度
<a name="limits-partition-key-length"></a>

分割區索引鍵值的長度下限為 1 個位元組。長度上限為 2048 個位元組。

### 分割區索引鍵值
<a name="limits-partition-key-values"></a>

資料表或次要索引中，不同的分割區索引鍵值數目沒有實際限制。

### 排序索引鍵長度
<a name="limits-sort-key-length"></a>

排序索引鍵值的長度下限為 1 個位元組。長度上限為 1024 個位元組。

### 排序索引鍵值
<a name="limits-sort-key-values"></a>

一般而言，每個分割區索引鍵值的相異排序索引鍵值數目沒有實際限制。

例外狀況是有次要索引的資料表。項目集合是具有相同分割區索引鍵屬性值的一組項目。在全域次要索引中，項目集合與基礎資料表相互獨立 (而且可以具有不同的分割區索引鍵屬性)，但在本機次要索引中，索引檢視會與資料表中的項目共同存在於相同的分割區中，並共用相同的分割區索引鍵屬性。鑑於此位置資訊，當資料表擁有一或多個 LSI 時，項目集合無法分發至多個分割區。

對於具有一或多個 LSI 的資料表，項目集合的大小不得超過 10GB。這包括所有基礎資料表項目，以及具有與分割區索引鍵屬性相同值的所有投影 LSI 視圖。分割區的大小上限為 10GB。如需詳細資訊，請參閱[項目集合大小限制](LSI.md#LSI.ItemCollections.SizeLimit)。

## 命名規則
<a name="limits-naming-rules"></a>

### 資料表名稱和次要索引名稱
<a name="limits-naming-rules-tables-secondary-indexes"></a>

資料表和次要索引名稱至少必須為 3 字元長，但不能超過 255 個字元。以下為允許的字元：
+ `A-Z`
+ `a-z`
+ `0-9`
+ `_` (底線)
+ `-` (連字號)
+ `.` (點號)

### 屬性名稱
<a name="limits-naming-rules-attributes"></a>

一般而言，屬性名稱至少必須為一個字元長，但不能超過 64 KB。

以下為例外狀況。這些屬性名稱絕對不能超過 255 個字元。
+ 次要索引分割區索引鍵名稱。
+ 次要索引排序索引鍵名稱。
+ 任何使用者指定的投影屬性名稱 (僅適用於本機次要索引)。在 `CreateTable` 操作中，如果您指定 `ProjectionType` 為 `INCLUDE`，則 `NonKeyAttributes` 參數中的屬性名稱會有長度限制。`KEYS_ONLY` 和 `ALL` 投影類型不受影響。

這些屬性名稱必須使用 UTF-8 編碼，而且各名稱大小總計 (編碼後) 不能超過 255 個位元組。

## 資料類型
<a name="limits-data-types"></a>

### String
<a name="limits-data-types-strings"></a>

字串長度受到項目大小上限 400 KB 的限制。

字串是 UTF-8 二進位編碼的 Unicode。因為 UTF-8 是一種變動寬度的編碼方式，所以 DynamoDB 會使用其 UTF-8 位元組判斷字串的長度。

### Number
<a name="limits-data-types-numbers"></a>

數字的精準度最多可達 38 位數，可為正數、負數或零。
+ 正數範圍：`1E-130` 到 `9.9999999999999999999999999999999999999E+125`
+ 負數範圍：`-9.9999999999999999999999999999999999999E+125` 到 `-1E-130`

DynamoDB 使用 JSON 字串表示請求與回覆中的數字資料。如需詳細資訊，請參閱 [DynamoDB 低階 API](Programming.LowLevelAPI.md)。

若數字精確度很重要，則應使用從數字類型轉換而來的字串，將數字傳遞到 DynamoDB。

### 二進位
<a name="limits-data-types-binary"></a>

二進位長度受到項目大小上限 400 KB 的限制。

使用二進制屬性的應用程式必須先以 Base64 格式編碼資料，再傳送到 DynamoDB。DynamoDB 收到這些資料後，會將資料解碼為不帶正負號的位元組陣列，並用為屬性長度。

## 項目
<a name="limits-items"></a>

### 項目大小
<a name="limits-items-size"></a>

DynamoDB 的項目大小上限是 400 KB，包括屬性名稱二進位長度 (UTF-8 長度) 和屬性值長度 (又一個二進位長度)。屬性名稱算作大小限制的一部分。

例如，假設一個有兩個屬性的項目：一個屬性名為 "shirt-color"，其值為 "R"，另一個屬性名為 "shirt-size"，其值為 "M"。該項目的大小總計為 23 位元組。

### 具有本機次要索引之資料表的項目大小
<a name="limits-items-size-secondary-indexes"></a>

針對資料表中每一個本機次要索引，每一個於下列總計的限制為 400 KB：
+ 資料表的項目資料大小。
+ 本機次要索引中對應項目 (包括其索引鍵值及投影屬性) 的大小。

## 屬性
<a name="limits-attributes"></a>

### 每個項目的屬性名稱/值對
<a name="limits-attributes-name-value-pairs"></a>

每個項目的屬性累積大小必須符合 DynamoDB 項目大小上限 (400 KB)。

### 清單、映射或集合的值數目
<a name="limits-attributes-number"></a>

清單、映射或集合中值數目不限，只要含有值的項目符合 400 KB 項目大小限制。

### 屬性值
<a name="limits-attributes-values"></a>

如果屬性未用作為資料表或索引的索引鍵屬性，則允許空字串和二進制屬性值。集合、清單和映射類型中允許空字串和二進位值。屬性值不得為空的集合 (字串集合、數字集合或二進位集合)。不過，允許空白清單與映射。

### 巢狀屬性深度
<a name="limits-attributes-nested-depth"></a>

DynamoDB 支援巢狀屬性，最多 32 層深。

## 表達式參數
<a name="limits-expression-parameters"></a>

表達式參數包括 `ProjectionExpression`、`ConditionExpression`、`UpdateExpression` 和 `FilterExpression`。

### 長度
<a name="limits-expression-parameters-lengths"></a>

任何表達式字串的長度上限為 4 KB。例如，`ConditionExpression` `a=b` 的大小是 3 個位元組。

任何單一表達式屬性名稱或表達式屬性值的長度上限是 255 個位元組。例如，`#name` 是 5 個位元組；`:val` 是 4 個位元組。

表達式中所有替換變數的長度上限為 2 MB。這是所有 `ExpressionAttributeNames` 和 `ExpressionAttributeValues` 的長度加總。

### 運算子和運算元
<a name="limits-expression-parameters-operators"></a>

`UpdateExpression` 中允許的運算子或函數數目上限為 300。例如，*UpdateExpression* `SET a = :val1 + :val2 + :val3` 包含兩個 "`+`" 運算子。

`IN` 比較子的運算元數目上限為 100。

### 保留字
<a name="limits-expression-parameters-reserved-words"></a>

DynamoDB 不會阻止您使用與保留字衝突的名稱。(如需完整清單，請參閱「[DynamoDB 中的保留字](ReservedWords.md)」。)

但如果您在表達式參數中使用了保留字，您必須也要指定 `ExpressionAttributeNames`。如需詳細資訊，請參閱 [DynamoDB 中的表達式屬性名稱 (別名)](Expressions.ExpressionAttributeNames.md)。

## DynamoDB 交易
<a name="limits-dynamodb-transactions"></a>

DynamoDB 交易 API 操作有下列限制：
+ 一個交易不能包含超過 100 個不同的動作。
+ 一個交易不能包含超過 4 MB 的資料。
+ 交易中的任何兩個動作皆無法對相同資料表中的相同項目進行操作。例如，您不能在一個交易中，對相同項目同時進行 `ConditionCheck` 與 `Update`。
+ 交易無法在多個 AWS 帳戶或區域中的資料表上操作。
+ 交易操作僅在最初進行寫入的 AWS 區域中提供原子性、一致性、隔離性和耐久性 (ACID) 保證。全域資料表不支援跨區域交易。舉例來說，假設您在美國東部 (俄亥俄) 與美國西部 (奧勒岡) 區域中有具有複本的全域資料表，並且在美國東部 (維吉尼亞北部) 區域中執行 `TransactWriteItems` 操作。這麼做會使變更受到複寫，所以您可能會在美國西部 (奧勒岡) 區域中看到部分已完成交易。當變更已在來源區域遞交後，這些變更才會複寫至其他區域。

## DynamoDB Streams
<a name="constraints-dynamodb-streams"></a>

### DynamoDB Streams 中的碎片同時讀取
<a name="limits-dynamodb-streams-simultaneous-shard-readers"></a>

對於不是全域資料表的單一區域資料表，您最多可以設計兩個程序，以便同時讀取同一個 DynamoDB Streams 碎片。超過此限制會導致請求限流。對於全域資料表，我們建議您將同時讀取的數量限制為一個，以避免請求限流。

## DynamoDB Accelerator (DAX)
<a name="limits-dax"></a>

### AWS 區域可用性
<a name="limits-dax-regions"></a>

如需可使用 DAX AWS 的區域清單，請參閱《》中的 [DynamoDB Accelerator (DAX)](https://docs.aws.amazon.com/general/latest/gr/rande.html#ddb_dax_region)*AWS 一般參考*。

### 節點
<a name="limits-dax-nodes"></a>

DAX 叢集包含一個主節點和 0 到 10 個僅供讀取複本節點。

單一 AWS 區域中的節點總數 （每個 AWS 帳戶） 不得超過 50 個。

### 參數群組
<a name="limits-dax-parameter-groups"></a>

每個區域最多可以建立 20 個 DAX 參數群組。

### 子網路群組
<a name="limits-dax-subnet-groups"></a>

每個區域最多可以建立 50 個 DAX 子網路群組。

您可在子網路群組內定義最多 20 個子網路。

**重要**  
DAX 叢集最多支援 500 個 DynamoDB 資料表。一旦超過 500 個 DynamoDB 資料表，叢集可能在可用性和效能方面遭到降級。

## API 特定限制
<a name="limits-api"></a>

**`CreateTable`/`UpdateTable`/`DeleteTable`/`PutResourcePolicy`/`DeleteResourcePolicy`**  
一般而言，您最多可以同時以任何組合執行 500 個 [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html)、[UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html)、[DeleteTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteTable.html)、[PutResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutResourcePolicy.html) 和 [DeleteResourcePolicy](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteResourcePolicy.html) 請求。換言之，`CREATING`、`UPDATING` 或 `DELETING` 狀態的資料表總數不能超過 500。  
您可以跨資料表群組，提交每秒最多 2,500 個可變 (`CreateTable`、`DeleteTable`、`UpdateTable`、`PutResourcePolicy` 和 `DeleteResourcePolicy`) 控制平面 API 請求。不過，`PutResourcePolicy` 和 `DeleteResourcePolicy` 請求的個別限制較低。如需詳細資訊，請參閱下列 `PutResourcePolicy` 和 `DeleteResourcePolicy` 的配額詳細資料。  
包含資源型政策的 `CreateTable` 和 `PutResourcePolicy` 請求會作為兩個額外請求計入政策的每個 KB。例如，大小 5 KB 的政策的 `CreateTable` 或 `PutResourcePolicy` 請求將計為 11 個請求。`CreateTable` 請求 1 個，資源型政策 10 個 (2 x 5 KB)。同樣地，大小 20 KB 的政策將計為 41 個請求。`CreateTable` 請求 1 個，資源型政策 40 個 (2 x 20 KB)。    
`PutResourcePolicy`  
您可以在一組資料表中每秒提交最多 25 個 `PutResourcePolicy` API 請求。在針對個別資料表成功請求後，在接下來的 15 秒內不支援新的 `PutResourcePolicy` 請求。  
資源型政策文件的最大支援大小為 20 KB。DynamoDB 在依此限制計算政策大小時，會將空白字元納入計算。  
`DeleteResourcePolicy`  
您可以在一組資料表中每秒提交最多 50 個 `DeleteResourcePolicy` API 請求。在針對個別資料表的 `PutResourcePolicy` 請求成功後，在接下來的 15 秒內不支援任何 `DeleteResourcePolicy` 請求。

**`BatchGetItem`**  
單一 `BatchGetItem` 操作最多可擷取 100 個項目。所有擷取項目大小總計不能超過 16 MB。

**`BatchWriteItem`**  
單一 `BatchWriteItem` 操作最多可以包含 25 個 `PutItem` 或 `DeleteItem` 請求。所有寫入項目大小總計不能超過 16 MB。

**`DescribeStream`**  
您可以每秒最多呼叫 `DescribeStream` 10 次。

**`DescribeTableReplicaAutoScaling`**  
`DescribeTableReplicaAutoScaling` 方式僅支援每秒 10 個請求。

**`DescribeLimits`**  
`DescribeLimits` 應只能定期呼叫。如果每分鐘呼叫一次以上，您應該會收到限流錯誤。

**`DescribeContributorInsights`/`ListContributorInsights`/`UpdateContributorInsights`**  
`DescribeContributorInsights`、`ListContributorInsights` 和 `UpdateContributorInsights` 應只能定期呼叫。DynamoDB 於每個 API 支援最多每秒五個請求。

**`DescribeTable`/`ListTables`/`GetResourcePolicy`**  
您每秒最多能提交 2,500 個唯讀 (`DescribeTable`、`ListTables` 和 `GetResourcePolicy`) 控制平面 API 請求的組合。`GetResourcePolicy` API 的個別限制較低，為每秒 100 個請求。

**`DescribeTimeToLive`**  
`DescribeTimeToLive` 操作會限流為每秒 10 個讀取請求單位。如果您超過此限制，DynamoDB 會傳回 `ThrottlingException` 錯誤。

**`Query`**  
`Query` 的結果集受到每次呼叫為 1 MB 的限制。您可以使用查詢回應的 `LastEvaluatedKey` 擷取更多結果。

**`Scan`**  
`Scan` 的結果集受到每次呼叫為 1 MB 的限制。您可以使用掃描回應的 `LastEvaluatedKey` 擷取更多結果。

**`UpdateKinesisStreamingDestination`**  
執行 `UpdateKinesisStreamingDestination` 操作時，最多可以在 24 小時內 `ApproximateCreationDateTimePrecision` 將設為新值 3 次。

**`UpdateTableReplicaAutoScaling`**  
`UpdateTableReplicaAutoScaling` 方式僅支援每秒 10 個請求。

**`UpdateTableTimeToLive`**  
每小時針對每個指定資料表，此 `UpdateTableTimeToLive` 方法僅支援一個啟用或停用 `Time to Live (TTL)` 的請求。完整處理此變更最多可能需要一個小時。在此一小時期間內，對相同資料表的額外 `UpdateTimeToLive` 呼叫會導致 ValidationException 狀況。

## DynamoDB 靜態加密
<a name="limits-dynamodb-encryption"></a>

您最多可以在 AWS 擁有的金鑰 AWS 受管金鑰、 和客戶受管金鑰之間切換四次，從建立資料表開始，每個 24 小時時段的任何時候，以每個資料表為基礎。如果過去 6 小時內沒有變化，則允許額外變更。這會有效地將一天的變更次數增加到 8 次 (第一個 6 小時內 4 次變更，以及一天中後續每 6 小時 1 次的變更)。

即使上述配額已用盡，您也可以 AWS 擁有的金鑰 視需要切換加密金鑰以使用 。

除非您請求較高的數量，否則配額如下。若要請求提高服務配額，請參閱 [https://aws.amazon.com/support](https://aws.amazon.com/support)。