天天看點

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

postgresql , hybriddb , htap , oltp , olap , 混合場景 , oracle , 企業痛點 , 資料庫痛點

随着it行業在更多的傳統行業滲透,我們正逐漸的在進入dt時代,讓資料發揮價值是企業的真正需求,否則就是一堆廢的并且還持續消耗企業人力,财力的資料。

傳統企業可能并不像網際網路企業一樣,有大量的開發人員、有大量的技術儲備,通常還是以購買it軟體,或者以外包的形式在存在。

資料的核心 - 資料庫,很多傳統的行業還在使用傳統的資料庫。

但是随着it向更多行業的滲透,資料類型越來越豐富(諸如人像、x光片、聲波、指紋、dna、化學分子、圖譜資料、gis、三維、多元 等等。。。),資料越來越多,怎麼處理好這些資料,怎麼讓資料發揮價值,已經變成了對it行業,對資料庫的挑戰。

對于網際網路行業來說,可能對傳統行業的業務并不熟悉,或者說網際網路那一套技術雖然在網際網路中能很好的運轉,但是到了傳統行業可不一定,比如說用于科研、軍工的gis,和網際網路常見的需求就完全不一樣。

除了對資料庫功能方面的挑戰,還有一方面的挑戰來自性能方面,随着資料的爆炸,分析型的需求越來越難以滿足,主要展現在資料的處理速度方面,而常見的hadoop生态中的處理方式需要消耗大量的開發人員,同時并不能很好的支援品種繁多的資料類型,即使gis可能也無法很好的支援,更别說諸如人像、x光片、聲波、指紋、dna、化學分子、圖譜資料、gis、三維、多元 等等。

那麼我們有什麼好的方法來應對這些使用者的痛處呢?

且看apsaradb産品線的postgresql與hybriddb如何來一招左右互搏,左手線上事務處理,右手資料分析挖掘,解決企業痛處。

以oracle資料庫為例,系統具備以下特點

通過redo日志提供可靠保障。

支援同步和異步模式,同步模式可以做到已送出的事務不丢失。

異步模式不保證已送出的事務不丢失,不保證一緻性。

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

通過主備模式以及叢集套件提供高可用支援

通過共享存儲,rac叢集套件提供高可用支援, 注意應用連接配接設計時,不同的instance連接配接的應用應該通路不同的資料塊,否則可能會因為gc鎖帶來性能嚴重下降。

通過共享存儲,主機叢集套件提供高可用支援

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

通過存儲層遠端增量鏡像提供異地容災

通過主備模式以及增量複制提供異地容災

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

通過歸檔和基礎備份提供線上備份以及時間點恢複功能

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

awr報告,通常包括

top sql、wait event stats、io time、db time

pl/sql程式設計,c嵌入式sql,sql:2013标準

支援pl/sql開發語言

支援c嵌入式開發

sql: 2013

gis

多種索引支援

資料類型豐富

with, connect by, with, grouping set, rollup, cube

many building functions, op, aggs

sql hint、物化視圖、rls(行安全政策)

通過rac和共享存儲,擴充主機的方式擴充,支援cpu并行計算

注意應用連接配接設計時,不同的instance連接配接的應用應該通路不同的資料塊,否則可能會因為gc鎖帶來性能嚴重下降。

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

比如oracle 12c提出的pdb

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

通常按核收費,按特性收費,license 昂貴

随着使用者資料量的增長,資料庫的處理能力逐漸成為瓶頸。

以oracle為例,傳統的非mpp架構資料庫,在執行大資料量運算時,受制于硬體限制,對于olap場景顯得很吃力。

以oracle為例,傳統的資料庫沒有機器學習套件,即使有,也受制于它的架構,無法發揮應對資料挖掘分析需求。

rac的擴充能力受到共享存儲的限制,存儲容易成為瓶頸

rac的模式下面,必須確定app不會跨執行個體通路相同的資料塊,否則gc鎖沖突嚴重,性能比單節點下面明顯。

支援的服務端程式設計語言僅pl/sql,c。

不支援進階的類型擴充,函數擴充,op擴充,索引擴充。

