本文分享自華為云社區(qū)《GaussDB(DWS)行執(zhí)行引擎詳解》,作者:yd_227398895。 1.前言 GaussDB(DWS)包含三大引擎,一是SQL執(zhí)行引擎,用來(lái)解析用戶輸入的SQL語(yǔ)句,生成執(zhí)行計(jì)劃,供執(zhí)行引擎來(lái)執(zhí)行;二是執(zhí)行引擎,其中包含了行執(zhí)行引擎和列執(zhí)行引擎,執(zhí)行引擎即查詢的執(zhí)行者,
本文分享自華為云社區(qū)《GaussDB(DWS)行執(zhí)行引擎詳解》,作者:yd_227398895。
華為云的GaussDB(DWS)是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)系統(tǒng),它包含了三大引擎:SQL執(zhí)行引擎、執(zhí)行引擎和存儲(chǔ)引擎。其中,執(zhí)行引擎又包含了行執(zhí)行引擎和列執(zhí)行引擎。行執(zhí)行引擎在行存表中發(fā)揮作用,適用于傳統(tǒng)的OLTP(OnLine Transaction Processsing 聯(lián)機(jī)事務(wù)處理)場(chǎng)景,特別適合需要頻繁進(jìn)行增刪改查操作的業(yè)務(wù)。本文將深入探討行執(zhí)行引擎的組成和工作原理。
GaussDB(DWS)包含三大引擎,一是SQL執(zhí)行引擎,用來(lái)解析用戶輸入的SQL語(yǔ)句,生成執(zhí)行計(jì)劃,供執(zhí)行引擎來(lái)執(zhí)行;二是執(zhí)行引擎,其中包含了行執(zhí)行引擎和列執(zhí)行引擎,執(zhí)行引擎即查詢的執(zhí)行者,位于優(yōu)化器和存儲(chǔ)引擎之間,負(fù)責(zé)將數(shù)據(jù)從存儲(chǔ)引擎中讀取出來(lái),并根據(jù)計(jì)劃將數(shù)據(jù)處理加工后返回給客戶端,執(zhí)行引擎的目標(biāo)是為了更好地利用計(jì)算資源,更快地完成計(jì)算。三是存儲(chǔ)引擎,決定了數(shù)據(jù)庫(kù)數(shù)據(jù)的存取方式,直接影響了數(shù)據(jù)庫(kù)的讀寫(xiě)性能。
其中行執(zhí)行引擎應(yīng)用于行存表中,傳統(tǒng)的OLTP(OnLine Transaction Processsing 聯(lián)機(jī)事務(wù)處理)場(chǎng)景與功能、業(yè)務(wù)強(qiáng)相關(guān),數(shù)據(jù)需要進(jìn)行頻繁的增刪改查,這時(shí)比較適合使用行存儲(chǔ)式。行存儲(chǔ)的優(yōu)勢(shì)主要有兩個(gè)方面:首先是點(diǎn)查性能好,在點(diǎn)查場(chǎng)景下可以直接索引到某行數(shù)據(jù)的元組位置;其次就是更新效率高,行存儲(chǔ)在實(shí)時(shí)并發(fā)入庫(kù),并發(fā)更新方面依然有著比較大的優(yōu)勢(shì)。行執(zhí)行引擎的關(guān)鍵就是:一次處理一行數(shù)據(jù),即一tuple,適合數(shù)據(jù)頻繁更新,增刪改操作多,且查詢結(jié)果涉及表的多列的場(chǎng)景。
行執(zhí)行引擎的執(zhí)行基本單位是算子,查詢計(jì)劃是以樹(shù)的形式存在的,算子是執(zhí)行樹(shù)上的每個(gè)節(jié)點(diǎn)。每個(gè)算子需要經(jīng)歷初始化,執(zhí)行,清理的生命周期,執(zhí)行時(shí)包括遞歸遍歷計(jì)劃樹(shù)的各個(gè)節(jié)點(diǎn),從計(jì)劃樹(shù)根節(jié)點(diǎn)開(kāi)始,遞歸到葉節(jié)點(diǎn)來(lái)獲取一個(gè)tuple,經(jīng)過(guò)逐層節(jié)點(diǎn)算子的處理,返回一個(gè)結(jié)果tuple,直到再無(wú)tuple。整體算子的執(zhí)行采用Piepline模式,一次一tuple,控制流從上到下,數(shù)據(jù)流由下到上,圖示實(shí)線為控制流,虛線為數(shù)據(jù)流,使用上層來(lái)驅(qū)動(dòng)下層。
算子總共分為四類,掃描算子,控制算子,物化算子,連接算子等。對(duì)于分布式系統(tǒng)而言,還包括著stream算子等。
掃描算子用來(lái)掃描表中的數(shù)據(jù),每次獲取一條元組作為上層節(jié)點(diǎn)的輸入, 存在于查詢計(jì)劃樹(shù)的葉子節(jié)點(diǎn),它不僅可以掃描表,還可以掃描函數(shù)的結(jié)果集、鏈表結(jié)構(gòu)、子查詢結(jié)果集。一些比較常見(jiàn)的掃描算子如表所示。
連接算子對(duì)應(yīng)了關(guān)系代數(shù)中的連接操作,以表 t1 join t2 為例,主要的集中連接類型如下:inner join、left join、right join、full join、semi join、 anti join,其實(shí)現(xiàn)方式包括Nestloop、HashJoin、MergeJoin;
三類連接算子的實(shí)現(xiàn)方式特點(diǎn):
物化算子是一類可緩存元組的節(jié)點(diǎn)。在執(zhí)行過(guò)程中,很多擴(kuò)展的物理操作符需要首先獲取所有的元組才能進(jìn)行操作(例如聚集函數(shù)操作、沒(méi)有索引輔助的排序等),這是要用物化算子將元組緩存起來(lái);
控制算子是一類用于處理特殊情況的節(jié)點(diǎn),用于實(shí)現(xiàn)特殊的執(zhí)行流程。
其他算子包括Stream算子,以及RemoteQuery等算子
Stream算子主要有三種類型:Gather stream、Broadcast stream、Redistribute stream
小編推薦閱讀
機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀基于鴻蒙NEXT的血型遺傳計(jì)算器開(kāi)發(fā)案例
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)