小編給大家分享一下怎么通過postgresql數(shù)據(jù)倉庫實現(xiàn)湖倉一體數(shù)據(jù)分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,白沙黎族企業(yè)網(wǎng)站建設,白沙黎族品牌網(wǎng)站建設,網(wǎng)站定制,白沙黎族網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,白沙黎族網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
// 一.背景
隨著云計算的普及和數(shù)據(jù)分析需求的擴大,數(shù)據(jù)湖+數(shù)據(jù)倉庫的湖倉一體分析能力成為下一代數(shù)據(jù)分析系統(tǒng)的核心能力。相對于數(shù)據(jù)倉庫,數(shù)據(jù)湖在成本、靈活性、多源數(shù)據(jù)分析等多方面,都有著非常明顯的優(yōu)勢。IDC發(fā)布的十項2021年中國云計算市場趨勢預測中,有三項和數(shù)據(jù)湖分析有關。可以預見,跨系統(tǒng)集成能力、數(shù)據(jù)控制能力和更加全面的數(shù)據(jù)驅動能力,將會是未來數(shù)據(jù)分析系統(tǒng)重要的競爭領域。
AnalyticDB PostgreSQL版(簡稱ADB PG)是阿里云數(shù)據(jù)庫團隊基于PostgreSQL內(nèi)核(簡稱PG)打造的一款云原生數(shù)據(jù)倉庫產(chǎn)品。在PB級數(shù)據(jù)實時交互式分析、HTAP、ETL、BI報表生成等業(yè)務場景,ADB PG都有著獨特的技術優(yōu)勢。作為一個數(shù)據(jù)倉庫產(chǎn)品,ADB PG是如何具備湖倉一體分析能力呢?本文將會介紹ADB PG如何基于PG外表、打造數(shù)據(jù)湖分析能力。
ADB PG繼承了PG的外表(Foreign Table)功能,目前ADB PG的湖倉一體能力主要是基于外表打造的?;赑G外表,ADB PG可以對其他數(shù)據(jù)分析系統(tǒng)的數(shù)據(jù)進行查詢和寫入,在兼容多種數(shù)據(jù)源的同時,復用ADB PG原有的優(yōu)化器和執(zhí)行引擎優(yōu)勢。ADB PG的湖倉一體分析能力目前已經(jīng)支持OSS、MaxCompute、Hadoop、RDS PG、Oracle、RDS MySQL等多種數(shù)據(jù)源的分析或者寫入。用戶可以靈活地將ADB PG應用于數(shù)據(jù)存儲、交互式分析、ETL等不同領域,可以在單個實例中實現(xiàn)多種數(shù)據(jù)分析功能。即可以用ADB PG完成數(shù)據(jù)分析的核心流程,也可以作為眾多環(huán)節(jié)中的一環(huán)去搭建數(shù)據(jù)鏈路。
不過,外表數(shù)據(jù)的分析依賴于外部SDK和網(wǎng)絡IO來實現(xiàn)數(shù)據(jù)讀寫,由于網(wǎng)絡本身的特性與本地磁盤有巨大差異,因此需要在技術層面與本地存儲不同、需要不同的性能優(yōu)化方案。本文以OSS外表數(shù)據(jù)讀寫為例,介紹ADB PG在構建湖倉一體分析能力時,所遇到的一些重要問題和解決方案。
// 二.問題分析
ADB PG內(nèi)核可以分為優(yōu)化器、執(zhí)行引擎和存儲引擎。外表數(shù)據(jù)分析可以復用ADB PG原有的優(yōu)化器和執(zhí)行引擎的核心部分,僅需少量修改。主要擴展是存儲引擎層的改造,也就是通過外表接口對外表數(shù)據(jù)進行讀寫。外表數(shù)據(jù)是存儲在另一個分布式系統(tǒng)當中,需要通過網(wǎng)絡與ADB PG進行連接,這是和讀取本地文件的最核心的區(qū)別。一方面,不同的外表數(shù)據(jù)會提供不同的遠程訪問接口,需要在工程上進行兼容,比如OSS、MaxCompute的數(shù)據(jù)讀取接口都不相同。另一方面,通過網(wǎng)絡訪問遠程機器上的數(shù)據(jù)有一定的共性,比如網(wǎng)絡的延遲、網(wǎng)絡放大、帶寬限制、網(wǎng)絡穩(wěn)定性問題等。
本文將會圍繞上述核心挑戰(zhàn),介紹ADB PG外表分析項目在支持OSS數(shù)據(jù)分析過程中的一些重要技術點。OSS是一種阿里云推出的一種低成本分布式存儲系統(tǒng),存儲了大量的冷熱數(shù)據(jù),有較大的數(shù)據(jù)分析需求。為了方便開發(fā)者進行擴展,OSS提供了基于Java、Go、C/C++、Python等主流開發(fā)語言的SDK。ADB PG采用了OSS C SDK進行開發(fā)。目前ADB PG已經(jīng)完美支持OSS外表分析的各項功能,除建表語句不同外,用戶可以像訪問本地表一樣訪問OSS外表。支持并發(fā)讀取和寫入,支持CSV、ORC、Parquet等常見數(shù)據(jù)格式。
3.2 列過濾與謂詞下推
由于網(wǎng)絡本身的IO性能往往是低于本地存儲的IO性能的,因此在掃描外表數(shù)據(jù)時,要盡量減少IO的帶寬資源消耗。ADB PG在處理ORC、Parquet格式的文件時,采用了列過濾和謂詞下推技術,來達到這一目的。
列過濾,即外表只請求SQL查詢所需的數(shù)據(jù)列、忽略不需要的數(shù)據(jù)列。因為ORC、Parquet都是列式存儲格式,所以外表在發(fā)起網(wǎng)絡請求時,只需請求所需列所在的數(shù)據(jù)范圍即可,從而大幅減小網(wǎng)絡I/O。同時,ORC、Parquet會對列數(shù)據(jù)進行壓縮處理,進一步減小I/O。
謂詞下推,是將執(zhí)行計劃里的上層的過濾條件(如WHERE子句中的條件),移動到下層的外表掃描節(jié)點,使外表掃描進行網(wǎng)絡請求時,過濾掉不符合查詢條件的數(shù)據(jù)塊,從而減少網(wǎng)絡I/O。在ORC/Parquet格式文件中,會在每一個block頭部保存該block中每一列數(shù)據(jù)的min/max/sum等統(tǒng)計信息,當外表掃描時,會先讀取該block的頭部統(tǒng)計信息,與下推的查詢條件進行比較,如果該列的統(tǒng)計信息不符合查詢條件,則可以直接跳過該列數(shù)據(jù)。
這里簡單介紹ORC格式的外表的謂詞下推的實現(xiàn)方案。一個ORC文件按數(shù)據(jù)行分成若干個Stripe組成,Stripe中數(shù)據(jù)按列式存儲。每個Stripe又分為若干個Row Group, 所有列的每 10000行 組成一個Row Group。如下圖所示。
① ADB PG訪問OSS外表時,先從CURL連接池中獲取連接,若不存在則新建。
② ADB PG使用CURL連接句柄與OSS Server請求通信。
③ OSS Server通過CURL連接句柄返回通信結果。
④ 正常返回的CURL連接句柄使用完畢后加回連接池待下次使用。
⑤ 異常狀態(tài)的CURL連接句柄銷毀。
3.4 內(nèi)存管理方案的兼容問題
ADB PG基于PostgreSQL內(nèi)核打造,也繼承了PostgreSQL的內(nèi)存管理機制。PostgreSQL的內(nèi)存管理采用了進程安全的內(nèi)存上下文MemoryContext,而OSS C SDK是線程安全的內(nèi)存上下文APR Pool。在MemoryContext內(nèi)存環(huán)境下,每個已經(jīng)分配的內(nèi)存,都可以顯式地調(diào)用free釋放,由MemoryContext進行內(nèi)存碎片的整理,但在APR Pool中,我們只看到內(nèi)存池的創(chuàng)建、內(nèi)存的申請和內(nèi)存池的銷毀等操作,卻沒有內(nèi)存的顯式釋放接口。
這種情況意味著,我們需要對于OSS C SDK接口所持有的內(nèi)存的生命周期有明確的了解,否則極易出現(xiàn)內(nèi)存泄漏和訪問已經(jīng)釋放的內(nèi)存等問題。通常我們會按照如下兩種方式申請APR Pool的內(nèi)存。
方式一適用于重入低頻的操作接口,如獲取OSS文件清單列表。
方式二適用于多次重入的操作接口,如周期性向OSS請求指定文件指定范圍的數(shù)據(jù)。
通過這種方法,可以很好地解決ADB PG與OSS C SDK在內(nèi)存管理方面的不兼容問題。
下圖是TPCH 22條查詢的詳細時間。本地表與外表的性能差距在不同的查詢上差距有所不同??紤]到外表在存儲成本、靈活性、擴展能力方面的優(yōu)勢,ADB PG外表分析在應用場景的潛力是巨大的。
看完了這篇文章,相信你對“怎么通過postgresql數(shù)據(jù)倉庫實現(xiàn)湖倉一體數(shù)據(jù)分析”有了一定的了解,如果想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!