不适合企業快速發展的it需求。

昂貴

除了對資料庫基本的增删改查需求,備份恢複容災需求外。企業對資料處理的要求越來越高。

比如很多時候,使用者可能要實時的對資料進行清洗、分析、或者根據資料觸發事件。

随着更多的業務接入it系統,使用者需要存儲越來越多的非結構化的資料、貼近實際需求的資料(比如人像、化學分子式、x光片、基因串、等等現實世界的資料屬性),很多資料庫在這種情況下顯得力不從心,隻能靠應用程式來處理,由于資料離計算單元越來越遠,效率變得低下。

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》
ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

1. llvm、cpu并行計算

2. 聚合算子複用

3. brin索引接口

比如jsonb、圖檔、人像、化學分子式、基因串、gis、路由等。

使用pipelinedb可以與kafka, jstrom, postgresql無縫結合,以及标準的sql接口,相容postgresql.

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生态中的特性

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

在企業中,通常會有專門的分析師崗位,分析師在做模組化前,需要經曆很多次的試錯,才能找到比較好的,可以固定的分析模型。

試錯期間,根據分析師的想法,結合業務表現,分析師可能需要對資料反複的訓練,這就對資料庫有兩種要求

1. 實時響應

2. 不幹擾正常業務

實時響應對于mpp來說并不能,通常一個query下去,毫秒級就可以響應,不需要等待任務排程。

而不幹擾正常業務,這一點,可能就需要好好商榷了,因為一個query可能把資源用光,當然,我們可以通過hybriddb的資源組來進行控制,比如給分析師的query資源優先級降到最低,盡量減少對業務的幹擾。

另外我們還有一種更加徹底的方法,資料共享,你可以把需要試錯的資料集放到oss中,然後啟用一個空的postgresql執行個體或者hybriddb執行個體,這些執行個體與生産執行個體完全無關,但是它可以去通路oss的資料,建立外部表即可,分析師可以使用這些執行個體,對資料集進行分析,不會影響生産。

通過rds_dbsync, dts, 或者雲上bi、etl廠商提供的etl接口,幾乎可以将任意資料源的資料實時的同步到hybriddb進行分析。

通過 oss 高速并行導入導出

<a href="https://help.aliyun.com/document_detail/35457.html?spm=5176.8115115.382043.8.9yeco0">https://help.aliyun.com/document_detail/35457.html?spm=5176.8115115.382043.8.9yeco0</a>

<a href="https://github.com/aliyun/rds_dbsync">https://github.com/aliyun/rds_dbsync</a>

https://yq.aliyun.com/articles/66902  

原理與oracle類似,同時支援使用者自由選擇同步或異步模式,異步模式犧牲了資料可靠性,提升性能,同時不影響一緻性。

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》
ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

使用者可以根據事務對可靠性的要求,選擇副本數。

比如涉及使用者賬戶的事務,至少要求2個副本。

而對于與使用者無關的日志事務,1個副本,甚至異步都可以。

給使用者設計應用時,提供了最大的靈活度。

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

postgresql的高可用的方案與oracle類似,支援共享存儲的方案,同時還支援流式複制的多副本方案,可以做到資料的0丢失。

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

hybriddb的高可用方案,為mirror的方式,同步複制,資料0丢失。

master的fts負責資料節點的failover和failback。

master節點的ha則交由上層的叢集應用來解決。

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

對于多機房容災,postgresql和hybriddb在資料庫層面支援流式的複制解決方案。

同時還支援傳統的存儲或檔案系統層面的鏡像容災。

對于存儲在oss對象存儲中的資料,備份的隻是ddl,即外部表的建表語句。

而對于存儲在資料庫中的資料,使用的備份方法與oracle類似,支援redo的增量備份,也支援資料塊級别的增量備份(具體見我寫過的塊級增量備份文檔)。

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

每個節點并行的進行。

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

與oracle類似,支援常見的名額top sql、wait event stats、io time、db time

同時支援對long query進行監控,包括long query的執行計劃翻轉,執行樹中每個節點耗費的時間,對buffer産生的操作,實體讀等

