

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

# DynamoDB 概觀
<a name="overview"></a>

Amazon DynamoDB 是 NoSQL 金鑰值和文件資料庫，可提供快速且可預測的效能，並具有無縫的可擴展性。它是一個全受管、多區域、多作用中和耐用的資料庫。(DynamoDB 中的全域資料表功能會自動將一個 AWS 區域中所做的修改同步到所有其他選取的區域，以提供多活動支援。) DynamoDB 具有內建的安全功能、備份和還原選項，以及適用於網際網路規模應用程式的記憶體內快取。

NoSQL 資料庫的無結構描述性質有助於減少將資料庫 （讀取結構描述） 變更推送至生產環境所需的時間和程序，進而實現快速應用程式開發 (RAD)。DynamoDB 等 NoSQL 資料庫專為高效能讀取/寫入操作而建置。

## 功能和優勢
<a name="features"></a>

DynamoDB 提供下列功能和優點：
+ 沒有要管理的伺服器 – DynamoDB 是完全受管的 NoSQL 資料庫服務，這表示它不涉及任何伺服器維護開銷。
+ 無結構描述 – DynamoDB 支援快速應用程式開發和部署。
+ 大規模效能 – DynamoDB 提供快速且可預測的效能，並具有無縫的可擴展性。
+ ACID 支援 – DynamoDB 支援原子性、一致性、隔離和耐久性 (ACID) 交易，可協助您維持資料正確性。
+ 高可用性和耐久性 – 您的資料存放在固態磁碟 (SSDs) 上，並自動複寫到 AWS 區域中的多個可用區域，提供內建的高可用性和資料耐久性。
+ 自動擴展 – DynamoDB 使用 AWS Application Auto Scaling 服務動態調整佈建的輸送量容量，以回應流量模式。
+ 彈性的定價選項 – DynamoDB 提供兩種容量模式和特定的計費選項：隨需容量模式和佈建容量模式。
+ Point-in-time復原 – 您可以使用point-in-time復原來啟用連續備份，以協助保護您的資料表免於意外寫入或刪除操作，並將資料表還原至過去 35 天內的任何時間點。
+ 存留時間 (TTL) – 您可以在指定的持續時間後自動刪除 DynamoDB 資料表中的項目。
+ 全域資料表 – 您可以在跨 AWS 區域部署多個複本，而不必建置自己的複寫解決方案。
+ 全域次要索引 – 您可以使用與資料表本身的分割區和排序索引鍵不同的分割區和排序索引鍵來查詢 DynamoDB 資料表。
+ DAX – DynamoDB Accelerator (DAX) 快取服務為讀取操作提供毫秒以下的回應時間。
+ DynamoDB Streams – 此功能提供日誌中項目層級修改的時間順序，以支援 DynamoDB 資料表變更的即時追蹤和通知。

如需這些優點的詳細資訊，請參閱 AWS 網站上的 [Amazon DynamoDB 功能](https://aws.amazon.com/dynamodb/features/)。以下各節討論一些與從 RDBMS 遷移到 DynamoDB 進行資料庫工作負載現代化相關的功能。

### 分割區索引鍵
<a name="features-partition-keys"></a>

DynamoDB 是無結構描述的，因此不需要定義資料表的所有屬性。分割區索引鍵屬性是必要的，排序索引鍵是選用的。其餘屬性是任意的，而且每個項目可能有所不同。我們建議您選擇具有高基數的分割區索引鍵，讓經常存取的項目不會位於相同的分割區。此做法可協助您避免資料存取不平衡和熱分割區。如需詳細資訊，請參閱 DynamoDB 文件中的[有效設計和使用分割區金鑰的最佳實務](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-design.html)。

### 索引
<a name="features-indexes"></a>

索引可讓您存取替代查詢模式，並加快查詢速度。無論您使用的是關聯式資料庫還是 DynamoDB，您都應該謹慎建立索引。每當寫入操作發生在資料表上時，該資料表的所有索引都必須更新。

全域次要索引包含從基礎資料表中選取的屬性，但它們是由與資料表本身的主索引鍵不同的主索引鍵組織。在 DynamoDB 中，全域次要索引預設為稀疏。也就是說，排序索引鍵是選用的，不會出現在每個資料表項目中。若要利用此功能，您可以建立僅存放和投影所需屬性的全域次要索引。DynamoDB 資料表上最多可以有 20 個全域次要索引。如需此功能的詳細資訊，請參閱 [ DynamoDB 文件中的在 DynamoDB 中使用全域次要索引](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html)。 DynamoDB 

### 存留時間
<a name="features-ttl"></a>

您可以在 DynamoDB 資料表上設定存留時間 (TTL) 屬性，以定義每個項目 （記錄） 時間戳記，以指定何時不再需要項目。在指定的時間戳記後不久，DynamoDB 會從資料表中刪除項目，而不會消耗任何額外的容量單位。如需此功能的詳細資訊，請參閱 [ DynamoDB 文件中的使用 DynamoDB 存留時間過期項目](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html)。 DynamoDB 

### 定價模型
<a name="features-pricing"></a>

DynamoDB 提供兩種定價模型供您選擇：佈建容量和隨需容量。您選擇的定價模型取決於您的預測工作負載。


****  

| **定價模型** | **工作負載類型** | **成本** | **讀取/寫入輸送量** | 
| --- | --- | --- | --- | 
| 佈建的容量 | 可預測 | 較低 | 您可以指定讀取容量單位 (RCUs) 和寫入容量單位 (WCUs) 的每秒讀取/寫入操作數量。例如：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/modernization-rdbms-dynamodb/overview.html) 您可以啟用自動擴展來調整容量以回應流量變更。 | 
| 隨需容量 | 動態 | 較高 | 您未指定輸送量需求。DynamoDB 會自動容納您的工作負載。 您需要為應用程式在資料表上執行的讀取和寫入支付讀取請求單位和寫入請求單位的費用。例如：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/modernization-rdbms-dynamodb/overview.html) | 

