數(shù)據(jù)庫概念
關(guān)系型數(shù)據(jù)庫
- 關(guān)系數(shù)據(jù)庫提供了一個通用接口,使用戶可以使用使用 編寫的命令或查詢從數(shù)據(jù)庫讀取和寫入數(shù)據(jù)。
- 關(guān)系數(shù)據(jù)庫由一個或多個表格組成,表格由與電子表格相似的列和行組成。
- 以行列形式存儲數(shù)據(jù),行包含一個條目的所有信息,列是分離不同數(shù)據(jù)點的屬性
- 架構(gòu)固定,輸入數(shù)據(jù)前要先鎖定列
- 查詢方式是SQL語句
- 支持垂直擴展屬性
- 每一張表都有主鍵, 通過引用記錄的主鍵,表中的一條記錄可以與另一個表中的記錄相關(guān)。這個指針或引用被稱為外鍵。
- 關(guān)系數(shù)據(jù)庫可以分為聯(lián)機事務處理OLTP 和 聯(lián)機分析處理OLAP,具體取決于表的組織方式以及應用程序如何使用關(guān)系數(shù)據(jù)庫。
- OLTP - 經(jīng)常編寫和更改數(shù)據(jù)(例如數(shù)據(jù)輸入和 電子商務)的面向事務的應用程序,OLTP事務頻繁發(fā)生但相對簡單
- OLAP - 應用于數(shù)據(jù)倉庫的領(lǐng)域,指的是報告或分析大型數(shù)據(jù)集。OLAP事務 的發(fā)生頻率要低得多,但要復雜得多
- 大型應用程序經(jīng)?;旌鲜褂肙LTP和OLAP數(shù)據(jù)庫。一個數(shù)據(jù)庫作為其OLTP事務的主生產(chǎn) 數(shù)據(jù)庫,另一個數(shù)據(jù)庫作為他們的數(shù)據(jù)倉庫為OLAP。
- 數(shù)據(jù)庫包括: MySQL,PostgreSQL,Microsoft SQL Server和Oracle
- SQL 數(shù)據(jù)庫的默認端口
- Oracle: 1521
- MS SQL : 1433
- MySQL : 3306
- DB2: 5000
數(shù)據(jù)倉庫
- 數(shù)據(jù)倉庫為可以來自一個或多個源的數(shù)據(jù)的中央儲存庫。
- 此數(shù)據(jù)存儲庫通常是專用類型的關(guān)系數(shù)據(jù)庫,可用于通過OLAP進行報告和分析,組織通常使用數(shù)據(jù)倉庫來編譯報告并使用高度復雜 的查詢搜索數(shù)據(jù)庫。
NoSQL數(shù)據(jù)庫
相比關(guān)系型數(shù)據(jù)庫,NoSQL更加簡單易用,更加靈活,
傳統(tǒng)數(shù)據(jù)庫在單臺服務器外擴展成本極高,而NoSQL可以在商用硬件上實現(xiàn)水平伸縮性
使用眾多模型(如鍵值對、文檔和圖表)中的一種來存儲數(shù)據(jù)
-
數(shù)據(jù)結(jié)構(gòu)
- 集合 Collection : 相當于表
- 文檔 Document: 相當于行
- 鍵值 Key Value Pairs: 相當于列
動態(tài)的架構(gòu),行無需包含與每個列對應的數(shù)據(jù)
查詢更關(guān)注文檔集合
支持水平擴展屬性
-
NoSQL的其他特性
- 對于某些應用程序可以替代關(guān)系型數(shù)據(jù)庫
- 支持以高可用性處理大量數(shù)據(jù)
- 可以形成一個包含不同實施方案和數(shù)據(jù)模型的大類別
- 具備分布式容錯的能力
- NoSQL 可以提高靈活性、可用性、擴展性和高性能
-
主要的NoSQL數(shù)據(jù)庫包括
- EC2: Cassandra、Hbase、Redis、MongoDB、Couchbase、Riak
- AWS托管:DynamoDB、ElastiCache(Redis)、Elastic Map Reduce(HBase)
-
NoSQL 數(shù)據(jù)庫常用端口
- MongoDB:27017
- Redis:6379
- Memcached:11211
-
采用NoSQL主要考慮幾個限制
- 應用程序的事務支持
- ACID合規(guī)(ACID=原子性、一致性、隔離性和持久性)
- 聯(lián)接需求
- SQL需求
-
常見場景:
- 排行榜、快速導入點擊流或日志數(shù)據(jù)、購物車臨時數(shù)據(jù)需求、熱表、元數(shù)據(jù)或查找表、會話數(shù)據(jù)
數(shù)據(jù)庫選擇
- 將非關(guān)系型數(shù)據(jù)放在NoSQL中(如DynamoDB)
- 將技術(shù)與工作負載匹配,從各種關(guān)系型數(shù)據(jù)庫, NoSQL數(shù)據(jù)庫,數(shù)據(jù)倉庫和其他針對搜索優(yōu)化的數(shù)據(jù)存儲中選擇。
- 數(shù)據(jù)庫選擇要考慮的事項:
- 讀取和寫入要求
- 總存儲容量
- 典型對象大小及其訪問特性
- 持久性需求
- 延遲要求
- 同時支持的最大用戶量
- 查詢特性
- 所需完整性控制強度
Amazon RDS存儲關(guān)系型數(shù)據(jù)
RDS綜述
-
RDS是一個全托管的數(shù)據(jù)庫
image.png - 開發(fā)人員可以專注于查詢結(jié)構(gòu)和查詢優(yōu)化
- 減輕運維負擔包括數(shù)據(jù)庫遷移、備份和恢復、修補、軟件升級、存儲升級、頻繁服務器升級、硬件故障處理
- RDS可以通過公用的客戶端軟件連接并執(zhí)行SQL操作,包括使用相同的工具來查詢,分析,修改和管理數(shù)據(jù)庫。例如,當前的提取,轉(zhuǎn)換, 加載(ETL)工具和報告工具
RDS 數(shù)據(jù)庫實例
- 數(shù)據(jù)庫實例是云上專用網(wǎng)段中部署的隔離的數(shù)據(jù)庫環(huán)境
- 每個實例運行了一個商業(yè)或者開源的數(shù)據(jù)庫引擎,包括MySQL,PostgreSQL,MS SQL,Oracle,MariaDB以及AWS Aurora 六種。
- 可以通過API創(chuàng)建和管理RDS實例
- 可以利用AWS工具或者數(shù)據(jù)庫引擎本身的工具將數(shù)據(jù)從本地遷移到AWS上
- 每個用戶默認最多托管40個RDS數(shù)據(jù)庫
- 每個實例上只能運行1個Oracle和30個MS SQL數(shù)據(jù)庫,其余沒有限制
- RDS支持預留實例,且只支持區(qū)域預留,可用于多可用區(qū)部署和只讀副本
- 使用Parameter Group 對數(shù)據(jù)庫參數(shù)進行設置
存儲選項
- RDS構(gòu)建在EBS上
- 通過預配置支持最大16TB (MSSQL) - 32TB,32000 IOPS - 40000 IOPS
- 支持HDD,通用SSD和預配置IOPS SSD 三種類型
備份與恢復
- 自動備份
- 備份存儲在S3中
- RDS備份整個數(shù)據(jù)庫實例,為它創(chuàng)建存儲卷快照
- 自動備份建期間IO會掛起3-5秒鐘,但對高可用部署的數(shù)據(jù)庫不受影響
- 自動備份默認開啟且保留1天(API或CLI創(chuàng)建)或者7天(控制臺創(chuàng)建),最大可保留35天,自動刪除
- 自動備份支持時間點恢復功能,最小間隔為5分鐘
- 刪除實例時所有自動備份都會被刪除
- 可以禁用自動備份,但是非常不建議。 禁用自動備份后,即使再重新啟用,被禁用的期間將不可恢復。
- 手動數(shù)據(jù)庫快照
- 快照存儲在S3中
- 隨時手工對數(shù)據(jù)庫進行快照
- 默認永久保留除非手工明確刪除
- 使用多可用區(qū)部署可以最小化快照的影響,因為快照可以從備用數(shù)據(jù)庫發(fā)起,只是RPO會有一定影響
- 恢復
- 所有RDS數(shù)據(jù)庫恢復都會創(chuàng)建一個全新的數(shù)據(jù)庫實例
- 還原時只會關(guān)聯(lián)默認的數(shù)據(jù)庫參數(shù)和安全組參數(shù)被關(guān)聯(lián),需要重新手工設置
- 不支持將VPC內(nèi)的數(shù)據(jù)恢復到VPC外部
多可用區(qū)的高可用
- 高可用是傳統(tǒng)關(guān)系型數(shù)據(jù)庫部署的難點
- 利用RDS可以輕松實現(xiàn),實現(xiàn)最短幾分鐘的RPO和RTO要求
- 開啟多可用區(qū)部署后,自動在不同可用區(qū)創(chuàng)建備用RDS實例,并利用數(shù)據(jù)庫實例URL endpoint來實現(xiàn)DNS尋址
- RDS 數(shù)據(jù)會同步復制到從數(shù)據(jù)庫,復制本身產(chǎn)生的數(shù)據(jù)傳輸不收費
- 支持故障自動切換和手動轉(zhuǎn)移,轉(zhuǎn)移時間為1-2分鐘
- 跨可用區(qū)部署后由于數(shù)據(jù)同步復制,會有一定的性能影響,備份是也會有更長的延遲
-
從數(shù)據(jù)庫不能用作只讀副本提升IO
image.png
規(guī)模擴大或縮小
- RDS支持垂直擴展
- 數(shù)據(jù)庫實例的資源大小可以隨需求決定,支持1-32 vCPU,1-244GB Memory,用戶可以更改實例大小,RDS會自動完成數(shù)據(jù)遷移
- RDS采用數(shù)據(jù)庫參數(shù)和數(shù)據(jù)庫選項對數(shù)據(jù)庫實例進行配置,每次更改都需要重啟實例
- SQL Server不支持存儲擴展
- 可以通過數(shù)據(jù)庫分片技術(shù)實現(xiàn)有限度的水平擴展
- RDS 支持實時配置更多的存儲而無需停機
- RDS IOPS(除SQL Server)還可以擴展數(shù)據(jù)庫實例的吞吐量,1000 到 30000 IOPS分別對應100GB 到 6TB的存儲空間
-
可以在RDS前端的EC2選擇放置Redis 緩存服務,EC2 首選自我管理型緩存解決方案
image.png
只讀副本擴展
- RDS允許從主數(shù)據(jù)庫創(chuàng)建一個或多個只讀副本來分流讀取事務
- 讀取繁重的任務
- 當主數(shù)據(jù)庫不可用時處理讀取操作
- 離線數(shù)據(jù)分析場景
- MySQL、PostgreSQL、MariaDB和Aurora支持只讀副本
- 要使用只讀副本,需要先開啟自動備份功能
- 只讀副本是異步的
- 可以為只讀副本創(chuàng)建只讀副本,每個數(shù)據(jù)庫最多創(chuàng)建5個只讀副本,Aurora最多15個
- 可以在多可用區(qū)部署只讀副本,每個只讀副本都有自己的URL Endpoint
- 只讀副本可以被提升為獨立的數(shù)據(jù)庫,但是不能用來做災備
RDS安全性
- IAM權(quán)限管理
- 采用IAM用戶來對數(shù)據(jù)庫進行操作
- AMI可以控制每一個單獨的用戶對RDS操作的權(quán)限
- RDS初次創(chuàng)建時會基于AWS開發(fā)人員賬戶創(chuàng)建一個有主用賬戶并成為數(shù)據(jù)庫根管理員權(quán)限,他可以單獨分配給不同數(shù)據(jù)庫實例的主用戶名和密碼
- 可以使用主用戶憑證連接數(shù)據(jù)庫
- 接收RDS重要事件通知
- 網(wǎng)絡隔離
- RDS實例需要創(chuàng)建在VPC的私有子網(wǎng)中
- 可以使用IPSec VPN網(wǎng)關(guān)將RDS連接到現(xiàn)有的企業(yè)內(nèi)部的IT基礎架構(gòu)中
- 在多可用區(qū)部署時,可以創(chuàng)建全局子網(wǎng)組,這樣在創(chuàng)建RDS時只需要制定可用區(qū)即可從全局子網(wǎng)組中分配響應的子網(wǎng)和IP地址
- 所有從VPC外部的EC2或者Internet對RDS的訪問,都必須經(jīng)過VPN或堡壘機實現(xiàn),并且堡壘機需要充當SSH Bastion的角色
- 自動補丁
- RDS軟件始終與最新的補丁保持同步
- 默認首周需要30分鐘進行維護
- 建議每一周需要計劃30分鐘的維護時間以完成補丁操作
- 一般僅有規(guī)模計算相關(guān)的補丁需要脫機執(zhí)行,通常每幾個月發(fā)生一次
- RDS增強型監(jiān)控
- 增強型監(jiān)控能夠捕獲 RDS 實例的系統(tǒng)級指標,如 CPU、內(nèi)存、文件系統(tǒng)和磁盤 I/O 等
- 最多可以查看所有指標在 1 個小時之前的性能值,粒度最高為 1 秒
- RDS 增強型監(jiān)控提供了一系列將以 JSON 有效負載形式發(fā)送到您的 CloudWatch Logs 賬戶的指標。JSON 有效負載會按照上次為 RDS 實例配置的粒度進行發(fā)送。
- 增強型監(jiān)控在 CloudWatch Logs 中配置的默認保留期是 30 天。
- RDS采用四層安全模型
- RDS安全組
- 用于控制傳入和傳出數(shù)據(jù)庫實例的流量,默認情況下不能進行網(wǎng)絡訪問,但可以通過ACL設置允許特定IP端口進行訪問。
- 數(shù)據(jù)庫安全組
- 控制對VPC外部數(shù)據(jù)庫實例的訪問
- 默認情況下RDS必須在VPC內(nèi)才能啟動,但是仍然存在VPC外部托管RDS的情況
- 數(shù)據(jù)庫安全組僅適用于入站流量,目前不允許數(shù)據(jù)庫安全組有出站流量。
- 可以使用RDS API 或 AWS 控制臺的 RDS部分創(chuàng)建數(shù)據(jù)庫安全組
- 安全組來控制對RDS的數(shù)據(jù)庫實例訪問, 類似于EC2安全組,但不可以互換
- 默認拒絕所有訪問,所有允許權(quán)限都需要顯式聲明
- 可以授權(quán)IP或安全組訪問
- 僅允許訪問數(shù)據(jù)庫服務器端口
- 數(shù)據(jù)庫安全組無需指定目標端口,默認由實例自動定義
- 可以在不重啟數(shù)據(jù)庫實例的情況下對安全組策略進行更新
- image.png
- VPC安全組 - 控制對VPC內(nèi)數(shù)據(jù)實例的訪問
- 允許一個特定的來源(組)訪問VPC中與該VPC安全組關(guān)聯(lián)的數(shù)據(jù)庫實例, 可以是地址范圍也可以是VPC安全組
- 必須使用EC2 API或VPC控制臺的Security Group選項才能創(chuàng)建VPC安全組
- image.png
- EC2安全組
- 控制對EC2實例的訪問
- RDS安全組
- RDS 數(shù)據(jù)加密
- RDS加密適用于所有數(shù)據(jù)庫,除了 MS SQL Express版
- RDS 加密僅適用于部分實例類型
- 可以對靜態(tài)RDS數(shù)據(jù)庫實例和快照進行加密,而后自動備份、只讀副本和快照均通過AES-256加密
- 使用SSL\TLS對應用程序和數(shù)據(jù)庫實例之間連接進行加密
- 加密僅能在創(chuàng)建數(shù)據(jù)庫時指定,不能事后對其加密,但是可以通過恢復數(shù)據(jù)庫快照時加密這個復制版本
- 加密RDS連接
- 預置RDS實例時,會創(chuàng)建SSL證書并在數(shù)據(jù)庫實例上安裝該證書
- 負責加密傳輸中的數(shù)據(jù)
- 使用SSL/TLS加密應用程序與數(shù)據(jù)庫實例之間的連接,但不應依賴于數(shù)據(jù)庫本身的身份驗證
- 將數(shù)據(jù)庫實例配置為僅接受加密連接
- 加密RDS資源
- 啟用RDS數(shù)據(jù)庫實例加密選項,可以加密靜態(tài)RDS實例和快照,自動備份和只讀副本
- 利用KMS管理RDS資源的密鑰
- 采用AES-256加密算法進行加密,RDS以透明方式進行訪問驗證和解密以降低性能影響
- RDS將特定于Oracle 或 MySQL這些數(shù)據(jù)庫包加密數(shù)據(jù),稱為透明數(shù)據(jù)加密(TDE),TDE使用在數(shù)據(jù)庫應用程序中創(chuàng)建的密匙保護數(shù)據(jù)。
AWS Redshift
概念
- 完全托管的PB級數(shù)據(jù)倉庫服務
- 基于SQL-based 設計的關(guān)系型數(shù)據(jù)庫
- 基于行業(yè)標準的PostgreSQL,因此大多數(shù)現(xiàn)有的SQL客戶端應用程序只能進行極少的更改。
- 針對OLAP設計的高性能數(shù)據(jù)分析和報告
- Redshift使您可以使用標準SQL命令快速查詢結(jié)構(gòu)化數(shù)據(jù)的功能,以支持在大型數(shù)據(jù)集上進 行交互式查詢。
- 使用柱狀存儲,數(shù)據(jù)壓縮和區(qū)域映射等技術(shù)減少查詢所需的IO量。
- 通過ODBC或JDBC連接與各種數(shù)據(jù)加載,報告,數(shù)據(jù)挖掘和分 析工具集成。
- Redshift負責管理設置,操作和擴展數(shù)據(jù)倉庫所需的工作,從設置基礎架構(gòu)容量到自動執(zhí) 行備份和修補等持續(xù)管理任務。
- Redshift會自動監(jiān)控您的節(jié)點和驅(qū)動器,以幫助從故障中恢復。
集群
- 集群由一個領(lǐng)導者節(jié)點和多個計算節(jié)點組成
- 支持從160GB - 1PB甚至更大的
- 最多支持128個計算節(jié)點
- Redshift集群不能使用競價實例
- 僅能在一個可用區(qū)部署
- 客戶端只與領(lǐng)導者節(jié)點交互,計算節(jié)點對外部是完全透明的
- Redshift目前支持6種節(jié)點類型,分為兩大類
- 密集計算型 - 最大支持SSD 326TB
- 密集存儲型 - 最大支持HDD 2PB
- 每個集群都包含一個或多個數(shù)據(jù)庫,并且分布在各個計算節(jié)點中,每個節(jié)點的數(shù)據(jù)庫數(shù)據(jù)都是同步的
- 計算節(jié)點的磁盤存儲會分片,切片通常在2-16之間,所有節(jié)點都會參與并行查詢。
- 通常計算節(jié)點越多,查詢性能越強
- 可以隨時調(diào)整節(jié)點大小和類型,調(diào)整后都會創(chuàng)建一個新的集群并將數(shù)據(jù)遷移過去,調(diào)整期間數(shù)據(jù)庫只讀。
- image.png
表設計
- 每個Redshift表都可以指定表名稱、列及其數(shù)據(jù)類型等。
- 數(shù)據(jù)類型:
- 常見數(shù)據(jù)類型包括: INTEGER,DECIMAL和 DOUBLE,文本數(shù)據(jù)類型(如CHAR和VARCHAR)以及日期數(shù)據(jù)類型(如DATE和TIMESTAMP)
- 壓縮編碼
- 首次將數(shù)據(jù)加載入新表時,自動對數(shù)據(jù)進行采樣并且為每列選擇最佳壓縮方案
- 分發(fā)策略
- 創(chuàng)建表格時指定如何在集群的節(jié)點進行切片進行分發(fā),以及使用哪種查詢模式
- 分發(fā)風格對查詢性能,存儲要求,數(shù)據(jù)加載和維護影響很大
- EVEN 分發(fā): 默認,對數(shù)據(jù)以統(tǒng)一方式進行切片和分發(fā)
- Key 分發(fā):基于某一列的值進行分發(fā),匹配的值會存儲在一起
- All 分發(fā): 將整個表完整的分發(fā)到每個節(jié)點
- 排序Key
- 在創(chuàng)建表時指定一個或多個列作為排序key,這樣在處理一定范圍的查詢時可以跳過大量的塊
- 表格的排序Key可以復合和交錯,查詢使用前綴可以讓復合排序的查詢更加高效
數(shù)據(jù)加載
- 使用標準的SQL Intert/update進行表的創(chuàng)建和修改記錄
- 在Redshift中使用COPY命令是一個更高效的方式,如從S3或者DynamoDB中進行批量數(shù)據(jù)加載
- 大量數(shù)據(jù)加載完成后,建議使用VACUUM命令重新組織數(shù)據(jù)并用ANALYZE來統(tǒng)計更新表格統(tǒng)計信息
- UPLOUD命令可以從Redshift中導出數(shù)據(jù)
查詢數(shù)據(jù)
- 也是用標準的SQL Select命令進行查詢
- 對于多用戶的大型Redshift,可以使用WLM工作負載管理對查詢進行排隊,WLM可以對每個隊列設置并發(fā)級別。
- 使用Redshift Spectrum
- 可以對 Amazon S3 中 EB 級非結(jié)構(gòu)化數(shù)據(jù)運行查詢,而無需進行加載或 ETL 操作。
- 當您發(fā)布查詢時,查詢會進入 Amazon Redshift SQL 終端節(jié)點,該終端節(jié)點會生成查詢方案并對其進行優(yōu)化。
- Amazon Redshift 會確定哪些數(shù)據(jù)存儲在本地以及哪些數(shù)據(jù)存儲在 Amazon S3 中,然后生成一種方案來盡可能減少需要讀取的 Amazon S3 數(shù)據(jù)量,從共享資源池中請求 Redshift Spectrum 工作線程來讀取和處理 Amazon S3 中的數(shù)據(jù)。
- Redshift Spectrum 可根據(jù)需要擴展到數(shù)千個實例
備份快照
- 自動快照到期后會自動刪除,設置時間為1-35天
- 支持跨區(qū)域快照,手工快照可跨區(qū)域甚至跨賬戶存儲,需要手工明確刪除
- Redshift快照和備份數(shù)據(jù)存儲在S3中
- 免費的快照存儲空間與當前節(jié)點容量相當,所以需要及時清除不需要的快照文件
安全
- 安全級別
- 基礎架構(gòu)級別安全,使用IAM來限制用戶的可執(zhí)行操作及生命周期
- 網(wǎng)絡級別安全, 將Redshift部署到私有的VPC中(必須),并利用ACL和安全組限制細粒度網(wǎng)絡訪問
- 數(shù)據(jù)庫級別安全,可以通過Redshift的主用戶名和密碼創(chuàng)建更多的用戶并給他們相應授權(quán)
- 數(shù)據(jù)加密存儲
- 數(shù)據(jù)加密是可選項,利用硬件隨機生成的AES256密鑰對每個數(shù)據(jù)塊進行加密,但加密影響性能
- 多種靜態(tài)加密技術(shù),符合HIPAA和PCI DSS合規(guī)要求
- KMS
- HSM
- Redshift Enhanced VPC Routing
- 強制將所有的COPY和UNLOAD流量指定走AWS VPC 內(nèi)部
- 若不開啟,則所有流量默認走Internet,包括從AWS內(nèi)部讀取
- 數(shù)據(jù)加密傳輸
- 采用硬件加速的SSL連接與S3或者DynamoDB進行通信
- 可以在客戶端上安裝SSL證書pem公鑰文件實現(xiàn)對Redshift 服務器的連接和管理
- 支持橢圓曲線HCDHE協(xié)議提供更強大的密碼套件確保SSL的私密性
- 同時也可以啟用Perfect Forward Secrecy使用短暫會話密鑰防止密鑰泄露
- 記錄所有的SQL操作信息用于監(jiān)控和審計,包括連接嘗試、查詢和對數(shù)據(jù)庫的更改等操作
- 在維護窗口中進行自動補丁更新
例外
- 不適用于大規(guī)模對少數(shù)對象的讀寫操作,這種場景需要考慮Aurora 或者RDS
DynamoDB
主要特性
- 是NoSQL的的托管版本
- 低延遲 - 基于SSD,延遲小于10ms
- 大規(guī)模無縫可擴展 - 無表大小和吞吐限制、可針對存儲和吞吐量進行實時重新分區(qū)
- 性能可預測 - 預配置吞吐量模型
- 持久性和可用性 - 自動執(zhí)行區(qū)域內(nèi)三向復制,確保一致性、僅限磁盤寫入
- 安全性- 成熟的加密方案對用戶身份進行驗證
- 零管理- 完全托管的NoSQL服務
- 同時連接和訪問多個NoSQL存儲(如RDS、S3、MongoDB、Hbase等),對組合數(shù)據(jù)集進行復雜分析
- 通過在多個分區(qū)上自動分配表的數(shù)據(jù)和流量提供一致的性能級別,其性能是以讀寫容量的吞吐量級衡量的
- 根據(jù)實際需求可以隨時調(diào)整讀取和寫入容量,DynamoDB會自動添加或刪除基礎架構(gòu)或調(diào)整內(nèi)部分區(qū),默認最大支持20000個讀取和20000個寫入容量
- DynamoDB 按照存儲數(shù)據(jù)大小和讀寫能力進行收費
- 應用場景
- 支持與Amazon EMR集成
- 支持即插即用的Hadoop分析
- 支持儲存會話數(shù)據(jù)
數(shù)據(jù)模型

