Amazon DynamoDB 概覽


 1. 什么是Amazon DynamoDB

DynamoDB 是一種快速、全面受管的 NoSQL 數據庫服務,它能讓用戶以簡單並且經濟有效地方式存儲和檢索任何數據量,同時服務於任何程度的請求流量。所有的數據項都存儲在固態驅動器 (SSD) 中,同時在 3 個可用區域間進行復制,確保達到較高的可用性和持久性。

通過 DynamoDB,您可以卸下由於運行和擴展高可用性的分布式集群而帶來的管理負擔,而且只需以較低的價格為您使用的部分付費。

 

服務亮點

可擴展 – Amazon DynamoDB 旨在實現吞吐量和存儲容量高效無縫擴展。

  • 配置吞吐量 – 創建表時,只需指定所需的請求容量即可。DynamoDB 會為您的表分配專用資源以滿足性能要求,並自動將數據分區到足夠多的服務器以滿足請求容量。如果您的應用吞吐量需求發生變化,只需使用 AWS 管理控制台或 Amazon DynamoDB API 調用更新表的請求容量即可。在擴展過程,仍然能夠保證之前的吞吐量水平沒有下降。
  • 自動存儲擴展 – 您在 DynamoDB 表中可存儲數據量沒有限制,而且隨着您使用 DynamoDB 寫入 API 存儲數據量加大,該服務會自動分配更多存儲。 
  • 完全分布式的無共享架構 – Amazon DynamoDB 可水平擴展並在數百台服務器中無縫擴展單個表。

快速、可預測的性能 – Amazon DynamoDB 的服務端平均延遲通常不超過十毫秒。該服務在固態硬盤中運行,其構建方式旨在任何規模均能保證服務性能持續優良,降低延遲。

輕松管理 – Amazon DynamoDB 是完全托管的服務,您只需創建數據庫表,其余事情都交由該服務來代勞。您無需擔心硬件或軟件配置、創建設置和配置、軟件更新、操作可靠的分布式數據庫集群,或者隨着擴展需要在多個實例間對數據進行分區等問題,您只需盡享 Amazon DynamoDB 服務之大成。

內置容錯能力 – Amazon DynamoDB 內置容錯能力,可在某個地區三個可用區域之間自動同步備份數據,以實現高效可訪問性,即使單台機器甚至設施出現死機,防護措施保證數據萬無一失。

靈活 – Amazon DynamoDB 沒有固定模式。相反,每個數據項目可能有不同數量的屬性。多種數據類型(字符串、數字、二進制數據和集)使數據模型更加豐富

強一致性、原子計數器 – 與許多非關系數據庫不同,Amazon DynamoDB 允許您對讀取操作使用強一致性檢驗以確保始終讀取最新的值,從而使開發更加便捷。Amazon DynamoDB 支持多種本地數據類型(數字、字符串、二進制數據和多值屬性)。該服務還支持本地原子計數器,允許您通過調用單個 API 調用自動遞增或遞減數值屬性。

經濟高效 – Amazon DynamoDB 能輕松應對任何規模的工作負載強度,費用低廉,經濟高效。您也可以開始使用免費套餐,允許您每月執行 4 000 萬次數據庫操作,並且在超出該限制后只需為使用的資源支付少許小時費率。憑借便捷管理和高效請求定價,相較於親力而為管理關系或非關系數據庫,DynamoDB 工作負載總擁有成本 (TCO)大大降低。

安全 – Amazon DynamoDB 采用經過驗證的加密方法驗證用戶身份,以防未授權數據訪問。此外,它還能與 AWS Identity and Access Management (IAM) 集成,對組織內的用戶實現精細的訪問控制。

集成監控 – Amazon DynamoDB 在 AWS 管理控制台中為您的表顯示關鍵操作指標。該服務還能與 Amazon CloudWatch 結合使用,以便您查看每個 Amazon DynamoDB 表的請求吞吐量和延遲,並輕松跟蹤您的資源開銷。

Elastic MapReduce 集成 – Amazon DynamoDB 與 Amazon Elastic MapReduce (Amazon EMR) 無縫集成。Amazon EMR 允許企業在 AWS 上使用托管的即用即付計費 Hadoop 框架對大型數據集執行復雜分析。依賴 Amazon DynamoDB 強大服務能力,客戶可輕松使用 Amazon EMR 來分析 DynamoDB 中存儲的數據集並在 Amazon Simple Storage Service (Amazon S3) 中存檔結果,同時在 DynamoDB 中保存完整原始數據集。此外,企業還可使用 Amazon EMR 訪問多個存儲(即 Amazon DynamoDB、Amazon RDS 和 Amazon S3)中的數據、對這一組合的數據集執行復雜分析,並在 Amazon S3 中存儲工作結果。

 

