

# PERF04-BP01 了解資料特性
<a name="perf_right_database_solution_understand_char"></a>

 選擇您的資料管理解決方案，以最佳方式符合工作負載資料集的特性、存取模式和要求。在選取和實作資料管理解決方案時，您必須確保查詢、擴展和儲存特性支援工作負載資料要求。了解各種資料庫選項如何符合您的資料模型，以及哪些組態選項最適合您的使用案例。  

 AWS 提供眾多資料庫引擎，包括關聯式、鍵值、文件、記憶體內、圖形、時間序列和總帳資料庫。每個資料管理解決方案都有選項和組態，可供您支援使用案例和資料模型。您的工作負載能夠根據資料特性使用數個不同的資料庫解決方案。藉由選取特定問題的最佳資料庫解決方案，您可以擺脫整合型資料庫，這些資料庫採用一體適用的方法，但此方法有限制性，並專注於管理資料以符合客戶的需求。 

 **預期成果：** 工作負載資料特性會加以記錄，並提供足夠的詳細資訊，以利於選取和設定支援的資料庫解決方案，而且這些特性可讓您洞悉潛在的替代方案。 

 **常用的反模式：** 
+  未考慮將大型資料集分割成具有類似特性之較小資料集合的方法，這會導致錯失使用更多專用資料庫，更好地符合資料和成長特性的機會。 
+  未預先識別資料存取模式，這會導致稍後進行昂貴且複雜的修改。 
+  使用不會視需要快速擴展的資料儲存策略來限制成長 
+  為所有工作負載選擇一個資料庫類型和廠商。 
+  堅持使用某個資料庫解決方案，因為對某種特定類型的資料庫解決方案具有內部經驗和知識。 
+  保留資料庫解決方案，因為它在內部部署環境中運作良好。 

 **建立此最佳實務的優勢：** 熟悉所有 AWS 資料庫解決方案，以便您可以判斷適合各種工作負載的正確資料庫解決方案。為工作負載選取適當的資料庫解決方案之後，您可以快速試驗每個資料庫產品，以判斷它們是否能繼續滿足您的工作負載需求。 

 **若未建立此最佳實務，暴露的風險等級：** 高 
+  可能未識別潛在的節省成本。 
+  可能無法將資料保護到所需的等級。 
+  資料存取和儲存效能可能不是最佳的。 

## 實作指引
<a name="implementation-guidance"></a>

 定義工作負載的資料特性和存取模式。檢閱所有可用的資料庫解決方案來識別哪個解決方案支援您的資料要求。在特定工作負載內，可能選取多個資料庫。評估每個服務或服務群組，並個別存取它們。如果針對部分或全部資料識別了潛在的替代資料管理解決方案，請嘗試可能解開成本、安全性、效能和可靠性優勢的替代實作。如果採用新的資料管理方式，請更新現有文件。 


|  **類型**  |  **AWS 服務**  |  **重要特性**  |  **常見的使用案例**  | 
| --- | --- | --- | --- | 
|  關聯式  |  Amazon RDS、Amazon Aurora  |  參考完整性、ACID 交易、寫入時的結構描述  |  ERP、CRM、商務現成軟體  | 
|  鍵值  |  Amazon DynamoDB  |  高輸送量、低延遲、近乎無限可擴展性  |  購物車 (商務)、產品型錄、聊天應用程式  | 
|  文件  |  Amazon DocumentDB  |  儲存 JSON 文件並查詢任何屬性  |  內容管理 (CMS)、客戶設定檔、行動應用程式  | 
|  記憶體內  |  Amazon ElastiCache、Amazon MemoryDB  |  微秒延遲  |  快取、遊戲排行榜  | 
|  圖形  |  Amazon Neptune  |  高度關聯式資料，其中資料之間的關係有意義  |  社交網路、個人化引擎、詐騙偵測  | 
|  時間序列  |  Amazon Timestream  |  其中主要維度為時間的資料  |  DevOps、IoT、監控  | 
|  寬欄  |  Amazon Keyspaces  |  Cassandra 工作負載。  |  產業設備維護、路由優化  | 
|  總帳  |  Amazon QLDB  |  不可變且可加密驗證的變更總帳  |  記錄、醫療保健、供應鏈、金融機構的系統  | 

 **實作步驟** 

