

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

# 為基於 Lambda 的應用程式選擇資料庫服務
<a name="ddb-rds-database-decision"></a>

許多無伺服器應用程式需要存放和擷取資料。 AWS 提供多種資料庫選項，可與 Lambda 函數搭配使用。最熱門的兩個選擇是 NoSQL 資料庫服務 Amazon DynamoDB，以及傳統的關聯式資料庫解決方案 Amazon RDS。下列各節介紹了這兩種服務與 Lambda 搭配使用時的主要差異，並協助您為無伺服器應用程式選擇合適的資料庫服務。

若要進一步了解 提供的其他資料庫服務 AWS，以及更普遍地了解其使用案例和權衡，請參閱[選擇 AWS 資料庫服務](https://docs.aws.amazon.com/decision-guides/latest/databases-on-aws-how-to-choose/databases-on-aws-how-to-choose.html)。所有 AWS 資料庫服務都與 Lambda 相容，但並非所有資料庫服務都符合您的特定使用案例。

## 選取與 Lambda 搭配使用的資料庫服務時，您有哪些選擇？
<a name="w2aac15c59d103c21b9"></a>

AWS 提供多個資料庫服務。對於無伺服器應用程式，最熱門的兩個選擇是 DynamoDB 和 Amazon RDS。
+ **DynamoDB** 是一種全受管 NoSQL 資料庫服務，針對無伺服器應用程式進行了最佳化。該服務可在任何規模下提供無縫擴展且穩定的個位數毫秒級效能。
+ **Amazon RDS** 是一種受管關聯式資料庫服務，支援包括 MySQL 與 PostgreSQL 在內的多種資料庫引擎。該服務透過受管基礎結構提供熟悉的 SQL 功能。

## 您已知道自己需求時的建議
<a name="w2aac15c59d103c21c11"></a>

如果您已經清楚自己的需求，以下是基本建議：

對於需要穩定低延遲效能、自動擴展且不涉及複雜聯結或交易的無伺服器應用程式，建議選擇 [DynamoDB](with-ddb.md)。由於其無伺服器特性，該服務特別適合基於 Lambda 的應用程式。

若需複雜的 SQL 查詢、聯結操作，或是現有應用程式已使用關聯式資料庫時，[Amazon RDS](services-rds.md) 是更佳選擇。但請注意，將 Lambda 函式連線至 Amazon RDS 需要額外的組態，並且可能會影響冷啟動時間。

## 選取資料庫服務時應考量的事項
<a name="w2aac15c59d103c21c13"></a>

為 Lambda 應用程式選取 DynamoDB 或是 Amazon RDS 時，建議考量下列因素：
+ 連線管理與冷啟動
+ 資料存取模式
+ 查詢複雜性
+ 資料一致性需求
+ 擴展特性
+ 成本模型

透過了解這些因素，您可以選取最符合自身特定使用案例需求的選項。

### 連線管理與冷啟動
<a name="w2aac15c59d103c21c13b9b1"></a>
+ DynamoDB 對所有操作均使用 HTTP API。Lambda 函式無需維護連線即可發出即時請求，具備更佳的冷啟動效能。每個請求都會使用 AWS 登入資料進行身分驗證，而不會產生連線額外負荷。
+ 由於 Amazon RDS 使用的是傳統資料庫連線，因此需要管理連線集區。這可能會影響冷啟動，因為新的 Lambda 執行個體需要建立連線。您需實作連線集區策略，並且可能要使用 [Amazon RDS Proxy](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.html) 來有效管理連線。請注意，使用 Amazon RDS Proxy 會額外產生費用。

### 資料存取模式
<a name="w2aac15c59d103c21c13b9b3"></a>
+ DynamoDB 最適用於已知的存取模式和單一資料表設計。其非常適合需要根據主索引鍵或次要索引，以穩定低延遲方式存取資料的 Lambda 應用程式。
+ Amazon RDS 具備彈性，能因應複雜查詢與多變的存取模式。當您的 Lambda 函式需要跨多個資料表執行獨特的客製化查詢或複雜的跨表聯結時，其適用性更佳。

### 查詢複雜性
<a name="w2aac15c59d103c21c13b9b5"></a>
+ DynamoDB 在基於鍵值的簡易操作及預先定義的存取模式方面表現出色。複雜的查詢必須圍繞索引結構進行設計，並且必須在應用程式程式碼中處理聯結。
+ Amazon RDS 支援包含聯結、子查詢與彙總運算的複雜 SQL 查詢。當需要複雜的資料操作時，此優勢可以簡化您的 Lambda 函式程式碼。

### 資料一致性需求
<a name="w2aac15c59d103c21c13b9b7"></a>
+ DynamoDB 提供最終一致性與強一致性選項，其中強一致性適用於單一項目讀取。雖然支援交易功能，但存在部分限制。
+ Amazon RDS 提供完整的原子性、一致性、隔離性與持久性 (ACID) 合規保障，支援複雜交易。如果您的 Lambda 函式需要複雜的交易或跨多筆記錄的強一致性，Amazon RDS 可能更加合適。

### 擴展特性
<a name="w2aac15c59d103c21c13b9b9"></a>
+ DynamoDB 會根據您的工作負載自動擴展。其無需預先佈建，即可處理 Lambda 函式中的流量突增情況。您可以使用隨需容量模式，僅需為所使用的容量付費，完全符合 Lambda 的擴展模型。
+ Amazon RDS 會根據您選擇的執行個體規格，提供固定的容量。如果多個 Lambda 函數嘗試同時連線，您可能會超過連線配額。您需謹慎管理連線集區，並可能要實作重試邏輯。

### 成本模型
<a name="w2aac15c59d103c21c13b9c11"></a>
+ DynamoDB 的定價模式與無伺服器應用程式高度契合。若使用隨需容量，您只需為 Lambda 函式執行的實際讀取與寫入作業付費。閒置時間不收取任何費用。
+ Amazon RDS 會針對執行中的執行個體收費，無論用量如何。對於無伺服器應用程式中典型的零星工作負載，這可能較不具成本效益。不過，對於輸送量高且用量穩定的工作負載，其可能更經濟實惠。

## 開始使用所選資料庫服務
<a name="w2aac15c59d103c21c15"></a>

您已了解在 DynamoDB 和 Amazon RDS 之間進行選擇的標準，以及二者之間的主要差異。接下來，您可以選取最符合自身需求的選項，並使用下列資源來協助自己開始使用所選的資料庫服務。

------
#### [ DynamoDB ]

**透過下列資源開始使用 DynamoDB**
+ 如需 DynamoDB 服務的簡介，請參閱 *Amazon DynamoDB Developer Guide* 中的 [What is DynamoDB?](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) 部分。
+ 請依照[搭配 API Gateway 使用 Lambda](services-apigateway-tutorial.md) 教學課程，了解如何透過 Lambda 函式在回應 API 請求時，對 DynamoDB 資料表執行 CRUD 操作的範例。
+ 請參閱《Amazon [ DynamoDB 開發人員指南》中的使用 DynamoDB 和 AWS SDKs 進行程式設計](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.html)，以進一步了解如何使用其中一個 SDK 從 Lambda 函數內存取 AWS SDKs DynamoDB。 * DynamoDB * 

------
#### [ Amazon RDS ]

**透過下列資源開始使用 Amazon RDS**
+ 如需 Amazon RDS 服務簡介，請參閱 *Amazon Relational Database Service User Guide* 中的 [What is Amazon Relational Database Service (Amazon RDS)?](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 部分。
+ 請依照 *Amazon Relational Database Service User Guide* 中的教學課程 [Using a Lambda function to access an Amazon RDS database](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-lambda-tutorial.html) 執行操作。
+ 請參閱 [AWS Lambda 搭配 Amazon RDS 使用](services-rds.md)，了解有關搭配 Amazon RDS 使用 Lambda 的詳細資訊。

------