背景
企業資料庫選型規則。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#%E4%B8%80%E6%95%B0%E6%8D%AE%E5%BA%93%E9%83%A8%E7%BD%B2%E5%BD%A2%E5%BC%8F 一、資料庫部署形式
随着硬體發展,名額上會有變化。
部署形式決定了容量上限,計算能力上限,讀寫帶寬上限,RPO,RTO名額,适應場景。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#1%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E4%BE%8B%E5%A6%82pgcitus%E6%8F%92%E4%BB%B6 1、分布式部署(例如pg+citus插件)
容量上限:100節點以上,PB級。
計算能力上限:100節點以上,6400核以上。
讀寫帶寬上限:100節點以上,200GB/s以上。
RPO:如果每個計算節點都采用多副本存儲,RPO=0。
RTO:如果每個計算節點都采用HA,RTO可以做到1分鐘内。
使用限制:有一些SQL限制。
适應場景:應用代碼可控程度高的情況下,适合TP和AP業務。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#2%E5%8D%95%E8%8A%82%E7%82%B9%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8 2、單節點本地存儲
容量上限:10TB級。
計算能力上限:64核級。
讀寫帶寬上限:2GB/s級。
RPO:RPO無保障。
RTO:RTO無保障。
使用限制:SQL無限制。
适應場景:測試環境,非生産環境,對資料庫RPO,RTO都沒有要求的環境。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#3%E5%8D%95%E8%8A%82%E7%82%B9%E5%A4%9A%E5%89%AF%E6%9C%AC%E5%AD%98%E5%82%A8 3、單節點多副本存儲
容量上限:32TB級。
RPO:單機房RPO=0,(如果存儲支援跨機房多副本,可以做到多機房RPO=0)。
RTO:10分鐘級。
适應場景:非核心場景生産、測試。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#4%E5%8F%8C%E8%8A%82%E7%82%B9%E5%85%B1%E4%BA%AB%E5%AD%98%E5%82%A8 4、雙節點共享存儲
RTO:1分鐘級。
适應場景:核心、非核心場景生産。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#5%E5%8F%8C%E8%8A%82%E7%82%B9%E4%B8%BB%E5%A4%87%E5%BC%82%E6%AD%A5%E5%A4%8D%E5%88%B6 5、雙節點主備異步複制
容量上限:32TB級(使用遠端存儲),10TB級(使用本機存儲)
RPO:10GB網絡,REDO延遲毫秒級、1MB以内。(支援跨機房部署)。心跳機制可確定RPO < 60秒
适應場景:非核心場景生産。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#6%E5%8F%8C%E8%8A%82%E7%82%B9%E4%B8%BB%E5%A4%87%E5%8D%8A%E5%90%8C%E6%AD%A5%E5%A4%8D%E5%88%B6 6、雙節點主備半同步複制
RPO:
無節點或單一節點異常時,可保證RPO=0。
兩個節點都異常時,RPO取決于備份延遲。采用基于PG流複制的持續REDO備份,可以做到RPO毫秒級。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#7%E4%B8%89%E8%8A%82%E7%82%B9%E5%8F%8A%E4%BB%A5%E4%B8%8A%E5%A4%9A%E5%89%AF%E6%9C%AC%E5%85%A8%E5%90%8C%E6%AD%A5%E5%A4%8D%E5%88%B6 7、三節點及以上多副本全同步複制
小于半數節點異常時,可保證RPO=0。
半數以上節點異常時,RPO取決于 1、10GB網絡,REDO延遲毫秒級、1MB以内。2、備份延遲。采用基于PG流複制的持續REDO備份,可以做到RPO毫秒級。
适應場景:核心場景生産。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#8%E8%AE%A1%E7%AE%97%E5%AD%98%E5%82%A8%E5%88%86%E7%A6%BB%E5%AD%98%E5%82%A8%E5%A4%9A%E5%89%AF%E6%9C%AC%E6%AF%94%E5%A6%82%E9%98%BF%E9%87%8C%E4%BA%91polardb-pg 8、計算存儲分離(存儲多副本)(比如阿裡雲POLARDB PG)
容量上限:100TB級。
計算能力上限:16節點,1024核級。
讀寫帶寬上限:32GB/s級。
RTO:15秒級。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#9%E8%AE%A1%E7%AE%97%E5%AD%98%E5%82%A8%E5%88%86%E7%A6%BB%E5%AD%98%E5%82%A8%E5%A4%9A%E5%89%AF%E6%9C%AC-%E5%8F%8C%E6%9C%BA%E6%88%BF%E5%8D%8A%E5%90%8C%E6%AD%A5 9、計算存儲分離(存儲多副本)+ 雙機房半同步
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#10%E8%AE%A1%E7%AE%97%E5%AD%98%E5%82%A8%E5%88%86%E7%A6%BB%E5%AD%98%E5%82%A8%E5%A4%9A%E5%89%AF%E6%9C%AC-%E5%A4%9A%E6%9C%BA%E6%88%BF%E5%A4%9A%E5%89%AF%E6%9C%AC%E5%85%A8%E5%90%8C%E6%AD%A5 10、計算存儲分離(存儲多副本)+ 多機房多副本全同步
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#11%E5%8F%AA%E8%AF%BB%E8%8A%82%E7%82%B9 11、隻讀節點
适應場景:擴充讀能力。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#12%E9%9D%9E%E6%A0%B8%E5%BF%83%E5%8A%9F%E8%83%BD 12、非核心功能
12.1、業務透明的讀寫分離
12.2、跨庫互動
适應場景:跨庫DBLINK,跨庫外部表,跨庫物化視圖。
12.3、單元化
适應場景:多執行個體共享少量資料,多寫。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#%E4%BA%8C%E4%BA%91%E4%BA%A7%E5%93%81%E5%BD%A2%E6%80%81 二、雲産品形态
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#1%E5%9F%BA%E7%A1%80%E7%89%88%E5%8D%95%E6%9C%BA%E5%A4%9A%E5%89%AF%E6%9C%AC%E5%AD%98%E5%82%A8pg-10 1、基礎版(單機多副本存儲)PG 10
目前容量上限:2 TB
未來可達32TB級。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#2%E5%8F%8C%E6%9C%BA%E7%89%88%E5%BC%82%E6%AD%A5%E5%A4%8D%E5%88%B6pg-94-10ppas-93-10 2、雙機版(異步複制)PG 9.4, 10、PPAS 9.3, 10
目前容量上限:6 TB
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#3%E5%8F%8C%E6%9C%BA%E7%89%88%E5%8D%8A%E5%90%8C%E6%AD%A5%E5%A4%8D%E5%88%B6pg-11 3、雙機版(半同步複制)PG 11
目前容量上限:32 TB
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#4%E5%8F%AA%E8%AF%BB%E5%AE%9E%E4%BE%8B 4、隻讀執行個體
擴充讀能力。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#5%E8%AE%A1%E7%AE%97%E5%AD%98%E5%82%A8%E5%88%86%E7%A6%BB%E7%89%88-pg-11ppas-11 5、計算存儲分離版 PG 11、PPAS 11
16個計算節點,讀寫分離。
目前容量上限:100 TB
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#pgppaspolardb-pg%E5%8C%BA%E5%88%AB PG、PPAS、POLARDB PG差別
除以上差別以外,還有如下差別(pg ppas polarddb選擇評判标準:資料量,可用性,可靠性,是否有去O需求,成本):
1、pg社群版。
2、PPAS相容PG、同時高度相容ORACLE。
相比社群版PG,新增AWR報告、SQL防火牆、資料庫使用者級資源隔離、索引推薦等進階功能。
3、POLARDB PG。
相容PG、同時高度相容ORACLE。
相比PPAS、PG,容量達到100TB,計算存儲分離,計算可擴充到16節點,支援超低延遲讀寫分離。
擴容速度快。(擴容不需要遷移資料,非常之快)
可用性高,恢複速度快。(恢複不需要REPLAY WAL,秒級恢複)
備份、恢複速度快。(存儲快照,秒級備份)
由于一份存儲支援讀寫分離(PG PPAS使用流複制方式,每個隻讀節點一份存儲),POLARDB成本更低廉。
存儲采用按實際使用量付費,不需要規劃存儲大小,彈性更好。
自研主打産品,未來産品黑科技會集中增加到POLARDB。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#%E4%B8%89%E8%A1%8C%E4%B8%9A%E5%90%88%E8%A7%84%E8%A6%81%E6%B1%82 三、行業合規要求
一些行業對資料庫系統的合規要求:
1、SQL審計
2、擴充性
3、可用性
4、可靠性
5、備份保留時間
6、備份可恢複時間點
7、閃回
8、資源回收筒
9、存儲加密
10、資料檔案加密
11、類型加密
12、資料通路鍊路加密
13、連接配接認證加密
14、加密KEY管理形式
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#%E5%9B%9B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%89%88%E6%9C%AC%E6%8E%A8%E8%8D%90 四、資料庫版本推薦
除非業務有特殊要求。選新不選舊(新版本建議發行2個小版本後使用)。
例如目前PG最新版本為11,已釋出兩個小版本,推薦使用11最新小版本。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#%E4%BA%94%E6%95%B0%E6%8D%AE%E5%BA%93%E9%80%89%E5%9E%8B%E6%8E%A8%E8%8D%90 五、資料庫選型推薦
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#1-%E8%80%81%E4%B8%9A%E5%8A%A1%E8%BF%81%E7%A7%BB 1 老業務遷移
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#%E5%8E%9F%E6%9D%A5%E4%BD%BF%E7%94%A8%E4%BB%80%E4%B9%88db-pg-edb-ppas-oracle-sybase-db2-ms-sql 原來使用什麼DB? (PG, EDB PPAS, oracle, sybase, db2, ms sql)
1、pg -> pg
2、edb ppas -> ppas
3、oracle -> pg (使用者積極配合改動,并有傾向使用開源版)
平安案例
郵儲案例
中國人壽案例
4、oracle -> ppas (使用者期望少改動)
中航信案例
大量ZF,傳統行業案例
使用ADAM,大量成功去O案例。
https://promotion.aliyun.com/ntms/act/ppasadam.html5、sybase, db2 -> pg
sybase (鐵老大案例)
db2 (蘇甯案例)
6、ms sql -> pg
(康恩貝案例)
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#2-%E6%96%B0%E4%B8%9A%E5%8A%A1 2 新業務
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#1%E5%A6%82%E6%9E%9Coracle%E5%8F%AF%E4%BB%A5%E5%85%8D%E8%B4%B9%E4%BD%BF%E7%94%A8%E7%94%A8%E6%88%B7%E9%80%89%E6%8B%A9oracle%E7%9A%84%E6%A6%82%E7%8E%87%E6%98%AF%E5%A4%9A%E5%B0%91%E5%A6%82%E6%9E%9C%E8%B6%85%E8%BF%8750%E7%9A%84%E6%A6%82%E7%8E%87%E9%80%89%E6%8B%A9oracle%E6%8E%A8%E8%8D%90%E5%88%B0pgpolardb-pg 1、如果Oracle可以免費使用,使用者選擇Oracle的機率是多少?如果超過50%的機率選擇Oracle,推薦到PG、POLARDB PG。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#2%E5%BD%93%E5%89%8D%E7%94%A8%E6%88%B7%E6%8A%80%E6%9C%AF%E6%A0%88 2、目前使用者技術棧
2.1、Oracle -> PPAS、POLARDB PG
2.2、sybase, db2 -> pg
2.3、ms sql -> pg
2.4、pg -> pg
2.5、edb ppas -> ppas
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#3%E4%B8%9A%E5%8A%A1%E5%A4%8D%E6%9D%82%E5%BA%A6 3、業務複雜度
3.1、複雜業務(有較複雜SQL,較複雜業務邏輯) -> PG
例如: 企業crm, erp, oa, 财務, 銷售, 經營分析系統,GIS地理資訊業務,等。 (此類場景典型PG客戶:用友,sap,odoo)
3.2、簡單業務 -> PG (同樣完全可以勝任)
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#4%E4%B8%9A%E5%8A%A1%E5%88%86%E7%B1%BB 4、業務分類
4.1、純AP
100TB 以内資料,純AP(T+1):POLARDB PG。
32TB 以内資料,純AP(T+1):PG 11。
4.2、實時分析:WHERE條件過濾後資料量億級。 POLARDB PG。 PG 11。
4.3、TP
PG, PPAS, POLARDB PG
4.4、混合場景(有TP,有AP)
100TB以内資料量:
POLARDB PG
32TB 以内資料量:
PG 11
6TB 以内資料量:
PG 10, PPAS 10
産品AP能力主要包括:并行計算、GPU加速、JIT、向量計算、流計算、物化視圖、豐富的分析函數、豐富的視窗查詢函數、HASH JOIN、MERGE JOIN、豐富的内置函數、豐富的PLSQL文法。
産品TP能力:單節點 百萬級QPS
4.5、海量資料,大量為冷資料,不能删除,極少查詢。
pg, ppas, polardb pg,均支援OSS_FDW外部表,冷存儲。查詢對業務透明。
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#5%E4%B8%9A%E5%8A%A1%E6%9C%89sharding%E9%9C%80%E6%B1%82%E4%BD%86%E6%98%AF%E4%B8%8D%E6%83%B3%E6%94%B9sql%E9%80%82%E9%85%8Dshardingsharding-%E5%B8%A6%E6%9D%A5%E7%9A%84sql%E4%BD%BF%E7%94%A8%E9%99%90%E5%88%B6%E5%8C%85%E6%8B%AC%E8%B7%A8%E5%BA%93%E4%BA%8B%E5%8A%A1%E8%B7%A8%E5%BA%93%E6%9F%A5%E8%AF%A2%E5%A4%8D%E6%9D%82sql%E7%BB%B4%E5%BA%A6%E8%A1%A8%E8%BF%87%E5%A4%A7%E7%AD%89%E9%97%AE%E9%A2%98 5、業務有SHARDING需求,但是不想改SQL适配sharding(sharding 帶來的SQL使用限制,包括跨庫事務,跨庫查詢,複雜SQL,次元表過大等問題)
https://github.com/digoal/blog/blob/master/197001/20190214_01.md#6%E4%B8%9A%E5%8A%A1%E6%9C%89%E5%A4%9A%E6%A8%A1%E9%9C%80%E6%B1%82%E5%B9%B6%E4%B8%94%E8%A6%81%E6%B1%82%E6%95%B0%E6%8D%AE%E4%B8%80%E8%87%B4%E6%80%A7%E5%AE%9E%E6%97%B6%E6%80%A7 6、業務有多模需求,并且要求資料一緻性,實時性
如果不要求實時性,一緻性,可以再考慮将資料同步到其他産品
6.1、全文檢索、模糊查詢(tsvector, tsquery, pg_trgm技術)
6.2、任意字段多元度組合實時查詢(smlar, rum, gin, bitmap scan, varbitx, roaring bitmap等技術)
例如:實時畫像系統、營銷系統。
6.3、文本相似查詢(pg_trgm技術)
6.4、向量相似查詢(cube技術)
例如:相似推薦系統
6.5、圖像相似查詢(imgsmlr技術)
6.6、GIS地理資訊業務(postgis, brin, gist技術)
例如:天文、氣象、地震、國土、測繪、車聯網、物聯網
6.7、時空軌迹、混合場景業務(ganos, postgis, brin, gist技術)
例如:餓了麼,點我達,打車,車聯網,
6.8、時序類(timescaledb 技術)
6.9、流計算(pipelinedb 技術)
6.10、圖式搜尋(CTE 技術)
例如:風控、族譜、社交、内容推薦、使用者推薦等 業務。
多模類業務,性能功能名額參考HTAP測試
《HTAP 用例測試,性能名額》