Amazon DynamoDB 概览
?1. 什么是Amazon DynamoDB
DynamoDB 是一種快速、全面受管的 NoSQL 數(shù)據(jù)庫服務(wù),它能讓用戶以簡單并且經(jīng)濟(jì)有效地方式存儲(chǔ)和檢索任何數(shù)據(jù)量,同時(shí)服務(wù)于任何程度的請(qǐng)求流量。所有的數(shù)據(jù)項(xiàng)都存儲(chǔ)在固態(tài)驅(qū)動(dòng)器 (SSD) 中,同時(shí)在 3 個(gè)可用區(qū)域間進(jìn)行復(fù)制,確保達(dá)到較高的可用性和持久性。
通過 DynamoDB,您可以卸下由于運(yùn)行和擴(kuò)展高可用性的分布式集群而帶來的管理負(fù)擔(dān),而且只需以較低的價(jià)格為您使用的部分付費(fèi)。
?
服務(wù)亮點(diǎn)
可擴(kuò)展 – Amazon DynamoDB 旨在實(shí)現(xiàn)吞吐量和存儲(chǔ)容量高效無縫擴(kuò)展。
- 配置吞吐量 – 創(chuàng)建表時(shí),只需指定所需的請(qǐng)求容量即可。DynamoDB 會(huì)為您的表分配專用資源以滿足性能要求,并自動(dòng)將數(shù)據(jù)分區(qū)到足夠多的服務(wù)器以滿足請(qǐng)求容量。如果您的應(yīng)用吞吐量需求發(fā)生變化,只需使用 AWS 管理控制臺(tái)或 Amazon DynamoDB API 調(diào)用更新表的請(qǐng)求容量即可。在擴(kuò)展過程,仍然能夠保證之前的吞吐量水平?jīng)]有下降。
- 自動(dòng)存儲(chǔ)擴(kuò)展 – 您在 DynamoDB 表中可存儲(chǔ)數(shù)據(jù)量沒有限制,而且隨著您使用 DynamoDB 寫入 API 存儲(chǔ)數(shù)據(jù)量加大,該服務(wù)會(huì)自動(dòng)分配更多存儲(chǔ)。?
- 完全分布式的無共享架構(gòu) – Amazon DynamoDB 可水平擴(kuò)展并在數(shù)百臺(tái)服務(wù)器中無縫擴(kuò)展單個(gè)表。
快速、可預(yù)測的性能 – Amazon DynamoDB 的服務(wù)端平均延遲通常不超過十毫秒。該服務(wù)在固態(tài)硬盤中運(yùn)行,其構(gòu)建方式旨在任何規(guī)模均能保證服務(wù)性能持續(xù)優(yōu)良,降低延遲。
輕松管理 – Amazon DynamoDB 是完全托管的服務(wù),您只需創(chuàng)建數(shù)據(jù)庫表,其余事情都交由該服務(wù)來代勞。您無需擔(dān)心硬件或軟件配置、創(chuàng)建設(shè)置和配置、軟件更新、操作可靠的分布式數(shù)據(jù)庫集群,或者隨著擴(kuò)展需要在多個(gè)實(shí)例間對(duì)數(shù)據(jù)進(jìn)行分區(qū)等問題,您只需盡享 Amazon DynamoDB 服務(wù)之大成。
內(nèi)置容錯(cuò)能力 – Amazon DynamoDB 內(nèi)置容錯(cuò)能力,可在某個(gè)地區(qū)三個(gè)可用區(qū)域之間自動(dòng)同步備份數(shù)據(jù),以實(shí)現(xiàn)高效可訪問性,即使單臺(tái)機(jī)器甚至設(shè)施出現(xiàn)死機(jī),防護(hù)措施保證數(shù)據(jù)萬無一失。
靈活 – Amazon DynamoDB 沒有固定模式。相反,每個(gè)數(shù)據(jù)項(xiàng)目可能有不同數(shù)量的屬性。多種數(shù)據(jù)類型(字符串、數(shù)字、二進(jìn)制數(shù)據(jù)和集)使數(shù)據(jù)模型更加豐富。
強(qiáng)一致性、原子計(jì)數(shù)器 – 與許多非關(guān)系數(shù)據(jù)庫不同,Amazon DynamoDB 允許您對(duì)讀取操作使用強(qiáng)一致性檢驗(yàn)以確保始終讀取最新的值,從而使開發(fā)更加便捷。Amazon DynamoDB 支持多種本地?cái)?shù)據(jù)類型(數(shù)字、字符串、二進(jìn)制數(shù)據(jù)和多值屬性)。該服務(wù)還支持本地原子計(jì)數(shù)器,允許您通過調(diào)用單個(gè) API 調(diào)用自動(dòng)遞增或遞減數(shù)值屬性。
經(jīng)濟(jì)高效 – Amazon DynamoDB 能輕松應(yīng)對(duì)任何規(guī)模的工作負(fù)載強(qiáng)度,費(fèi)用低廉,經(jīng)濟(jì)高效。您也可以開始使用免費(fèi)套餐,允許您每月執(zhí)行 4 000 萬次數(shù)據(jù)庫操作,并且在超出該限制后只需為使用的資源支付少許小時(shí)費(fèi)率。憑借便捷管理和高效請(qǐng)求定價(jià),相較于親力而為管理關(guān)系或非關(guān)系數(shù)據(jù)庫,DynamoDB 工作負(fù)載總擁有成本 (TCO)大大降低。
安全 – Amazon DynamoDB 采用經(jīng)過驗(yàn)證的加密方法驗(yàn)證用戶身份,以防未授權(quán)數(shù)據(jù)訪問。此外,它還能與 AWS Identity and Access Management (IAM) 集成,對(duì)組織內(nèi)的用戶實(shí)現(xiàn)精細(xì)的訪問控制。
集成監(jiān)控 – Amazon DynamoDB 在 AWS 管理控制臺(tái)中為您的表顯示關(guān)鍵操作指標(biāo)。該服務(wù)還能與 Amazon CloudWatch 結(jié)合使用,以便您查看每個(gè) Amazon DynamoDB 表的請(qǐng)求吞吐量和延遲,并輕松跟蹤您的資源開銷。
Elastic MapReduce 集成 – Amazon DynamoDB 與 Amazon Elastic MapReduce (Amazon EMR) 無縫集成。Amazon EMR 允許企業(yè)在 AWS 上使用托管的即用即付計(jì)費(fèi) Hadoop 框架對(duì)大型數(shù)據(jù)集執(zhí)行復(fù)雜分析。依賴 Amazon DynamoDB 強(qiáng)大服務(wù)能力,客戶可輕松使用 Amazon EMR 來分析 DynamoDB 中存儲(chǔ)的數(shù)據(jù)集并在 Amazon Simple Storage Service (Amazon S3) 中存檔結(jié)果,同時(shí)在 DynamoDB 中保存完整原始數(shù)據(jù)集。此外,企業(yè)還可使用 Amazon EMR 訪問多個(gè)存儲(chǔ)(即 Amazon DynamoDB、Amazon RDS 和 Amazon S3)中的數(shù)據(jù)、對(duì)這一組合的數(shù)據(jù)集執(zhí)行復(fù)雜分析,并在 Amazon S3 中存儲(chǔ)工作結(jié)果。
?
2. 數(shù)據(jù)模型概覽
Amazon DynamoDB 將數(shù)據(jù)組織到包含項(xiàng)目的表,每個(gè)項(xiàng)目有一個(gè)或多個(gè)屬性。
屬性
屬性是一個(gè)名稱-值對(duì)。名稱必須是字符串,但值可以是字符串、數(shù)字、二進(jìn)制數(shù)據(jù)、字符串集、數(shù)字集或二進(jìn)制數(shù)據(jù)集。以下均為屬性的實(shí)例:
"ImageID" = 1"Title" = "flower""Tags" = "flower", "jasmine", "white""Ratings" = 3, 4, 2項(xiàng)目
屬性的集合構(gòu)成項(xiàng)目,項(xiàng)目由其主鍵標(biāo)識(shí)。項(xiàng)目的屬性是名稱-值對(duì)的集合,順序不限。項(xiàng)目屬性可以是稀疏型,與同一表中其他項(xiàng)目的屬性無關(guān),并且是可選的(主鍵屬性除外)。與傳統(tǒng)數(shù)據(jù)庫不同,該表除依賴于主鍵外沒有其他模式。項(xiàng)目存儲(chǔ)在表中。要將項(xiàng)目放入表中,必須至少指定其中一個(gè)屬性為主鍵。主鍵唯一標(biāo)識(shí) DynamoDB 表的某個(gè)項(xiàng)目。在以下圖表中,ImageID 即為指定為主鍵的屬性:
?
?表有名稱“my table”,但項(xiàng)目沒有名稱。主鍵定義項(xiàng)目;包含主鍵 "ImageID"=1 的項(xiàng)目
表
表包含項(xiàng)目,并將信息組織到離散區(qū)域。表中的所有項(xiàng)目具有相同的主鍵模式。在創(chuàng)建表時(shí),需指定用于主鍵的一個(gè)或多個(gè)屬性名稱,并且要求表中每個(gè)項(xiàng)目具有唯一的主鍵值。要向 DynamoDB 寫入數(shù)據(jù),第一步是創(chuàng)建表,并使用主鍵指定表名稱。以下是一個(gè)較大的表,它也采用 ImageID 作為標(biāo)識(shí)項(xiàng)目的主鍵。
| 表: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 要求每個(gè)表具有定義好的主鍵用來訪問數(shù)據(jù)。
主鍵唯一標(biāo)識(shí)每個(gè)項(xiàng)目(如 ID =1、ID = 2、ID = 3 等)。
主鍵是表中唯一被索引的部分,也用來在多個(gè)服務(wù)器之間對(duì)數(shù)據(jù)進(jìn)行哈希分區(qū)。您在創(chuàng)建表時(shí)指定主鍵。
換句話說,每個(gè)項(xiàng)目都是名稱/值對(duì)的集合。在創(chuàng)建表的項(xiàng)目時(shí),您需指定一個(gè)名稱/值對(duì)作為主鍵。表中所有項(xiàng)目的主鍵屬性必須具有值,Amazon DynamoDB 會(huì)確保該名稱值的唯一性,并根據(jù)主鍵創(chuàng)建一個(gè)索引。
范圍查詢使用的復(fù)合主鍵
復(fù)合主鍵指定了表中的兩個(gè)屬性,共同構(gòu)成唯一的主索引。表中的所有項(xiàng)目必須具有這兩個(gè)屬性。一個(gè)用作“哈希分區(qū)屬性”,另一個(gè)用作“范圍屬性”。例如,您可能有一個(gè)“Status Updates”表,復(fù)合主鍵由“UserID”(哈希屬性,用于在多臺(tái)服務(wù)器間為工作負(fù)載分區(qū))和“Time”(范圍屬性)構(gòu)成。然后,您可以運(yùn)行查詢來提取:1) 由 UserID 和 Time 值組合唯一標(biāo)識(shí)的特定項(xiàng)目;2) 特定哈希“存儲(chǔ)段”(此例中為 UserID)的所有項(xiàng)目;或 3) 特定時(shí)間范圍內(nèi)特定 UserID 的所有項(xiàng)目。僅在指定了 UserID 哈希存儲(chǔ)段的情況下,才支持針對(duì)“Time”的范圍查詢。
?
DynamoDB API
- CreateTable – 創(chuàng)建表并指定用于數(shù)據(jù)訪問的主鍵。
- UpdateTable – 更新特定表的 配置吞吐量值。
- DeleteTable – 刪除表。
- DescribeTable – 返回表大小、狀態(tài)和索引信息。
- PutItem – 創(chuàng)建新項(xiàng)目,或?qū)⑴f項(xiàng)目替換為新項(xiàng)目(包括所有屬性)。如果項(xiàng)目已存在于具有相同主鍵的指定表中,則新項(xiàng)目將會(huì)完全替換現(xiàn)有項(xiàng)目。您還可以使用條件運(yùn)算符實(shí)現(xiàn)條件替換,即僅在項(xiàng)目的屬性值符合特定條件時(shí)才替換項(xiàng)目,或僅在項(xiàng)目尚未存在時(shí)才插入新項(xiàng)目。
- BatchWriteItem – 通過單個(gè)請(qǐng)求(而不是單個(gè)事務(wù))插入、替換和刪除多個(gè)表中的多個(gè)項(xiàng)目。支持對(duì)最多 25 個(gè)項(xiàng)目批量執(zhí)行 Put 或 Delete 操作,最大總請(qǐng)求大小為 1 MB。
- UpdateItem – 編輯現(xiàn)有項(xiàng)目的屬性。您還可以使用條件運(yùn)算符實(shí)現(xiàn)條件更新,即僅在項(xiàng)目的屬性值符合特定條件時(shí)才進(jìn)行更新。
- DeleteItem – 按主鍵刪除表中的單個(gè)項(xiàng)目。您還可以使用條件運(yùn)算符實(shí)現(xiàn)條件刪除,即僅在項(xiàng)目的屬性值符合特定條件時(shí)才刪除項(xiàng)目。
- GetItem – GetItem 運(yùn)算符可為匹配主鍵的項(xiàng)目返回一組屬性。默認(rèn)情況下,GetItem 操作提供最終一致性讀取。如果最終一致性讀取不適用于您的應(yīng)用程序,請(qǐng)使用 ConsistentRead。
- BatchGetItem – BatchGetItem 操作可為使用主鍵的多個(gè)表中的多個(gè)項(xiàng)目返回屬性。單個(gè)響應(yīng)的大小限制為 1 MB,最多返回 100 個(gè)項(xiàng)目。支持強(qiáng)一致性和最終一致性。
- Query – 獲得一個(gè)或更多基于主鍵的項(xiàng)目。支持強(qiáng)一致性和最終一致性。此 API 在具有復(fù)合哈希-范圍鍵的表中使用。
- Scan – 通過在表中執(zhí)行完全掃描,獲取一個(gè)或多個(gè)項(xiàng)目和屬性。可以通過指定針對(duì)一個(gè)或多個(gè)屬性的篩選條件,限制返回的項(xiàng)目。然后可以使用此 API,針對(duì)不是表主鍵的屬性,啟用表的即席查詢。但是,由于它是沒有索引的完全表掃描,因此不適用于需要可預(yù)測性能的任何應(yīng)用程序查詢使用案例。Scan API 請(qǐng)求的結(jié)果集最終將是一致的。您可將 Scan API 視為迭代器。一旦特定 Scan API 請(qǐng)求的掃描項(xiàng)目的總大小超過 1 MB 限制,則該特定請(qǐng)求將被終止,提取的結(jié)果將與 LastEvaluatedKey 一同返回(以便在后續(xù)操作中繼續(xù)掃描)。
?
4. Amazon Elastic MapReduce 集成
Amazon DynamoDB 還可與 Amazon Elastic MapReduce (Amazon EMR) 集成。Amazon EMR 允許企業(yè)在 AWS 上使用托管的即用即付 Hadoop 架購對(duì)大型數(shù)據(jù)集執(zhí)行復(fù)雜的分析。EMR 可采用如下所示的某些方式與 DynamoDB 結(jié)合使用:
客戶可以使用 EMR 分析 DynamoDB 中存儲(chǔ)的數(shù)據(jù),將分析結(jié)果存儲(chǔ)在 S3 中,同時(shí)在 DynamoDB 中保留原始數(shù)據(jù)。
例如,如果您使用 Amazon DynamoDB 來存儲(chǔ)客戶訂單,可以每月創(chuàng)建一個(gè)新的訂單表,而使用 EMR 的多表查詢功能,您可以聯(lián)接 DynamoDB 中不同的表來回答“特定客戶在過去 3 個(gè)月下達(dá)了哪些訂單”之類的問題。然后,可以使用 EMR 在 S3 中存儲(chǔ)這些問題的查詢結(jié)果以供將來檢索,同時(shí)在 DynamoDB 中完整保留月度客戶訂單表中的數(shù)據(jù)。
客戶可以使用 EMR 將數(shù)據(jù)從 DynamoDB 備份到 S3。
借用以上關(guān)于客戶訂單的示例,一旦您不再頻繁寫入數(shù)據(jù)到月度訂單表,則可以將此表備份到 S3,并從 DynamoDB 中刪除此表,以便享受 S3 較低存儲(chǔ)費(fèi)用。S3 中存儲(chǔ)的數(shù)據(jù)仍然可以很方便地用于下述分析過程。
此外,客戶還可使用 Amazon EMR 訪問多個(gè)存儲(chǔ)(即 Amazon DynamoDB、Amazon RDS 和 Amazon S3)中的數(shù)據(jù)、對(duì)這一組合的數(shù)據(jù)集執(zhí)行復(fù)雜分析,并在 Amazon S3 中存儲(chǔ)此工作的結(jié)果。
例如,如果您使用 Amazon DynamoDB 存儲(chǔ)客戶訂單,則可以每月創(chuàng)建一個(gè)新的訂單表,并在月末時(shí)使用 Amazon EMR 在 Amazon S3 中存檔 6 個(gè)多月的舊訂單。這使您能夠在 Amazon S3 中存檔不常訪問的訂單以降低費(fèi)用,并僅在 DynamoDB 中保存經(jīng)常訪問的訂單。您可以使用 EMR 跨越 DynamoDB 中存儲(chǔ)的當(dāng)前訂單及 Amazon S3 中存儲(chǔ)的存檔訂單表來執(zhí)行分析,以回答“客戶 Y 在過去 48 個(gè)月內(nèi)對(duì)產(chǎn)品小組件 X 下達(dá)了多少訂單”之類的查詢。
?
轉(zhuǎn)載于:https://www.cnblogs.com/davidgu/p/3364773.html
總結(jié)
以上是生活随笔為你收集整理的Amazon DynamoDB 概览的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python模块包中__init__.p
- 下一篇: Linux之字符串截取