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

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

image.png
考AWS SAA的知識(shí)點(diǎn) 花兩天看這個(gè)就夠了
柳隨風(fēng) AWS SAA 簡(jiǎn)書專題