如需這兩種模型的詳細資訊，請參閱 DynamoDB 文件中的[讀取/寫入容量模式](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html)。

### 交易
<a name="features-transactions"></a>

DynamoDB 支援單一 AWS 帳戶和 AWS 區域內一或多個資料表的原子性、一致性、隔離和耐久性 (ACID) 交易。

若要管理資料表內和跨資料表對多個項目的變更，您可以使用 DynamoDB 交易`TransactWriteItems`和 `TransactGetItems` APIs。
+ `TransactWriteItems` 是一種批次操作，其中包含具有一或多個 `PutItem`、 `UpdateItem`和 `DeleteItem`動作的寫入集。 `TransactWriteItems` 可以選擇性地檢查在進行更新之前必須滿足的先決條件。這些條件可能涉及與寫入集中相同的項目，或不同的項目。如果不符合任何條件，交易會遭到拒絕。
+ `TransactGetItems` 是一種批次操作，其中包含具有一或多個`GetItem`動作的讀取集。如果您對屬於作用中寫入交易的項目發出`TransactGetItems`請求，讀取交易會取消。若要取得先前遞交的值，您可以使用標準讀取操作。

如需這些 APIs的詳細資訊，請參閱 [ DynamoDB 文件中的 Amazon DynamoDB 交易：其運作方式](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html)。 DynamoDB 

**限制**

DynamoDB 交易 API 操作有下列限制：
+ 交易無法更新超過 100 個唯一項目。
+ 一個交易不能包含超過 4 MB 的資料。
+ 交易中的任何兩個動作皆無法對相同資料表中的相同項目進行操作。例如，您無法同時對單一交易中的相同項目執行 `ConditionCheck`和 `Update`動作。
+ 交易無法在多個 AWS 帳戶或區域中的資料表上操作。
+ 交易操作僅提供原始執行寫入操作的 AWS 區域中的 ACID 保證。全域資料表不支援跨區域交易。
+ 物件持久性模型不支援交易。若要使用交易功能，您必須使用 [DynamoDB 低階 API](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.LowLevelAPI.html) 存取資料庫和資料表。

### 大型元件
<a name="features-large-components"></a>

DynamoDB 每個項目的大小限制為 400 KB。此限制同時包含屬性名稱 （具有 UTF-8 編碼的二進位長度） 和屬性值 （再次包含二進位長度）。屬性名稱會計入大小限制。例如，請考慮具有兩個屬性的項目：一個名為 "country-code" 且值為 "IN" 的屬性和另一個名為 "country-phone-prefix" 且值為 "91" 的屬性。該項目的總大小為 36 個位元組。

**解決方法**

如果項目與許多屬性和屬性或大量資料相關聯，其大小可能會超過 400 KB。在此情況下，您可以將序列化項目以 JSON 格式存放在 Amazon Simple Storage Service (Amazon S3) 中，並將 Amazon S3 位置儲存為項目中的屬性 (`S3Location`)。該項目的讀取和寫入操作會擷取 S3 物件並更新 JSON 字串。主索引鍵、排序索引鍵和本機索引和全域次要索引使用的所有屬性，應與 `S3Location` 屬性一起存放在資料表中。這需要在應用程式中使用其他邏輯 （資料存取層） 來檢查`S3Location`屬性，並從 Amazon S3 擷取完整的項目資料。

### 備份和還原
<a name="features-backup"></a>

備份和還原支援是任何資料庫中常見的功能期望。DynamoDB 原生支援相同帳戶中的備份和還原操作，但您可以使用其他選項或程序跨多個帳戶執行資料表複製。這些程序不會使用任何讀取/寫入容量單位。如需詳細資訊，請參閱 指南中的 [Amazon DynamoDB 跨帳戶完整資料表複製選項](https://docs.aws.amazon.com/prescriptive-guidance/latest/dynamodb-full-table-copy-options/welcome.html)，該指南位於 AWS 規範性指導網站。

**限制**

DynamoDB 目前支援使用 進行跨帳戶備份和還原[AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)，但該帳戶必須屬於同一個組織。您可以採用下列其中一個解決方案來解決此限制：
+ 使用 [AWS SDK](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.html)，以您選擇的程式設計語言 （例如 .NET、Java 或 Python) 自訂實作。您可以從帳戶 A 的來源資料表掃描項目，並將項目 (`BatchWrite`) 寫入帳戶 B 的資料表。您可以在伺服器、內部部署電腦或 AWS Lambda （如果資料庫很小，且指令碼執行時間不到 15 分鐘） 上執行此程式碼。如需詳細資訊，請參閱 AWS Prescriptive Guidance [網站上的使用自訂實作跨帳戶複製 Amazon DynamoDB 資料表](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/copy-amazon-dynamodb-tables-across-accounts-using-a-custom-implementation.html)的模式。
+ 使用 AWS Glue。如需有關此選項的資訊，請參閱 指南中的 [Amazon DynamoDB 跨帳戶完整資料表複製選項](https://docs.aws.amazon.com/prescriptive-guidance/latest/dynamodb-full-table-copy-options/welcome.html)，該指南位於 AWS 規範性指導網站。

## 語言和 SDK 支援
<a name="language-sdk"></a>

[AWS SDKs](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.html)提供簡化的程式設計界面。 AWS JavaScript

您可以從三種模式中選擇，使用 AWS SDK：物件持久性模型 （高階界面）、文件界面和低階界面來存取 DynamoDB 資料表。如需詳細資訊，請參閱本指南稍後的[存取模式](access-patterns.md)。