1.  如何建構資料？(例如，非結構化、鍵值、半結構化、關聯式) 

   1.  如果資料是非結構化，請考慮物件存放區，例如 [Amazon S3](https://aws.amazon.com/products/storage/data-lake-storage/) 或 NoSQL 資料庫，例如 [Amazon DocumentDB。](https://aws.amazon.com/documentdb/) 

   1.  若為鍵值資料，請考慮 [DynamoDB](https://aws.amazon.com/documentdb/)， [ElastiCache for Redis](https://aws.amazon.com/elasticache/redis/) 或 [MemoryDB。](https://aws.amazon.com/memorydb/) 

   1.  如果資料具有關聯式結構，需要哪個層級的參考完整性。 

      1.  針對外部索引鍵限制，關聯式資料庫 (例如 [Amazon RDS](https://aws.amazon.com/rds/) 和 [Aurora](https://aws.amazon.com/rds/aurora/) ) 可以提供此層級的完整性。 

      1.  通常，在 NoSQL 資料模型內，您會將資料去正規化為單一文件或文件集合，以便可在單一請求中擷取，而不是跨文件或資料表聯結。  

1.  需要 ACID (單元性、一致性、隔離行為、持續性) 合規嗎？ 

   1.  如果需要與關聯式資料庫相關聯的 ACID 屬性，請考慮關聯式資料庫，例如 [Amazon RDS](https://aws.amazon.com/rds/) 和 [Aurora。](https://aws.amazon.com/rds/aurora/) 

1.  需要哪個一致性模式？ 

   1.  如果您的應用程式可以容忍最終一致性，請考慮 NoSQL 實作。檢閱其他特性以協助選擇哪個 [NoSQL 資料庫](https://aws.amazon.com/nosql/) 最適用。 

   1.  如果需要高度一致性，您可以使用高度一致性讀取，搭配 [DynamoDB](https://aws.amazon.com/documentdb/) 或關聯式資料庫，例如 [Amazon RDS](https://aws.amazon.com/rds/)。 

1.  必須支援哪些查詢和結果格式？(例如，SQL、CSV、Parque、Avro、JSON 等) 

1.  存在哪些資料類型、欄位大小和整體數量？(例如，文字、數字、空間、已計算的時間序列、二進位或 Blob 文件) 

1.  儲存要求如何隨時間變更？ 這如何影響可擴展性？ 

   1.  無伺服器資料庫，例如 [DynamoDB](https://aws.amazon.com/documentdb/) 和 [Amazon Quantum Ledger Database](https://aws.amazon.com/qldb/) ，將自動擴增至近乎無限的儲存。 

   1.  關聯式資料庫在佈建的儲存上具有上限，一旦達到這些限制，通常必須透過碎片化這類機制進行水平分割。 

1.  讀取查詢與寫入查詢的比例是多少？ 快取可能改善效能嗎？ 

   1.  包含大量讀取作業的工作負載可以從快取層中受益，這可以是 [ElastiCache](https://aws.amazon.com/elasticache/) 或 [DAX](https://aws.amazon.com/dynamodb/dax/) 如果資料庫是 DynamoDB。 

   1.  讀取也可以卸載至具有關聯式資料庫的讀取複本，例如 [Amazon RDS](https://aws.amazon.com/rds/)。 

1.  儲存和修改 (OLTP - 線上交易處理) 或擷取和報告 (OLAP - 線上分析處理) 是否具有更高的優先順序？ 

   1.  如需高輸送量交易處理，請考慮 NoSQL 資料庫，例如 DynamoDB 或 Amazon DocumentDB。 

   1.  如需分析查詢，請考慮單欄式資料庫，例如 [Amazon Redshift](https://aws.amazon.com/redshift/) 或將資料匯出至 Amazon S3 並執行分析，方法為使用 [Athena](https://aws.amazon.com/athena/) 或 [QuickSight。](https://aws.amazon.com/quicksight/) 

1.  此資料的敏感程度，以及其需要哪個等級的保護和加密？ 

   1.  所有 Amazon RDS 和 Aurora 都支援使用 AWS KMS 進行靜態資料加密。Microsoft SQL Server 和 Oracle 也會在使用 Amazon RDS 時支援原生透明資料加密 (TDE)。 

   1.  針對 DynamoDB，您可以使用更精細的存取控制，搭配 [IAM](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-overview.html) 控制誰可以存取金鑰等級的哪些資料。 

1.  資料需要哪個等級的耐久性？ 

   1.  Aurora 會自動跨區域內的三個可用區域複寫您的資料，這表示您的資料可以耐久，因而資料遺失的機會降低。 

   1.  DynamoDB 會自動跨多個可用區域進行複寫，這會提供高可用性和資料耐久性。 

   1.  Amazon S3 提供 99.999999999% 耐久性。許多資料庫服務 (例如 Amazon RDS 和 DynamoDB) 支援將資料匯出至 Amazon S3，進行長期保留和封存。 

1.  復原時間目標 (RTO) [或復原點目標 (RPO)](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/plan-for-disaster-recovery-dr.html) 要求是否影響解決方案？ 

   1.  Amazon RDS、Aurora、DynamoDB、Amazon DocumentDB 和 Neptune 全都支援時間點復原，以及隨需備份和還原。  

   1.  針對高可用性要求，可以全域複寫 DynamoDB 資料格，方法為使用 [全域資料表](https://aws.amazon.com/dynamodb/global-tables/) 功能，而且可以使用全域資料庫功能。跨多個區域複寫 Aurora 叢集。此外，還可以使用跨區域複寫，跨 AWS 區域 複寫 S3 儲存貯體。  

1.  是否希望擺脫商務資料庫引擎/授權成本？ 

   1.  考慮開放原始碼引擎，例如 Amazon RDS 或 Aurora 上的 PostgreSQL 和 MySQL 

   1.  利用 [AWS DMS](https://aws.amazon.com/dms/) 和 [AWS SCT](https://aws.amazon.com/dms/schema-conversion-tool/) 從商務資料庫引擎遷移至開放原始碼 

1.  對資料庫的操作期望是什麼？ 移至受管服務是否為主要問題？ 

   1.  利用 Amazon RDS 而非 Amazon EC2 和 DynamoDB，或利用 Amazon DocumentDB 而非自行託管 NoSQL 資料庫，可以降低營運負擔。 

1.  目前如何存取資料庫？ 它是否只是應用程式存取，或是否有商業智能 (BI) 使用者和其他連網的現成應用程式？ 

   1.  如果您依賴外部工具，則可能必須維護與其所支援資料庫的相容性。Amazon RDS 完全與其支援的不同引擎版本相容，包括 Microsoft SQL Server、Oracle、MySQL 和 PostgreSQL。 

1.  下列是潛在資料管理服務的清單，以及最能在哪裡使用這些服務： 

   1.  關聯式資料庫會使用預先定義的結構描述和它們之間的關係來儲存資料。這些資料庫旨在支援 ACID (單元性、一致性、隔離行為、持續性) 交易，並維護參考完整性和強大的資料一致性。許多傳統應用程式、企業資源規劃 (ERP)、客戶關係管理 (CRM) 和電子商務都使用關聯式資料庫來儲存資料。您可以在 Amazon EC2 上執行許多資料庫引擎，或選擇其中一種 AWS 受管  [資料庫服務](https://aws.amazon.com/products/databases/)： [Amazon Aurora](https://aws.amazon.com/rds/aurora)、 [Amazon RDS](https://aws.amazon.com/rds)和 [Amazon Redshift](https://aws.amazon.com/redshift)。 

   1.  鍵值資料庫已針對常見的存取模式進行優化，通常用於儲存和擷取大量資料。即使有極大量的並行請求，這些資料庫也能提供快速回應。高流量 Web 應用程式、電子商務系統和遊戲應用程式是鍵值資料庫的典型使用案例。在 AWS 中，您可以利用 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)，這是一個全受管、多區域、多主機、耐用的資料庫，針對網際網路規模的應用程式提供內建安全性、備份和還原以及記憶體內快取。 

   1.  記憶體內資料庫適用於需要即時存取資料、最低延遲和最高輸送量的應用程式。透過將資料直接儲存在記憶體中，這些資料庫可為應用程式提供微秒延遲，因為毫秒延遲不足以因應其需求。您可以將記憶體內資料庫用於應用程式快取、工作階段管理、遊戲排行榜和地理空間應用程式。 [Amazon ElastiCache](https://aws.amazon.com/elasticache/) 是全受管的記憶體內資料存放區，與 [Redis](https://aws.amazon.com/elasticache/redis/) 或 [Memcached](https://aws.amazon.com/elasticache/memcached)。若應用程式也需要更高的耐久性要求， [Amazon MemoryDB for Redis](https://aws.amazon.com/memorydb/) 會將其結合為耐久的記憶體內資料庫服務，以取得超快效能。 

   1.  文件資料庫旨在將半結構化資料儲存為 JSON 類文件。這些資料庫可協助開發人員快速建置和更新應用程式，例如內容管理、目錄和使用者設定檔。 [Amazon DocumentDB](https://aws.amazon.com/documentdb/) 是快速、可擴展、高度可用且全受管的文件資料庫服務，可支援 MongoDB 工作負載。 

   1.  寬欄存放區是一種 NoSQL 資料庫類型。它使用表格、列和欄，但與關聯式資料庫不同，在同一個表格中，欄的名稱和格式會因列而異。您通常會在大規模工業應用程式中看到寬欄存放區，用於設備維護、叢集管理和路由優化。 [Amazon Keyspaces (適用於 Apache Cassandra)](https://aws.amazon.com/mcs/) 是寬欄的可擴展、高度可用且受管的 Apache Cassandra 相容資料庫服務。 

   1.  圖形資料庫適用此類應用程式：必須在高度連線圖形資料集之間，大規模導覽和查詢數百萬個關係，並且只有毫秒延遲。許多公司使用圖形資料庫進行詐騙偵測、社交聯網和推薦引擎。 [Amazon Neptune](https://aws.amazon.com/neptune/) 是快速、可靠、全受管的圖形資料庫服務，可讓您輕鬆建立和執行搭配高度連線資料集使用的應用程式。 

   1.  時間序列資料庫可有效率地從隨時間變化的資料收集、合成和衍生洞見。IoT 應用程式、DevOps 和工業遙測可以利用時間序列資料庫。 [Amazon Timestream](https://aws.amazon.com/timestream/) 是適用於 IoT 和操作應用程式的快速、可擴展、全受管時間序列資料庫服務，每天可輕鬆儲存和分析數兆個事件。 

   1.  總帳資料庫提供集中化且受信任的機構，為每個應用程式維護可擴展、不可變且以密碼編譯方式驗證的交易記錄。我們會看到用於記錄、供應鏈、註冊甚至銀行交易系統的總帳資料庫。 [Amazon Quantum Ledger Database (Amazon QLDB)](https://aws.amazon.com/qldb/) 是全受管總帳資料庫，提供透明、不可變且可加密驗證的交易日誌，由集中式信任的授權單位所擁有。Amazon QLDB 會追蹤每個應用程式資料變更，並維護一段時間內完整且可驗證的變更歷史記錄。 

 **實作計劃的工作量： **如果工作負載從某個資料庫解決方案移至另一個資料庫解決方案，則有一個 *高* 工作量，其中涉及重構資料和應用程式。   

## 資源
<a name="resources"></a>

 **相關文件：** 
+  [AWS 的雲端資料庫 ](https://aws.amazon.com/products/databases/?ref=wellarchitected) 
+  [AWS 資料庫快取 ](https://aws.amazon.com/caching/database-caching/?ref=wellarchitected) 
+  [Amazon DynamoDB Accelerator ](https://aws.amazon.com/dynamodb/dax/?ref=wellarchitected) 
+  [Amazon Aurora 最佳實務 ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.BestPractices.html?ref=wellarchitected) 
+  [Amazon Redshift 效能 ](https://docs.aws.amazon.com/redshift/latest/dg/c_challenges_achieving_high_performance_queries.html?ref=wellarchitected) 
+  [Amazon Athena 10 大效能秘訣 ](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/?ref=wellarchitected) 
+  [Amazon Redshift Spectrum 最佳實務 ](https://aws.amazon.com/blogs/big-data/10-best-practices-for-amazon-redshift-spectrum/?ref=wellarchitected) 
+  [Amazon DynamoDB 最佳實務](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BestPractices.html?ref=wellarchitected) 
+  [在 EC2 與 Amazon RDS 之間選擇](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/comparison.html) 
+  [實作 Amazon ElastiCache 的最佳實務](https://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/BestPractices.html) 

 **相關影片：** 
+ [AWS 專用資料庫 (DAT209-L) ](https://www.youtube.com/watch?v=q81TVuV5u28) 
+ [探究 Amazon Aurora 儲存的奧秘：運作方式 (DAT309-R) ](https://www.youtube.com/watch?v=uaQEGLKtw54) 
+ [深入探討 Amazon DynamoDB：進階設計模式 (DAT403-R1) ](https://www.youtube.com/watch?v=6yqfmXiZTlM) 

 **相關範例：** 
+  [使用 Amazon Redshift 資料共用來優化資料模式](https://wellarchitectedlabs.com/sustainability/300_labs/300_optimize_data_pattern_using_redshift_data_sharing/) 
+  [資料庫遷移](https://github.com/aws-samples/aws-database-migration-samples) 
+  [MS SQL Server - AWS Database Migration Service (DMS) 複寫示範](https://github.com/aws-samples/aws-dms-sql-server) 
+  [資料庫現代化實際操作研討會](https://github.com/aws-samples/amazon-rds-purpose-built-workshop) 
+  [Amazon Neptune 範例](https://github.com/aws-samples/amazon-neptune-samples) 