2. 數據模型概覽

Amazon DynamoDB 將數據組織到包含項目的表,每個項目有一個或多個屬性。

屬性

屬性是一個名稱-值對。名稱必須是字符串,但值可以是字符串、數字、二進制數據、字符串集、數字集或二進制數據集。以下均為屬性的實例:

        "ImageID" = 1
        "Title" = "flower"
        "Tags" = "flower", "jasmine", "white"
        "Ratings" = 3, 4, 2

項目

屬性的集合構成項目,項目由其主鍵標識。項目的屬性是名稱-值對的集合,順序不限。項目屬性可以是稀疏型,與同一表中其他項目的屬性無關,並且是可選的(主鍵屬性除外)。與傳統數據庫不同,該表除依賴於主鍵外沒有其他模式。項目存儲在表中。要將項目放入表中,必須至少指定其中一個屬性為主鍵。主鍵唯一標識 DynamoDB 表的某個項目。在以下圖表中,ImageID 即為指定為主鍵的屬性:

 

 表有名稱“my table”,但項目沒有名稱。主鍵定義項目;包含主鍵 "ImageID"=1 的項目

表包含項目,並將信息組織到離散區域。表中的所有項目具有相同的主鍵模式。在創建表時,需指定用於主鍵的一個或多個屬性名稱,並且要求表中每個項目具有唯一的主鍵值。要向 DynamoDB 寫入數據,第一步是創建表,並使用主鍵指定表名稱。以下是一個較大的表,它也采用 ImageID 作為標識項目的主鍵。

表:My Images    
主鍵 其他屬性  
ImageID = 1 ImageLocation = https://s3.amazonaws.com/bucket/img_1.jpg Date = 1260653179 Title = flower Tags = Flower, Jasmine Width = 1024 Depth = 768  
ImageID = 2 ImageLocation = https://s3.amazonaws.com/bucket/img_2.jpg Date = 1252617979 Rated = 3, 4, 2 Tags = Work, Seattle, Office Width = 1024 Depth = 768  
ImageID = 3 ImageLocation = https://s3.amazonaws.com/bucket/img_3.jpg Date = 1285277179 Price = 10.25 Tags = Seattle, Grocery, Store Author = you Camera = phone  
ImageID = 4 ImageLocation = https://s3.amazonaws.com/bucket/img_4.jpg Date = 1282598779 Title = Hawaii Author = Joe Colors = orange, blue, yellow Tags = beach, blanket, ball

 

3. 訪問模型和 API 概覽

主鍵

DynamoDB 要求每個表具有定義好的主鍵用來訪問數據。

主鍵唯一標識每個項目(如 ID =1、ID = 2、ID = 3 等)。

主鍵是表中唯一被索引的部分,也用來在多個服務器之間對數據進行哈希分區。您在創建表時指定主鍵。

換句話說,每個項目都是名稱/值對的集合。在創建表的項目時,您需指定一個名稱/值對作為主鍵。表中所有項目的主鍵屬性必須具有值,Amazon DynamoDB 會確保該名稱值的唯一性,並根據主鍵創建一個索引。

范圍查詢使用的復合主鍵

復合主鍵指定了表中的兩個屬性,共同構成唯一的主索引。表中的所有項目必須具有這兩個屬性。一個用作“哈希分區屬性”,另一個用作“范圍屬性”。例如,您可能有一個“Status Updates”表,復合主鍵由“UserID”(哈希屬性,用於在多台服務器間為工作負載分區)和“Time”(范圍屬性)構成。然后,您可以運行查詢來提取:1) 由 UserID 和 Time 值組合唯一標識的特定項目;2) 特定哈希“存儲段”(此例中為 UserID)的所有項目;或 3) 特定時間范圍內特定 UserID 的所有項目。僅在指定了 UserID 哈希存儲段的情況下,才支持針對“Time”的范圍查詢。

 