對于hybriddb,使用resource queue控制不同使用者對資源的使用

資料庫功能方面,postgresql超越了傳統資料庫所能cover的資料類型、檢索、和資料的運算。

1. 資料庫程式設計

服務端支援plpgsql、python、java、r、javascript、perl、tcl 等開發語言

plpgsql與oracle pl/sql功能不相上下

2. sql相容性

3. 文法例子

with, connect by(用with支援), with, grouping set, rollup, cube

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、視窗、聚合

服務端支援plpgsql、pljava等開發語言

内置豐富的函數、操作符、聚合、視窗查詢

多種索引支援(btree),支援函數索引,支援partial index

支援全文檢索、字元串模糊查詢(fuzzystrmatch)

資料類型豐富(數字、字元串、比特串、貨币、位元組流、時間、布爾、幾何、網絡位址、數組、gis、xml、json、複合、枚舉、。。。。。。)

支援oracle相容包插件orafunc

3. 支援列存、行存、混合存儲

4. 支援隐式并行計算

5. 支援機器學習庫

6. 支援支援oss_ext(透明通路oss對象資料)

7. 支援hll資料評估插件

8. 擴充能力

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》
ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》
ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

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. 擴充能力

3.1 解決辦法

postgresql fdw based sharding + multimaster,支援單元化和水準擴充需求

hybriddb mpp天然支援水準擴充

4. 可程式設計能力

4.1 解決辦法

postgresql, hybriddb 支援plpgsql, c, python, java等多種語言的服務端程式設計。

支援資料類型、索引、函數、操作符、聚合、視窗函數等擴充。

ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》
ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》
ApsaraDB的左右互搏術 - 解決企業痛處 TP+AP混合需求 - 無須再唱《愛你痛到不知痛》

在dt時代,讓資料發揮價值是企業的真正需求,否則就是一堆廢的并且還持續消耗企業人力,财力的資料。

使用本方案,可以讓企業更加輕松的駕馭暴增的資料,不管是什麼資料類型,什麼資料來源,是流式的還是線上或離線的資料分析需求,統統都能找到合理的方法來處置。

1. 高度相容傳統資料庫,如oracle

包括資料類型,過程語言,文法,内置函數,自定義函數,自定義資料類型

2. 解決了傳統資料庫如oracle方案的痛點

3. 計算能力

4. 資料挖掘分析能力

5. 擴充能力

hybriddb mpp 天然支援水準擴充

6. 可程式設計能力

7. 支援估值類型

快速的輸出pv,uv,count(distinct)等估值。

8. 共享一份資料,建構多個分析執行個體

通常在企業中有分析師的角色,分析師要對資料頻繁的根據不同的分析架構進行分析,如果都發往主庫,可能導緻主庫的計算壓力變大。

使用者可以将曆史資料,或者次元資料存放到共用的存儲(如oss),通過fdw共享通路,一份資料可以給多個執行個體加載分析。可以為分析師配備獨立的計算執行個體,資料則使用fdw從共享存儲(如oss)加載,與主庫分離。

9. hybriddb優勢

支援ao列存,塊級壓縮,機器學習,混合存儲,mpp水準擴充,隐式并行,r,java服務端程式設計語言支援,pb級别資料挖掘需求。

postgresql是一個 "很有愛" 的資料庫,用心學習它,用心回報社會吧。

<a href="https://github.com/digoal/blog/blob/master/201612/20161228_01.md">《從天津濱海新區大爆炸、危化品監管聊聊 it人背負的社會責任感》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161230_01.md">《postgresql 重複 資料清洗 優化教程》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161231_01.md">《從難纏的模糊查詢聊開 - postgresql獨門絕招之一 gin , gist , sp-gist , rum 索引原理與技術背景》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161227_01.md">《從真假美猴王談起 - 讓套牌車、克隆x 無處遁形的技術手段思考》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161225_01.md">《恭迎萬億級營銷(圈人)潇灑的邁入毫秒時代 - 萬億user_tags級實時推薦系統資料庫設計》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161224_01.md">《dba專供 岡本003系列 - 資料庫安全第一,過個好年》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161223_01.md">《聊一下postgresql優化器 - in裡面有重複值時postgresql如何處理?》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161222_02.md">《從相似度算法談起 - effective similarity search in postgresql》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161222_01.md">《一場it民工 與 人販子 之間的戰争 - 隻要人人都獻出一點愛》</a>

<a href="https://github.com/digoal/blog/blob/master/201512/20151215_01.md">《"物聯網"流式處理應用 - 用postgresql實時處理(萬億每天)》</a>

<a href="https://github.com/digoal/blog/blob/master/201606/20160621_1.md">《為了部落 - 如何通過postgresql基因配對,産生優良下一代》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161220_01.md">《流計算風雲再起 - postgresql攜pipelinedb力挺iot》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161216_01.md">《分析加速引擎黑科技 - llvm、列存、多核并行、算子複用 大聯姻 - 一起來開啟postgresql的百寶箱》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161213_01.md">《金融風控、公安刑偵、社會關系、人脈分析等需求分析與資料庫實作 - postgresql圖資料庫場景應用》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161205_02.md">《實時資料交換平台 - bottledwater-pg with confluent》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161126_01.md">《postgresql 在視訊、圖檔去重,圖像搜尋業務中的應用》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161021_01.md">《基于 阿裡雲 rds postgresql 打造實時使用者畫像推薦系統》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161124_02.md">《postgresql 與 12306 搶火車票的思考》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161124_01.md">《門禁廣告銷售系統需求剖析 與 postgresql資料庫實作》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161114_01.md">《聊一聊雙十一背後的技術 - 物流、動态路徑規劃》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161115_01.md">《聊一聊雙十一背後的技術 - 分詞和搜尋》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161117_01.md">《聊一聊雙十一背後的技術 - 不一樣的秒殺技術, 裸秒》</a>

<a href="https://github.com/digoal/blog/blob/master/201611/20161118_01.md">《聊一聊雙十一背後的技術 - 毫秒分詞算啥, 試試正則和相似度》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161001_01.md">《postgresql 9.6 引領開源資料庫攻克多核并行計算難題》</a>

<a href="https://github.com/digoal/blog/blob/master/201609/20160929_02.md">《postgresql 前世今生》</a>

<a href="https://github.com/digoal/blog/blob/master/201609/20160906_01.md">《如何建立gis測試環境 - 将openstreetmap的樣本資料導入postgresql postgis庫》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161004_01.md">《postgresql 9.6 單元化,sharding (based on postgres_fdw) - 核心層支援前傳》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161005_01.md">《postgresql 9.6 sharding + 單元化 (based on postgres_fdw) 最佳實踐 - 通用水準分庫場景設計與實踐》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161027_01.md">《postgresql 9.6 sharding based on fdw &amp; pg_pathman》</a>

<a href="https://github.com/digoal/blog/blob/master/201610/20161024_01.md">《postgresql 9.5+ 高效分區表實作 - pg_pathman》</a>

<a href="https://github.com/digoal/blog/blob/master/201506/20150601_01.md">《postgresql 資料庫安全指南》</a>

<a href="https://github.com/digoal/blog/blob/master/201605/20160523_01.md">《postgresql 9.6 黑科技 bloom 算法索引,一個索引支撐任意列組合查詢》</a>

<a href="https://github.com/digoal/blog/blob/master/201607/20160725_01.md">《postgresql 使用遞歸sql 找出資料庫對象之間的依賴關系》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161203_01.md">《用postgresql描繪人生的高潮、尿點、低谷 - 視窗/幀 or 斜率/導數/曲率/微積分?》</a>

<a href="https://github.com/digoal/blog/blob/master/201612/20161201_01.md">《用postgresql找回618秒逝去的青春 - 遞歸收斂優化》</a>

<a href="https://yq.aliyun.com/articles/50922">《postgis 在 o2o應用中的優勢》</a>

<a href="https://yq.aliyun.com/articles/2999">《postgresql 百億地理位置資料 近鄰查詢性能》</a>