image.png
- 沒有架構(gòu),一個表有多個項目,項目具有可變屬性
- 數(shù)據(jù)類型
- 對每一個主鍵及其屬性都必須指定一個數(shù)據(jù)類型
- Scalar數(shù)據(jù)類型 - 表示某一個值的類型, 包括字符串、數(shù)值、二進制、布爾值、空
- Set數(shù)據(jù)類型 - 表示某一個list的類型,包括 字符串set,數(shù)值set和二進制set
- Document 數(shù)據(jù)類型- 表示多個嵌套的屬性,類似于JSON文件結(jié)構(gòu),包括List和Map兩種文檔類型
- List - 用于儲存不同數(shù)據(jù)類型的屬性的有序列表
- Map - 每個可用于Key/Value的無序列表,可以用來表示任何JSON對象結(jié)構(gòu)
- 對每一個主鍵及其屬性都必須指定一個數(shù)據(jù)類型
- 主鍵
- 主鍵是每個項目的唯一標識也是唯一強制屬性,DB通過它來進行GET/PUT
- 每個主鍵屬性必須是字符串、數(shù)字或二進制。
- 兩種類型的主鍵
- 分區(qū)鍵 - 一個屬性一個分區(qū)哈希值組成,用于構(gòu)建無序散列索引
- 分區(qū)+排序鍵 - 兩個屬性組成,由分區(qū)和排序組合起來作為唯一標識
- DynamoDB 調(diào)用包頭類型
- host
- x-amz-date
- x-amz-target
- content-type
- 預置容量
- DynamoDB需要調(diào)配一定數(shù)量的讀寫容量來處理預期工作負載
- 選擇適宜的容量已持續(xù)的提供低延遲的響應時間,可以通過Updatetable指令縮放。
- 讀操作每4K為一個單位容量,寫操作每1K為一個單位容量。
- 最終一致性 - 1個單位容量可以讀寫兩次
- 強一致性 - 1個單位容量可以讀寫一次
- 事務一致性 - 2個單位容量才能讀寫一次
- 可以CloudWatch 監(jiān)控DynamoDB容量并制定擴展決策。
- 二級索引
- 只有使用分區(qū)+排序主鍵時,可以定義一個或多個二級索引
- 支持全局二級索引和本地二級索引等靈活方法來查詢非主鍵值
- 全局二級索引索引整個分區(qū)+排序鍵的值
- 本地二級索引索引相同分區(qū)鍵但不同排序鍵的值
- 主鍵分為單屬性分區(qū)或復合屬性分區(qū)
- 單分區(qū)以UserID為唯一標識
- 復合分區(qū)以UserID(分區(qū)鍵)和TimeStamp(排序鍵)進行組合標識一對一關(guān)聯(lián)關(guān)系,支持交叉檢索功能
- 當數(shù)據(jù)集大小和預配置容量增加時會發(fā)生自動分區(qū)
- 只支持一個本地二級索引,但可以創(chuàng)建多個全局二級索引
-
項目大小不能超過400KB,必須包含屬性名稱和屬性值長度兩個二進制長度
image.png
DynamoDB屬性
- 一致性
- AWS同一區(qū)域內(nèi)的多個可用區(qū)之間自動復制每個DynamoDB表
- 讀取一致性:通過控制成功寫入或更新的讀取操作的方式和時間,指定最終一致性或強一致性讀取,默認是最終一致性讀取
- 最終一次性讀?。?數(shù)據(jù)副本的一致性能夠需要1秒實現(xiàn),僅驗證數(shù)據(jù)一致而不會驗證寫入完成,所以可能讀取的是舊數(shù)據(jù)
- 強一致性讀?。鹤x取時驗證寫入成功完成,并且確保數(shù)據(jù)讀取的一致性,在網(wǎng)絡延遲或者中斷的情況下可能不可用。
- 批量操作
- 可以通過單個操作執(zhí)行最多25個項目的創(chuàng)建或更新
- 項目搜索
- 查詢 - 用于僅限主鍵屬性的查找和索引操作,用排序鍵值可以優(yōu)化搜索結(jié)果,結(jié)果會按主鍵排序,
- 掃描- 會返回每個項目的所有屬性,返回限制1MB
- 每個查詢或掃描結(jié)果返回最多1MB,若超過則需要對增量結(jié)果進行翻頁
- 縮放和分區(qū)
- DynamoDB可以無限數(shù)量的擴展并且提供一致的低延遲性能
- 通過分區(qū)來進行水平擴展
- 好的程序設計需要考慮表的分區(qū)結(jié)構(gòu),以平均分配讀寫事務,實現(xiàn)低延遲處理
- 隨著表中項目的增加,可以不斷拆分現(xiàn)有分區(qū)來添加額外分區(qū)
- 預置吞吐量將在個分區(qū)之間平均分配,且不可跨區(qū)共享
- 一個分區(qū)可容納10GB數(shù)據(jù)和最多3000個讀取容量以及1000個寫入容量,對于未充分利用的容量分區(qū),可以用于處理突發(fā)流量
- AWS DynamoDB Stream
- 獲取DynamoDB最近24小時內(nèi)的項目修改列表用于分析和審計。
- 通過Stream中讀取的活動修改日志,可以在不修改原始應用程序的情況下擴展和構(gòu)建新的功能。
- 自動備份
- 需要通過AWS Data Pipeline的專用配置模板,將DynamoDB完整或增量備份到同一地區(qū)或不同地區(qū)進行備份
- DAX
- DynamoDB 數(shù)據(jù)庫性能加速
- DynamoDB 自動擴展
- DynamoDB在創(chuàng)建時,可以指定讀取和寫入流量以及每個大小的平均大小來配置所需的請求容量
- 可以通過第三方工具(如 CloudFormation模板)啟用 Dynamic DynamoDB 配置自動擴展和縮減表格
- 支持將擴展活動限制在一定時間段,使用上下限預置單獨擴展讀取和寫入吞吐量
- 支持斷路器,確保每次擴展和縮減活動之前檢查應用程序是否正常以避免當應用程序發(fā)生問題而觸發(fā)的虛假縮減活動
安全
- DynamoDB 需要與IAM服務集成,用策略最大限度控制權(quán)限。
- 所有操作都必須通過身份驗證,建議使用EC2實例配置文件或角色來管理密鑰
- 在數(shù)據(jù)庫級別可以創(chuàng)建權(quán)限,以細粒度的允許或拒絕對項目和屬性的訪問
- 對DynamoDB的服務請求都必須包含HMAC-SHA-256的簽名
- 移動端的最佳做法是使用Web身份聯(lián)合與AWS安全令牌服務提供臨時密鑰
- DynamoDB本身不提供服務器端加密存儲數(shù)據(jù),需要存儲前使用客戶端或KMS加密
DynamoDB最佳實踐
- 保持較小的項目大小
- 將元數(shù)據(jù)存儲在DynamoDB中,將大型BLOB存儲在S3中
- 按日、周、月進行Hash計算使用表來存儲實踐序列數(shù)據(jù)用于強制分區(qū)
- 使用有條件更新或者開放式并發(fā)控制更新(OCC)
- OCC是假定多個事務可以頻繁完成且相互不會干擾
- 獲取資源時無需提前鎖定,提交時需要確認沒有沖突的修改,若有則回滾
- 僅適用于低爭用環(huán)境,從而提高吞吐量,否則反而會大大降低性能
- 避免熱鍵和熱分區(qū)
- 更加適合于無狀態(tài)的服務設計
- 支持JSON對象的存儲
Amazon Aurora
概述
- 是一種面向服務的架構(gòu)交付的關(guān)系型數(shù)據(jù)庫,是mySQL的托管版本,還兼容PostgreSQL
- 速度是MySQL的5倍,成本是其他商用數(shù)據(jù)庫的1/10
- 容量支持10GB - 64TB;每10GB一增量,僅為使用的容量付費。
- 支持Schema Changes
- 利用S3實現(xiàn)可擴展和高可用性,默認支持6個副本,
- 復制到3個可用區(qū),每個可用區(qū)2個副本
- 2個以下副本丟失,不影響寫入
- 3個以下副本丟失,不影響讀取
- 與MySQL 5.6簡易兼容 - 現(xiàn)有程序可正常運行,可輕松遷移,可直接導入數(shù)據(jù)文件
其他特性
- 擴展性能
- 與S3集成,可實現(xiàn)最多三個可用區(qū)之間6個副本的持續(xù)備份
- 將日志記錄和存儲層轉(zhuǎn)移到可擴展的多租戶服務層
- MySQL支持跨區(qū)域副本(最多5個區(qū)域)建立全球數(shù)據(jù)庫,使用Read Replicate 技術(shù), PostgreSQL不支持,跨區(qū)域DR需要手工完成
- 彈性設計
- 最多15個副本,約10ms副本滯后
- 99.99%可用
- 即時崩潰恢復(60s),故障轉(zhuǎn)移30s內(nèi)
- 與單一線程重放所有日志的傳統(tǒng)數(shù)據(jù)庫相當
- 在磁盤讀取時重放重做記錄
- 自動備份,且不會影響數(shù)據(jù)庫性能
- 支持快照,并且可以跨賬戶共享快照,也可以跨區(qū)域共享,但是不能同時 跨賬戶和區(qū)域共享
- 平行的分布式異步恢復
- 緩存層可在數(shù)據(jù)庫重啟時繼續(xù)使用,從而改善讀取響應
- 支持KMS加密,但必須在創(chuàng)建數(shù)據(jù)庫時即開啟加密選項
- 主數(shù)據(jù)庫出現(xiàn)故障時,只讀副本可以實現(xiàn)即時提升為主數(shù)據(jù)庫
- 支持Aurora Serverless
- 適用于 Amazon Aurora 的 MySQL 兼容版的按需 autoscaling 配置。
- Aurora Serverless 數(shù)據(jù)庫集群會根據(jù)您應用程序的需求自動啟動、關(guān)閉以及擴展或縮減容量。
- Aurora Serverless 是簡單且更具成本效益的選擇,適用于不頻發(fā)的、間歇性的或不可預測的工作負載。
- Parallel Query
- Amazon Aurora Parallel Query 是一項功能,能夠?qū)蝹€查詢的計算負載下移并分布到 Aurora 存儲層中的數(shù)千個 CPU。如果不使用 Parallel Query,則對 Amazon Aurora 數(shù)據(jù)庫發(fā)出的查詢將全部在數(shù)據(jù)庫集群的一個實例中執(zhí)行;這與大多數(shù)數(shù)據(jù)庫的運作方式類似。
- Parallel Query 非常適合需要新數(shù)據(jù)和良好查詢性能的分析工作負載,即使在大型表上也是如此。這種類型的工作負載在本質(zhì)上通常是可操作的。
好處:
- 速度更快:Parallel Query 可將分析查詢的運行速度提高多達 2 個數(shù)量級。
- 操作簡易性和數(shù)據(jù)新鮮度:您可以直接對 Aurora 集群中的當前事務數(shù)據(jù)發(fā)出查詢。
- 同一數(shù)據(jù)庫上的事務工作負載和分析工作負載:借助 Parallel Query 功能,Aurora 可以在處理并行分析查詢的同時保持較高的事務吞吐量。
數(shù)據(jù)庫架構(gòu)示例

image.png
考AWS SAA的知識點 花兩天看這個就夠了
柳隨風 AWS SAA 簡書專題