DynamoDB API

  • CreateTable – 創建表並指定用於數據訪問的主鍵
  • UpdateTable更新特定表的 配置吞吐量值
  • DeleteTable – 刪除表。
  • DescribeTable – 返回表大小、狀態和索引信息。
  • PutItem – 創建新項目,或將舊項目替換為新項目(包括所有屬性)。如果項目已存在於具有相同主鍵的指定表中,則新項目將會完全替換現有項目。您還可以使用條件運算符實現條件替換,即僅在項目的屬性值符合特定條件時才替換項目,或僅在項目尚未存在時才插入新項目。
  • BatchWriteItem – 通過單個請求(而不是單個事務)插入、替換和刪除多個表中的多個項目。支持對最多 25 個項目批量執行 Put 或 Delete 操作,最大總請求大小為 1 MB。
  • UpdateItem – 編輯現有項目的屬性。您還可以使用條件運算符實現條件更新,即僅在項目的屬性值符合特定條件時才進行更新。
  • DeleteItem – 按主鍵刪除表中的單個項目。您還可以使用條件運算符實現條件刪除,即僅在項目的屬性值符合特定條件時才刪除項目。
  • GetItem – GetItem 運算符可為匹配主鍵的項目返回一組屬性。默認情況下,GetItem 操作提供最終一致性讀取。如果最終一致性讀取不適用於您的應用程序,請使用 ConsistentRead。
  • BatchGetItem – BatchGetItem 操作可為使用主鍵的多個表中的多個項目返回屬性。單個響應的大小限制為 1 MB,最多返回 100 個項目。支持強一致性和最終一致性。
  • Query – 獲得一個或更多基於主鍵的項目。支持強一致性和最終一致性。此 API 在具有復合哈希-范圍鍵的表中使用。
  • Scan – 通過在表中執行完全掃描,獲取一個或多個項目和屬性。可以通過指定針對一個或多個屬性的篩選條件,限制返回的項目。然后可以使用此 API,針對不是表主鍵的屬性,啟用表的即席查詢。但是,由於它是沒有索引的完全表掃描,因此不適用於需要可預測性能的任何應用程序查詢使用案例。Scan API 請求的結果集最終將是一致的。您可將 Scan API 視為迭代器。一旦特定 Scan API 請求的掃描項目的總大小超過 1 MB 限制,則該特定請求將被終止,提取的結果將與 LastEvaluatedKey 一同返回(以便在后續操作中繼續掃描)。

 

4. Amazon Elastic MapReduce 集成

Amazon DynamoDB 還可與 Amazon Elastic MapReduce (Amazon EMR) 集成。Amazon EMR 允許企業在 AWS 上使用托管的即用即付 Hadoop 架購對大型數據集執行復雜的分析。EMR 可采用如下所示的某些方式與 DynamoDB 結合使用:

  1. 客戶可以使用 EMR 分析 DynamoDB 中存儲的數據,將分析結果存儲在 S3 中,同時在 DynamoDB 中保留原始數據。

    例如,如果您使用 Amazon DynamoDB 來存儲客戶訂單,可以每月創建一個新的訂單表,而使用 EMR 的多表查詢功能,您可以聯接 DynamoDB 中不同的表來回答“特定客戶在過去 3 個月下達了哪些訂單”之類的問題。然后,可以使用 EMR 在 S3 中存儲這些問題的查詢結果以供將來檢索,同時在 DynamoDB 中完整保留月度客戶訂單表中的數據。

  2. 客戶可以使用 EMR 將數據從 DynamoDB 備份到 S3。

    借用以上關於客戶訂單的示例,一旦您不再頻繁寫入數據到月度訂單表,則可以將此表備份到 S3,並從 DynamoDB 中刪除此表,以便享受 S3 較低存儲費用。S3 中存儲的數據仍然可以很方便地用於下述分析過程。

  3. 此外,客戶還可使用 Amazon EMR 訪問多個存儲(即 Amazon DynamoDB、Amazon RDS 和 Amazon S3)中的數據、對這一組合的數據集執行復雜分析,並在 Amazon S3 中存儲此工作的結果。

    例如,如果您使用 Amazon DynamoDB 存儲客戶訂單,則可以每月創建一個新的訂單表,並在月末時使用 Amazon EMR 在 Amazon S3 中存檔 6 個多月的舊訂單。這使您能夠在 Amazon S3 中存檔不常訪問的訂單以降低費用,並僅在 DynamoDB 中保存經常訪問的訂單。您可以使用 EMR 跨越 DynamoDB 中存儲的當前訂單及 Amazon S3 中存儲的存檔訂單表來執行分析,以回答“客戶 Y 在過去 48 個月內對產品小組件 X 下達了多少訂單”之類的查詢。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM