PgSQL · 案例分享 · PostgreSQL+HybridDB解决企业TP+AP混合需求
背景
隨著IT行業在更多的傳統行業滲透,我們正逐步的在進入DT時代,讓數據發揮價值是企業的真正需求,否則就是一堆廢的并且還持續消耗企業人力,財力的數據。
傳統企業可能并不像互聯網企業一樣,有大量的開發人員、有大量的技術儲備,通常還是以購買IT軟件,或者以外包的形式在存在。
數據的核心 - 數據庫,很多傳統的行業還在使用傳統的數據庫。
但是隨著IT向更多行業的滲透,數據類型越來越豐富(諸如人像、X光片、聲波、指紋、DNA、化學分子、圖譜數據、GIS、三維、多維 等等…… ),數據越來越多,怎么處理好這些數據,怎么讓數據發揮價值,已經變成了對IT行業,對數據庫的挑戰。
對于互聯網行業來說,可能對傳統行業的業務并不熟悉,或者說互聯網那一套技術雖然在互聯網中能很好的運轉,但是到了傳統行業可不一定,比如說用于科研、軍工的GIS,和互聯網常見的需求就完全不一樣。
除了對數據庫功能方面的挑戰,還有一方面的挑戰來自性能方面,隨著數據的爆炸,分析型的需求越來越難以滿足,主要體現在數據的處理速度方面,而常見的hadoop生態中的處理方式需要消耗大量的開發人員,同時并不能很好的支持品種繁多的數據類型,即使GIS可能也無法很好的支持,更別說諸如人像、X光片、聲波、指紋、DNA、化學分子、圖譜數據、GIS、三維、多維 等等。
那么我們有什么好的方法來應對這些用戶的痛處呢?
且看ApsaraDB產品線的PostgreSQL與HybridDB如何來一招左右互搏,左手在線事務處理,右手數據分析挖掘,解決企業痛處。
傳統的業務場景分析
以Oracle數據庫為例,系統具備以下特點
1. 可靠性
通過REDO日志提供可靠保障。
支持同步和異步模式,同步模式可以做到已提交的事務不丟失。
異步模式不保證已提交的事務不丟失,不保證一致性。
2. 高可用
通過主備模式以及集群套件提供高可用支持
通過共享存儲,RAC集群套件提供高可用支持, 注意應用連接設計時,不同的INSTANCE連接的應用應該訪問不同的數據塊,否則可能會因為GC鎖帶來性能嚴重下降。
通過共享存儲,主機集群套件提供高可用支持
3. 容災
通過存儲層遠程增量鏡像提供異地容災
通過主備模式以及增量復制提供異地容災
4. 備份恢復
通過歸檔和基礎備份提供在線備份以及時間點恢復功能
5. 性能診斷
AWR報告,通常包括
TOP SQL、wait event stats、io time、db time
6. 功能
PL/SQL編程,C嵌入式SQL,SQL:2013標準
數據庫編程
支持PL/SQL開發語言
支持C嵌入式開發
SQL兼容性
SQL: 2013
GIS
多種索引支持
數據類型豐富
語法例子
with, connect by, with, grouping set, rollup, cube
many building functions, OP, aggs
SQL HINT、物化視圖、RLS(行安全策略)
7. 擴展性
通過RAC和共享存儲,擴展主機的方式擴展,支持CPU并行計算
注意應用連接設計時,不同的INSTANCE連接的應用應該訪問不同的數據塊,否則可能會因為GC鎖帶來性能嚴重下降。
8. 多租戶隔離
比如Oracle 12C提出的PDB
9. 價格
通常按核收費,按特性收費,LICENSE 昂貴
用戶痛點分析
隨著用戶數據量的增長,數據庫的處理能力逐漸成為瓶頸。
1. 數據庫的計算能力
以ORACLE為例,傳統的非MPP架構數據庫,在執行大數據量運算時,受制于硬件限制,對于OLAP場景顯得很吃力。
2. 數據挖掘分析能力
以ORACLE為例,傳統的數據庫沒有機器學習套件,即使有,也受制于它的架構,無法發揮應對數據挖掘分析需求。
3. 擴展能力
RAC的擴展能力受到共享存儲的限制,存儲容易成為瓶頸
RAC的模式下面,必須確保APP不會跨實例訪問相同的數據塊,否則GC鎖沖突嚴重,性能比單節點下面明顯。
4. 可編程能力
支持的服務端編程語言僅PL/SQL,C。
不支持高級的類型擴展,函數擴展,OP擴展,索引擴展。
不適合企業快速發展的IT需求。
價格
昂貴
DT時代企業對數據的處理需求
除了對數據庫基本的增刪改查需求,備份恢復容災需求外。企業對數據處理的要求越來越高。
比如很多時候,用戶可能要實時的對數據進行清洗、分析、或者根據數據觸發事件。
隨著更多的業務接入IT系統,用戶需要存儲越來越多的非結構化的數據、貼近實際需求的數據(比如人像、化學分子式、X光片、基因串、等等現實世界的數據屬性),很多數據庫在這種情況下顯得力不從心,只能靠應用程序來處理,由于數據離計算單元越來越遠,效率變得低下。
阿里云ApsaraDB OLTP+OLAP需求 解決方案剖析
1. 通過以下PostgreSQL特性,可以支持OLTP+ 本地的10TB量級OLAP需求。
1. LLVM、CPU并行計算
2. 聚合算子復用
3. BRIN索引接口
2. 通過插件支持更多的業務數據類型需求
比如JSONB、圖片、人像、化學分子式、基因串、GIS、路由等。
3. 流式數據處理方法
使用pipelineDB可以與kafka, jstrom, PostgreSQL無縫結合,以及標準的SQL接口,兼容PostgreSQL.
4. PB級的分析、挖掘需求
HybridDB基于開源的MPP數據庫GPDB打造,有許多特點
支持彈性的增加節點,擴容時按表分區粒度進行,因此不堵塞其他表分區的讀寫
支持SQL標準以及諸多OLAP特性,
支持行列混合存儲、多級分區、塊級壓縮、多節點并行計算、多節點數據并行導入、
支持豐富的數據類型,包括JSON、GIS、全文檢索、語感、以及常見的文本、數值類型。
支持MADLib機器學習庫,有上百種常見的挖掘算法,通過SQL調用UDF訓練數據集即可,結合MPP實現了多節點并行的挖掘需求
支持數據節點間透明的數據重分布,廣播,在進行多表JOIN時,支持任意列的JOIN,
支持隨機分布,或按列分布,支持多列哈希分布,
支持哈希分區表、范圍分區表、多級分區
支持用戶使用python \ java編寫數據庫端的UDF
支持使用r客戶端通過pivotalR包連接數據庫,并將R的分析請求自動轉換為MADlib庫或SQL請求,實現R的隱式并行分析,同時數據和計算在一起,大幅提升了性能
支持HLL等估算數據類型,
支持透明的訪問阿里云高性能對象存儲OSS,通過OSS EXT插件,可以透明的并行訪問OSS的數據,
支持PostgreSQL生態,吸納更多已有的PostgreSQL生態中的特性
5. 透明的冷熱分離技術
一份數據,共享分析需求
在企業中,通常會有專門的分析師崗位,分析師在做建模前,需要經歷很多次的試錯,才能找到比較好的,可以固定的分析模型。
試錯期間,根據分析師的想法,結合業務表現,分析師可能需要對數據反復的訓練,這就對數據庫有兩種要求
1. 實時響應
2. 不干擾正常業務
實時響應對于MPP來說并不能,通常一個QUERY下去,毫秒級就可以響應,不需要等待任務調度。
而不干擾正常業務,這一點,可能就需要好好商榷了,因為一個QUERY可能把資源用光,當然,我們可以通過HybridDB的資源組來進行控制,比如給分析師的QUERY資源優先級降到最低,盡量減少對業務的干擾。
另外我們還有一種更加徹底的方法,數據共享,你可以把需要試錯的數據集放到OSS中,然后啟用一個空的PostgreSQL實例或者HybridDB實例,這些實例與生產實例完全無關,但是它可以去訪問OSS的數據,建立外部表即可,分析師可以使用這些實例,對數據集進行分析,不會影響生產。
6. 多個數據庫的銜接
通過rds_dbsync, dts, 或者云上BI、ETL廠商提供的ETL接口,幾乎可以將任意數據源的數據實時的同步到HybridDB進行分析。
通過 OSS 高速并行導入導出
高速 OSS 并行導入導出
dbsync 項目
HybridDB最佳實踐——實現OLAP和OLTP一體化打造
7. PostgreSQL,HybridDB 數據庫可靠性分析
原理與Oracle類似,同時支持用戶自由選擇同步或異步模式,異步模式犧牲了數據可靠性,提升性能,同時不影響一致性。
8. 多副本
用戶可以根據事務對可靠性的要求,選擇副本數。
比如涉及用戶賬戶的事務,至少要求2個副本。
而對于與用戶無關的日志事務,1個副本,甚至異步都可以。
給用戶設計應用時,提供了最大的靈活度。
9. 高可用方案
PostgreSQL高可用
PostgreSQL的高可用的方案與Oracle類似,支持共享存儲的方案,同時還支持流式復制的多副本方案,可以做到數據的0丟失。
HybridDB高可用
HybridDB的高可用方案,為mirror的方式,同步復制,數據0丟失。
master的fts負責數據節點的failover和failback。
master節點的ha則交由上層的集群應用來解決。
10. 容災
對于多機房容災,PostgreSQL和HybridDB在數據庫層面支持流式的復制解決方案。
同時還支持傳統的存儲或文件系統層面的鏡像容災。
11. PostgreSQL備份與恢復
對于存儲在OSS對象存儲中的數據,備份的只是DDL,即外部表的建表語句。
而對于存儲在數據庫中的數據,使用的備份方法與Oracle類似,支持REDO的增量備份,也支持數據塊級別的增量備份(具體見我寫過的塊級增量備份文檔)。
12. HybridDB備份與恢復
每個節點并行的進行。
13. 性能診斷和資源控制
與Oracle類似,支持常見的指標TOP SQL、wait event stats、io time、db time
同時支持對long query進行監控,包括long query的執行計劃翻轉,執行樹中每個節點耗費的時間,對BUFFER產生的操作,物理讀等
對于HybridDB,使用resource queue控制不同用戶對資源的使用
14. 數據庫功能(PostgreSQL)
數據庫功能方面,PostgreSQL超越了傳統數據庫所能COVER的數據類型、檢索、和數據的運算。
1. 數據庫編程
服務端支持PLpgSQL、python、java、R、javascript、perl、tcl 等開發語言
支持C嵌入式開發
plpgsql與Oracle PL/SQL功能不相上下
2. SQL兼容性
SQL: 2013
3. 語法例子
with, connect by(用WITH支持), with, grouping set, rollup, cube
many building functions, OP, aggs
PostGIS、JSONB
SQL PLAN HINT、物化視圖、RLS(行安全策略)
多種索引支持(btree, hash, brin, gin, gist, sp-gist, rum, bloom)
支持全文檢索、模糊查詢、正則匹配(走索引)
數據類型豐富(常用類型、數組、范圍、估值類型、分詞、幾何、序列、地球、GIS、網絡、大對象、比特串、字節流、UUID、XML、JSONB、復合、枚舉…… )
4. 支持ORACLE兼容包插件
5. 支持插件、支持FDW(透明訪問外部數據)、支持LANGUAGE擴展
6. 支持多個聚合函數共用SFUNC,提升性能
7. 擴展能力
支持用戶自定義數據類型、操作符、索引、UDF、窗口、聚合
15. 數據庫功能(HybridDB)
1. 數據庫編程
服務端支持PLpgSQL、pljava等開發語言
plpgsql與Oracle PL/SQL功能不相上下
2. SQL兼容性
with, connect by(用WITH支持), with, grouping set, rollup, cube
內置豐富的函數、操作符、聚合、窗口查詢
多種索引支持(btree),支持函數索引,支持partial index
支持全文檢索、字符串模糊查詢(fuzzystrmatch)
數據類型豐富(數字、字符串、比特串、貨幣、字節流、時間、布爾、幾何、網絡地址、數組、GIS、XML、JSON、復合、枚舉、。。。。。。)
支持ORACLE兼容包插件orafunc
3. 支持列存、行存、混合存儲
4. 支持隱式并行計算
5. 支持機器學習庫
6. 支持支持OSS_EXT(透明訪問OSS對象數據)
7. 支持HLL數據評估插件
8. 擴展能力
支持用戶自定義數據類型、操作符、索引、UDF、窗口、聚合
16. 數據庫擴展能力(PostgreSQL)
17. 數據庫擴展能力(HybridDB)
18. 多租戶功能
如何解決傳統用戶對OLTP+OLAP需求的痛處
1. 計算能力
由于傳統數據庫,比如ORACLE并非MPP架構,在執行大數據量運算時,受制于硬件限制,對于10TB以上的OLAP場景很吃力。
1.1 解決辦法
PostgreSQL 多CPU并行計算,解決TB級本地實時分析需求
PostgreSQL 數據通過REDO日志實時流式同步到HybridDB,解決PB級別OLAP場景需求。
2. 數據挖掘分析能力
由于傳統數據庫,比如ORACLE沒有機器學習套件,即使有,也受制于它的架構,無法發揮應對數據挖掘分析需求。
2.1 解決辦法
PostgreSQL和HybridDB都內置了MADLib機器學習庫,支持幾百種挖掘算法。
通過R,Python服務端編程,支持更多的挖掘需求。
3. 擴展能力
RAC的擴展能力受到共享存儲的限制,存儲容易成為瓶頸
RAC的模式下面,必須確保APP不會跨實例訪問相同的數據塊,否則GC鎖沖突嚴重,性能比單節點下面明顯。
3.1 解決辦法
PostgreSQL fdw based sharding + multimaster,支持單元化和水平擴展需求
HybridDB MPP天然支持水平擴展
4. 可編程能力
支持的服務端編程語言僅PL/SQL,C。
不支持高級的類型擴展,函數擴展,OP擴展,索引擴展。
不適合企業快速發展的IT需求。
4.1 解決辦法
PostgreSQL, HybridDB 支持plpgsql, C, python, java等多種語言的服務端編程。
支持數據類型、索引、函數、操作符、聚合、窗口函數等擴展。
一些不完全benchmark數據
一些不完全用戶
方案小結
在DT時代,讓數據發揮價值是企業的真正需求,否則就是一堆廢的并且還持續消耗企業人力,財力的數據。
使用本方案,可以讓企業更加輕松的駕馭暴增的數據,不管是什么數據類型,什么數據來源,是流式的還是在線或離線的數據分析需求,統統都能找到合理的方法來處置。
1. 高度兼容傳統數據庫,如Oracle
包括數據類型,過程語言,語法,內置函數,自定義函數,自定義數據類型
2. 解決了傳統數據庫如Oracle方案的痛點
3. 計算能力
PostgreSQL 多CPU并行計算,解決TB級本地實時分析需求
PostgreSQL 數據通過REDO日志實時流式同步到HybridDB,解決PB級別OLAP場景需求。
4. 數據挖掘分析能力
PostgreSQL和HybridDB都內置了MADLib機器學習庫,支持幾百種挖掘算法。
通過R,Python服務端編程,支持更多的挖掘需求。
5. 擴展能力
PostgreSQL fdw based sharding + multimaster,支持單元化和水平擴展需求
HybridDB MPP 天然支持水平擴展
6. 可編程能力
PostgreSQL, HybridDB 支持plpgsql, C, python, java等多種語言的服務端編程。
支持數據類型、索引、函數、操作符、聚合、窗口函數等擴展。
7. 支持估值類型
快速的輸出PV,UV,COUNT(DISTINCT)等估值。
8. 共享一份數據,構建多個分析實例
通常在企業中有分析師的角色,分析師要對數據頻繁的根據不同的分析框架進行分析,如果都發往主庫,可能導致主庫的計算壓力變大。
用戶可以將歷史數據,或者維度數據存放到共用的存儲(如OSS),通過FDW共享訪問,一份數據可以給多個實例加載分析。可以為分析師配備獨立的計算實例,數據則使用FDW從共享存儲(如OSS)加載,與主庫分離。
9. HybridDB優勢
支持AO列存,塊級壓縮,機器學習,混合存儲,MPP水平擴展,隱式并行,R,JAVA服務端編程語言支持,PB級別數據挖掘需求。
總結
以上是生活随笔為你收集整理的PgSQL · 案例分享 · PostgreSQL+HybridDB解决企业TP+AP混合需求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx + 阿里云SSL + tom
- 下一篇: (六)jQuery选择器