

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

# 在關聯式 (SQL) 資料庫與 NoSQL 之間進行取捨
<a name="SQLtoNoSQL.WhyDynamoDB"></a>

當今應用程式的要求比以往更加嚴苛。例如，一款線上遊戲剛開始可能只有少數使用者和極少量的資料。但是，如果遊戲成功了，該遊戲可能容易超過基礎資料庫管理系統的資源。Web 應用程式常擁有數百、數千，甚至數百萬名並行使用者，並且每天產生數 TB 或以上的新資料。這種應用程式的資料庫每秒必須處理成千上萬筆讀取和寫入。

Amazon DynamoDB 正適合這類工作負載。身為開發人員，您可以從小規模開始，並隨著您的應用程式變得愈來愈熱門而逐漸增加使用率。DynamoDB 可無縫擴展，能夠處理極大量的資料和使用者。

如需傳統關聯式資料庫建模以及如何針對 DynamoDB 進行調整的詳細資訊，請參閱 [在 DynamoDB 中製作關聯式資料模型的最佳實務](bp-relational-modeling.md)。

下表顯示關聯式資料庫管理系統 (RDBMS) 與 DynamoDB 之間的一些概要性差異。


****  

| 特性 | 關聯式資料庫管理系統 (RDBMS) | Amazon DynamoDB | 
| --- | --- | --- | 
| 最佳工作負載 | 臨機操作查詢、資料倉儲、OLAP (線上分析處理)。 | Web 規模應用程式，包括社群網路、遊戲、媒體共用及物聯網 (IoT)。 | 
| 資料模型 | 關聯式模型需要定義良好的結構描述，所有資料皆會標準化成資料表、資料列及資料行。此外，資料表、資料行、索引和其他資料庫元素間也都會定義所有關聯性。 | DynamoDB 不具結構描述。每個資料表都必須具備一個主索引鍵，以唯一識別各個資料項目，但其他非索引鍵屬性則沒有類似的限制條件。DynamoDB 可以管理結構化或半結構化資料，包括 JSON 文件。 | 
| 資料存取 | SQL 是存放和擷取資料的標準。關聯式資料庫提供豐富的工具組，可簡化資料庫驅動之應用程式的開發，但這些工具全都使用 SQL。 | 您可以使用 AWS 管理主控台、 AWS CLI或 NoSQL WorkBench 來使用 DynamoDB，並執行臨機操作。SQL 相容查詢語言 [PartiQL](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html) 讓您能在 DynamoDB 中選取、插入、更新和刪除資料。應用程式可以使用 AWS 軟體開發套件 (SDKs)，使用以物件為基礎、以文件為中心或低階介面來使用 DynamoDB。 | 
| 效能 | 關聯式資料庫經儲存最佳化，因此效能一般取決於磁碟子系統。開發人員和資料庫管理員必須最佳化查詢、索引及資料表結構，才能達到尖峰效能。 | DynamoDB 經運算最佳化，因此效能主要是基礎硬體和網路延遲的功能。作為受管服務，DynamoDB 會將您和您的應用程式與這些實作細節隔開，讓您可專心設計及建置穩固且高效能的應用程式。 | 
| 擴展 | 使用更快的硬體可以更容易地向上擴展。資料庫資料表也能在分散式系統中橫跨多部主機，但這需要額外投資。關聯式資料庫在檔案的數目和大小方面皆具有大小上限，而對最大擴展能力有所限制。 | DynamoDB 專為使用分散式硬體叢集橫向擴充而設計。這項設計可讓輸送量增加，卻不會增加延遲。客戶可指定其輸送量需求，DynamoDB 便會配置充足的資源以符合這些需求。每個資料表的項目數目沒有上限，該資料表的總大小也沒有上限。 | 