AWS 數(shù)據(jù)庫

數(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 數(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)
  • 主鍵
    • 主鍵是每個(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)書專題


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容