您好,登錄后才能下訂單哦!
這篇文章主要介紹Orca的架構(gòu)是怎么樣的,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
大數(shù)據(jù)系統(tǒng)的流行引起了人們對查詢優(yōu)化的新興趣,因為新型的數(shù)據(jù)管理系統(tǒng)在前所未有的可擴展性,可用性和處理能力方面取得了突破,通過SQL或類似SQL的接口,可以輕松訪問數(shù)百TB甚至PB的大型數(shù)據(jù)集進行分析。優(yōu)秀的和平庸的優(yōu)化器之間的差異一直是眾所周知的[。但是,這些系統(tǒng)必須處理的數(shù)據(jù)量越來越大,從而加劇了優(yōu)化錯誤,并比以往任何時候都需要強調(diào)查詢優(yōu)化的重要性。
好的查詢優(yōu)化器在架構(gòu)設(shè)計上需要考慮以下的幾個方面:
模塊化。使用元數(shù)據(jù)和系統(tǒng)描述的高度可擴展的抽象,不再局限于特定的主機系統(tǒng),如傳統(tǒng)的優(yōu)化器。相反,可以通過數(shù)據(jù)支持的插件將其快速移植到其他數(shù)據(jù)管理系統(tǒng)。
可擴展性。通過將查詢及其優(yōu)化的所有元素表示為具有同等地位的一等公民,避免多階段優(yōu)化的陷阱,在此階段,某些優(yōu)化將在事后進行處理。眾所周知,多階段優(yōu)化器難以擴展,因為新的優(yōu)化或查詢構(gòu)造通常與先前設(shè)置的階段邊界不匹配。
支持多核架構(gòu)。 系統(tǒng)需要部署一個高效的多核感知調(diào)度程序,該調(diào)度程序可在多個內(nèi)核之間分配各個細粒度的優(yōu)化子任務(wù),以加快優(yōu)化過程。
可驗證性。有確定的特殊規(guī)定內(nèi)置機制級別來保證正確性和性能。除了改善工程實踐之外,這些工具還使人們能夠高度自信地進行快速開發(fā),并縮短了新功能和錯誤修復(fù)的周轉(zhuǎn)時間。
性能。 查詢的性能是我們最希望等到的結(jié)果
一、MPP架構(gòu)
Orca是Pivatol開發(fā)的大數(shù)據(jù)模塊化查詢優(yōu)化器,被用于Greemplum和Hawq之中。他就是按照上面的要求來設(shè)計的。
上圖是Greemplum的體系架構(gòu),通過在多個服務(wù)器或主機之間分配負載以創(chuàng)建單個數(shù)據(jù)庫陣列來處理大量數(shù)據(jù)的存儲和處理,所有這些數(shù)據(jù)庫共同工作以呈現(xiàn)單個數(shù)據(jù)庫入口。 主節(jié)點是GPDB的入口點,客戶端可以在此連接并提交SQL語句。 主節(jié)點與其他數(shù)據(jù)庫實例(稱為段)協(xié)同工作,以處理數(shù)據(jù)處理和存儲。 當(dāng)查詢提交給主節(jié)點時,將對其進行優(yōu)化并將其分解為較小的查詢,這些較小的查詢將被分配給各部分,以共同協(xié)作以交付最終結(jié)果。 互連使用標(biāo)準的千兆以太網(wǎng)交換結(jié)構(gòu),負責(zé)各段之間的進程間通信的聯(lián)網(wǎng)層。
在查詢執(zhí)行期間,可以通過多種方式將數(shù)據(jù)分布到段,包括散列分布,其中元組根據(jù)某種哈希函數(shù)分布到段,復(fù)制分布,其中表的完整副本存儲在每個段和單例分布,其中整個分布式表從多個段收集到單個主機(通常是主節(jié)點)。
二、SQL on Hadoop 架構(gòu)
在Hadoop上處理分析查詢正變得越來越流行。最初,查詢表示為MapReduce工作和Hadoop的吸引力在于其可擴展性和容錯能力。編碼,手動優(yōu)化和維護MapReduce中的復(fù)雜查詢非常困難,因此像類似SQL的聲明性語言是在Hadoop之上開發(fā)的。 HiveQL查詢被編譯到MapReduce作業(yè)中,并由Hadoop執(zhí)行。 HiveQL加快了復(fù)雜查詢的編碼速度,但同時也很明顯地表明,Hadoop生態(tài)系統(tǒng),因為已編譯的MapReduce作業(yè)顯示了較差的性能。
Pivotal通過引入HAWQ 來應(yīng)對挑戰(zhàn),它是一種在HDFS之上的大規(guī)模并行SQL兼容引擎。 HAWQ以O(shè)rca為核心來設(shè)計有效的查詢計劃,從而最大程度地降低訪問Hadoop集群中數(shù)據(jù)的成本。 HAWQ的體系結(jié)構(gòu)將創(chuàng)新的基于成本的最先進的優(yōu)化器與Hadoop的可伸縮性和容錯能力相結(jié)合,以實現(xiàn)PB級數(shù)據(jù)的交互式處理。
最近,包括Cloudera的Impala和Facebook的Presto在內(nèi)的許多其他努力引入了新的優(yōu)化器,以在Hadoop上應(yīng)用SQL處理。當(dāng)前,這些工作僅支持SQL標(biāo)準功能的一部分,并且其優(yōu)化僅限于基于規(guī)則的。相比之下,HAWQ具有完全符合標(biāo)準的SQL接口和基于成本的優(yōu)化器,這兩者都是Hadoop查詢引擎中前所未有的功能。
三、Orca的架構(gòu)
Orca是Pivotal研發(fā)的數(shù)據(jù)管理產(chǎn)品(包括GPDB和HAWQ)的新查詢優(yōu)化器。 Orca是基于Cascades優(yōu)化框架的現(xiàn)代的自上而下的查詢優(yōu)化器。 盡管許多Cascades優(yōu)化器與主機系統(tǒng)緊密耦合,但是Orca的獨特功能是它能夠作為獨立的優(yōu)化器在數(shù)據(jù)庫系統(tǒng)之外運行。 此功能對于使用一個優(yōu)化程序支持具有不同計算架構(gòu)(例如MPP和Hadoop)的產(chǎn)品至關(guān)重要。
1. DXL
將優(yōu)化器與數(shù)據(jù)庫系統(tǒng)分離,需要建立一種通信機制來處理查詢。 Orca包括一個用于在優(yōu)化器和數(shù)據(jù)庫系統(tǒng)之間交換信息的框架,稱為數(shù)據(jù)交換語言(DXL)。 該框架使用基于XML的語言對通信所需的信息進行編碼,例如輸入查詢,輸出計劃和元數(shù)據(jù)。 覆蓋在DXL上的是一種簡單的通信協(xié)議,用于發(fā)送初始查詢結(jié)構(gòu)并檢索優(yōu)化的計劃。 DXL的主要優(yōu)點是將Orca包裝為獨立產(chǎn)品。
Orca的輸入是DXL查詢,Orca的輸出是DXL計劃。在優(yōu)化期間,可以查詢數(shù)據(jù)庫系統(tǒng)以獲取元數(shù)據(jù)(例如,表定義)。 Orca通過允許數(shù)據(jù)庫系統(tǒng)注冊元數(shù)據(jù)提供程序(MD Provider)來抽象化元數(shù)據(jù)訪問詳細信息,該數(shù)據(jù)提供程序負責(zé)將元數(shù)據(jù)序列化為DXL,然后再發(fā)送給Orca。還可以從包含以DXL格式序列化的元數(shù)據(jù)對象的常規(guī)文件中使用元數(shù)據(jù)。
數(shù)據(jù)庫系統(tǒng)需要包括使用/發(fā)送DXL格式數(shù)據(jù)的轉(zhuǎn)換器。 Query2DXL轉(zhuǎn)換器將查詢分析樹轉(zhuǎn)換為DXL查詢,而DXL2Plan轉(zhuǎn)換器將DXL計劃轉(zhuǎn)換為可執(zhí)行計劃。此類轉(zhuǎn)換器的實現(xiàn)完全在Orca之外完成,這允許多個系統(tǒng)通過提供適當(dāng)?shù)霓D(zhuǎn)換器來使用Orca。 Orca的體系結(jié)構(gòu)具有高度的可擴展性。所有組件均可單獨更換并單獨配置。
2. Orca的不同組件包
(1) Memo
由優(yōu)化器生成的計劃替代方案的空間被編碼在稱為Memo 的緊湊型內(nèi)存數(shù)據(jù)結(jié)構(gòu)中。 Memo結(jié)構(gòu)由一組稱為組的容器組成,其中每個組包含邏輯上等效的表達式。 Memo組捕獲查詢的不同子目標(biāo)(例如,表上的過濾器或兩個表的聯(lián)接)。 稱為組表達式的組成員以不同的邏輯方式(例如,不同的連接順序)實現(xiàn)組目標(biāo)。 每個組表達式都是一個運算符,具有其他組作為其子級。 Memo的這種遞歸結(jié)構(gòu)允許對可能的計劃的巨大空間進行緊湊的編碼。
(2) 搜索和作業(yè)計劃程序
Orca使用搜索機制在可能的計劃替代方案的空間中導(dǎo)航,并以最低的估計成本確定計劃。 搜索機制由專門的Job Scheduler啟用,該Job Scheduler通過以下三個主要步驟來創(chuàng)建依賴或并行工作單元以執(zhí)行查詢優(yōu)化:探索(在其中生成等效的邏輯表達式),實現(xiàn)(在其中生成物理計劃)和優(yōu)化(在所需的物理屬性中,例如,排序順序),并計劃替代方案的成本。
(3) 變形
通過應(yīng)用可以產(chǎn)生等效邏輯表達式(例如,InnerJoin(A,B)→InnerJoin(B,A))或現(xiàn)有表達式的物理實現(xiàn)(例如,Join(A,B)的轉(zhuǎn)換規(guī)則,可以生成計劃替代方案 )→HashJoin(A,B))。 應(yīng)用轉(zhuǎn)換規(guī)則的結(jié)果將復(fù)制到Memo中,這可能會導(dǎo)致創(chuàng)建新組和/或向現(xiàn)有組添加新的組表達式。 每個轉(zhuǎn)換規(guī)則都是一個獨立的組件,可以在Orca配置中顯式激活/禁用它。
(4) 屬性強制
Orca包括一個可擴展的框架,用于根據(jù)正式的屬性規(guī)范描述查詢要求和計劃特征。 屬性具有不同的類型,包括邏輯屬性(例如,輸出列),物理屬性(例如,排序順序和數(shù)據(jù)分布)和標(biāo)量屬性(例如,連接條件中使用的列)。 在查詢優(yōu)化期間,每個運算符都可以從其子級請求特定的屬性。 優(yōu)化的子計劃可能自己滿足所需的屬性(例如,IndexScan計劃提供排序的數(shù)據(jù)),或者需要在計劃中插入強制程序(例如,Sort運算符)以交付所需的屬性。 該框架允許每個操作符根據(jù)子計劃的屬性和操作符的本地行為來控制執(zhí)行的位置。
(5) 元數(shù)據(jù)緩存
由于元數(shù)據(jù)(例如,表定義)很少更改,因此在每次查詢時都將其傳送會產(chǎn)生開銷。 Orca在優(yōu)化器端緩存元數(shù)據(jù),并且僅當(dāng)緩存中不可用或自上次將其加載到緩存以來發(fā)生更改時才從目錄中檢索元數(shù)據(jù)。 元數(shù)據(jù)緩存還從優(yōu)化器中提取數(shù)據(jù)庫系統(tǒng)詳細信息,這在測試和調(diào)試期間特別有用。
(6) GPOS
為了與可能具有不同API的操作系統(tǒng)進行交互,Orca使用了稱為GPOS的OS抽象層。 GPOS層為Orca提供了廣泛的基礎(chǔ)架構(gòu),包括內(nèi)存管理器,用于并發(fā)控制,異常處理,文件I / O和同步數(shù)據(jù)結(jié)構(gòu)的原語。
四、查詢優(yōu)化
1. 工作流
我們使用下面的查詢來解釋查詢優(yōu)化的流程:
SELECT T1.a FROM T1, T2 WHERE T1.a = T2.b ORDER BY T1.a;
其中T1的分布為Hashed(T1.a),而T2的分布為Hashed(T2.a)。
下面的XML顯示了DXL中上一個查詢的表示形式,其中我們提供了所需的輸出列,排序列,數(shù)據(jù)分布和邏輯查詢。元數(shù)據(jù)(例如表格和運算符定義)都裝飾有元數(shù)據(jù)ID(Mdid),以允許在優(yōu)化過程中請求更多信息。 Mdid是由數(shù)據(jù)庫系統(tǒng)標(biāo)識符,對象標(biāo)識符和版本號組成的唯一標(biāo)識符。例如,“ 0.96.1.0”是指GPDB版本為“ 1.0”的整數(shù)相等運算符。元數(shù)據(jù)版本用于使已跨查詢進行修改的緩存元數(shù)據(jù)對象無效。
<? xml version =" 1.0 " encoding =" UTF -8 "? > < dxl:DXLMessage xmlns:dxl =" http: // greenplum . com / dxl / v1 " > < dxl:Query > < dxl:OutputColumns > < dxl:Ident ColId ="0" Name ="a" Mdid =" 0.23.1.0 "/ > </ dxl:OutputColumns > < dxl:SortingColumnList > < dxl:SortingColumn ColId ="0" OpMdid =" 0.97.1.0 " > </ dxl:SortingColumnList > < dxl:Distribution Type =" Singleton " / > < dxl:LogicalJoin JoinType =" Inner " > < dxl:LogicalGet > < dxl:TableDescriptor Mdid =" 0.1639448.1.1 " Name =" T1 " > < dxl:Columns > < dxl:Ident ColId ="0" Name ="a" Mdid =" 0.23.1.0 "/ > < dxl:Ident ColId ="1" Name ="b" Mdid =" 0.23.1.0 "/ > </ dxl:Columns > </ dxl:TableDescriptor > </ dxl:LogicalGet > < dxl:LogicalGet > < dxl:TableDescriptor Mdid =" 0.2868145.1.1 " Name =" T2 " > < dxl:Columns > < dxl:Ident ColId ="2" Name ="a" Mdid =" 0.23.1.0 "/ > < dxl:Ident ColId ="3" Name ="b" Mdid =" 0.23.1.0 "/ > </ dxl:Columns > </ dxl:TableDescriptor > </ dxl:LogicalGet > < dxl:Comparison Operator ="=" Mdid =" 0.96.1.0 " > < dxl:Ident ColId ="0" Name ="a" Mdid =" 0.23.1.0 "/ > < dxl:Ident ColId ="3" Name ="b" Mdid =" 0.23.1.0 "/ > </ dxl:Comparison > </ dxl:LogicalJoin > </ dxl:Query > </ dxl:DXLMessage >
DXL查詢消息被傳送到Orca,在該消息中被解析并轉(zhuǎn)換為內(nèi)存中邏輯表達式樹,該樹被復(fù)制到備忘錄中。下圖顯示了備忘錄的初始內(nèi)容。邏輯表達式為兩個表和InnerJoin操作創(chuàng)建三個組。為了簡潔起見,我們省略了加入條件。組0稱為根組,因為它對應(yīng)于邏輯組的根表達。邏輯表達式中運算符之間的依賴關(guān)系被捕獲為組之間的引用。例如,InnerJoin [1,2]將組1和組2稱為子級。如以下步驟所述進行優(yōu)化。
(1)探索。 觸發(fā)生成邏輯等效表達式的轉(zhuǎn)換規(guī)則。 例如,將觸發(fā)一個Join Commutativity規(guī)則,以從InnerJoin [1,2]中生成InnerJoin [2,1]。 探索的結(jié)果是將新的組表達式添加到現(xiàn)有組中,并可能創(chuàng)建新的組。 Memo結(jié)構(gòu)具有基于表達式拓撲的內(nèi)置重復(fù)檢測機制,以檢測和消除由不同轉(zhuǎn)換創(chuàng)建的任何重復(fù)表達式。
(2)統(tǒng)計推導(dǎo)。在探索結(jié)束時,備忘錄Memo將維護給定查詢的完整邏輯空間。然后觸發(fā)Orca的統(tǒng)計信息派生機制,以計算Memo組的統(tǒng)計信息。 Orca中的統(tǒng)計對象主要是列直方圖的集合,用于得出基數(shù)和數(shù)據(jù)偏斜的估計值。統(tǒng)計信息是在緊湊的Memo結(jié)構(gòu)上進行的,以避免擴展搜索空間。
為了導(dǎo)出目標(biāo)組的統(tǒng)計信息,Orca會選擇最有希望提供可靠統(tǒng)計信息的組表達式。統(tǒng)計承諾計算是特定于表達式的。例如,具有少量聯(lián)接條件的InnerJoin表達式比具有大量聯(lián)接條件的另一個等效的InnerJoin表達式更有希望(這種情況可能在生成多個聯(lián)接順序時出現(xiàn))?;驹硎牵尤霔l件的數(shù)量越多,估計誤差的傳播和放大機會就越大。由于需要在給定表達式的所有節(jié)點之間匯總置信度分數(shù),因此計算基數(shù)估計的置信度分數(shù)具有挑戰(zhàn)性。我們目前正在探索幾種在緊湊的備忘錄Memo結(jié)構(gòu)中計算置信度得分的方法。
在選擇了目標(biāo)組中最有希望的組表達式之后,Orca遞歸地觸發(fā)對所選擇的組表達式的子組進行統(tǒng)計推導(dǎo)。最后,通過組合子組的統(tǒng)計對象來構(gòu)造目標(biāo)組的統(tǒng)計對象。 下圖說明了正在運行的示例的統(tǒng)計信息派生機制。首先,執(zhí)行一個自上而下的傳遞,其中父組表達式從其子組中請求統(tǒng)計信息。例如,(a = b)上的InnerJoin(T1,T2)請求T1.a和T2.b上的直方圖。通過注冊的MD提供程序按需從目錄中加載請求的直方圖,將其解析為DXL并存儲在MD緩存中以為將來的請求提供服務(wù)。接下來,執(zhí)行自下而上的遍歷以將子統(tǒng)計對象合并為父統(tǒng)計對象。由于連接條件可能會影響列的直方圖,因此會在列T1.a和T2.b上生成(可能已修改)直方圖。
Statistics derivation mechanism
構(gòu)造的統(tǒng)計對象附加到各個組,在優(yōu)化過程中可以在其中進行增量更新(例如,通過添加新的直方圖)。 這對于保持統(tǒng)計數(shù)據(jù)衍生成本的可管理性至關(guān)重要。
(3)實現(xiàn)。 觸發(fā)創(chuàng)建邏輯表達式的物理實現(xiàn)的轉(zhuǎn)換規(guī)則。 例如,觸發(fā)Get2Scan規(guī)則以從邏輯Get中生成物理表Scan。 類似地,觸發(fā)InnerJoin2HashJoin和InnerJoin2NLJoin規(guī)則以生成哈希和嵌套循環(huán)聯(lián)接實現(xiàn)。
(4)優(yōu)化。 在此步驟中,將強制實施屬性,并為替代方案進行成本估算。 優(yōu)化開始于向Memo的根組提交初始優(yōu)化請求,以指定查詢要求,例如結(jié)果分配和排序順序。 向組g提交請求r對應(yīng)于向g中的根物理運算符請求滿足r的最低成本計劃。
上圖顯示了備忘錄中針對正在運行的示例的優(yōu)化請求。 初始優(yōu)化請求為req。 #1:{Singleton,
上圖圖顯示了req的優(yōu)化。 #1 by Inner-HashJoin [1,2]。 對于此請求,替代方案之一是根據(jù)聯(lián)接條件對齊子分布,以便將要聯(lián)接的元組放置在同一位置。 這是通過請求第1組的Hashed(T1.a)分布和第2組的Hashed(T2.b)分布來實現(xiàn)的。兩個組均被要求傳遞任何排序順序。 找到最佳子計劃后,InnerHashJoin會合并子屬性,以確定已交付的分發(fā)和排序順序。 請注意,組2的最佳計劃需要在T2.b上哈希分布T2,因為T2最初是散列在T2.a上,而組1的最佳計劃是簡單掃描,因為T1已經(jīng)散列在T1.a.
2. 查詢執(zhí)行
最終計劃的副本將分發(fā)到每個細分分段。 在分布式查詢執(zhí)行期間,每個段上的分布式強制執(zhí)行器既充當(dāng)數(shù)據(jù)的發(fā)送者,又充當(dāng)數(shù)據(jù)的接收者。 例如,在段S上運行的Redistribute(T2.b)實例基于T2.b的哈希值將S上的元組發(fā)送到其他段,并且還從其他段上的其他Redistribute(T2.b)實例接收元組。
五、并行查詢優(yōu)化
查詢優(yōu)化可能是數(shù)據(jù)庫系統(tǒng)中最占用CPU的過程。 有效使用CPU可以轉(zhuǎn)化為更好的查詢計劃,從而提高系統(tǒng)性能。 并行查詢優(yōu)化器對于受益于利用越來越多的內(nèi)核的高級CPU設(shè)計至關(guān)重要。
Orca是啟用了多核的優(yōu)化器。 優(yōu)化過程被分解為稱為優(yōu)化任務(wù)的小型工作單元。 Orca目前有七種不同類型的優(yōu)化工作:
Exp(g):生成組g中所有組表達式的邏輯等效表達式。
Exp(gexpr):生成組表達式gexpr的邏輯等效表達式。
Imp(g):生成組g中所有組表達式的實現(xiàn)。
Imp(gexpr):生成組表達式gexpr的實現(xiàn)替代方案。
Opt(g,req):返回計劃的費用最少的計劃,該計劃是由操作員在g組中確定的,并且滿足優(yōu)化請求的要求。
Opt(gexpr,req):以gexpr為根并且滿足優(yōu)化請求req的估計成本最低的計劃返回。
Xform(gexpr,t)使用規(guī)則t變換組表達式gexpr。
Optimization jobs dependency graph
對于給定的查詢,可以創(chuàng)建每種類型的數(shù)百甚至數(shù)千個工作實例。 這引入了處理作業(yè)依賴性的挑戰(zhàn)。 例如,只有在優(yōu)化其子組之前,才能優(yōu)化組表達式。 上圖顯示了部分作業(yè)圖,其中優(yōu)化請求req0下的組g0的優(yōu)化觸發(fā)了一棵深層的依賴作業(yè)。 依賴關(guān)系被編碼為父子鏈接; 父級作業(yè)在子級作業(yè)完成之前無法完成。 當(dāng)子級工作進展順利時,父級工作需要暫停。 如果子作業(yè)不依賴其他作業(yè),則允許它們選擇可用線程并并行運行。 當(dāng)所有子作業(yè)完成時,將通知已暫停的父作業(yè)以繼續(xù)處理。
六、元數(shù)據(jù)交換
Orca旨在在數(shù)據(jù)庫系統(tǒng)之外工作。優(yōu)化器與數(shù)據(jù)庫系統(tǒng)之間的主要交互點是元數(shù)據(jù)交換。例如,優(yōu)化器可能需要知道是否在給定的表上定義了索引,以設(shè)計出有效的查詢計劃。元數(shù)據(jù)提供程序的集合促進了對元數(shù)據(jù)的訪問,這些元數(shù)據(jù)提供程序是特定于系統(tǒng)的插件,用于從數(shù)據(jù)庫系統(tǒng)檢索元數(shù)據(jù)。
下圖顯示了Orca如何與不同的后端系統(tǒng)交換元數(shù)據(jù)。在查詢優(yōu)化過程中,Orca訪問的所有元數(shù)據(jù)對象都固定在內(nèi)存中的緩存中,并在優(yōu)化完成或引發(fā)錯誤時取消固定。所有對元數(shù)據(jù)對象的訪問都通過MD Accessor完成,該訪問器可跟蹤優(yōu)化會話中正在訪問的對象,并確保在不再需要它們時將其釋放。如果請求的元數(shù)據(jù)對象尚未在緩存中,則MD Accessor還負責(zé)透明地從外部MD Provider提取元數(shù)據(jù)。服務(wù)于不同優(yōu)化會話的不同MD訪問器可能具有用于獲取元數(shù)據(jù)的不同外部MD提供程序。
Metadata exchange framework
七、其它優(yōu)化方案
1. 基礎(chǔ)查詢優(yōu)化
Volcano Parallel Database 引入了實現(xiàn)數(shù)據(jù)庫并行性的基本原理。 所提出的框架引入了交換運算符,該交換運算符實現(xiàn)了兩種并行處理方式,即通過流水線實現(xiàn)操作符之間的并行化,以及通過跨運行在不同進程上的運算符對元組進行分區(qū),實現(xiàn)了操作符內(nèi)部并行化。 提出的設(shè)計允許每個操作符獨立于本地數(shù)據(jù)執(zhí)行,以及與在其他進程中運行的其他操作符并行工作。 幾個MPP數(shù)據(jù)庫()利用這些原理來構(gòu)建商業(yè)上成功的產(chǎn)品。
Cascades 是可擴展的優(yōu)化器框架,其原理已用于構(gòu)建MS-SQL Server,SCOPE ,PDW 和Orca(我們在本文中介紹的優(yōu)化器)。 該框架之所以流行,是因為它把邏輯和物理計劃空間完全分開了。 這主要是通過將運算符和轉(zhuǎn)換規(guī)則封裝到獨立的組件中來實現(xiàn)的。 這種模塊化的設(shè)計使Cascades可以對邏輯上相等的表達式進行分組,以消除多余的工作,與Volcano的詳盡的方法形成對比,允許按需觸發(fā)規(guī)則,并允許根據(jù)規(guī)則的用途對給定的規(guī)則進行應(yīng)用操作符排序。
2. MPP數(shù)據(jù)庫SQL優(yōu)化
存儲和查詢數(shù)據(jù)量的指數(shù)增長已轉(zhuǎn)化為大規(guī)模并行處理(MPP)系統(tǒng)的更廣泛使用,例如Teradata ,Oracle的Exadata ,Netezza ,Pivotal Greenplum數(shù)據(jù)庫和Vertica 。由于篇幅所限,我們總結(jié)了最近在重新設(shè)計查詢優(yōu)化器以應(yīng)對大數(shù)據(jù)挑戰(zhàn)方面的一些努力。
SQL Server并行數(shù)據(jù)倉庫(PDW)廣泛使用了已建立的Microsoft SQL Server優(yōu)化器。對于每個查詢,PDW觸發(fā)對SQL Server優(yōu)化器的優(yōu)化請求,該優(yōu)化器在僅保留數(shù)據(jù)庫的元數(shù)據(jù)和統(tǒng)計信息而不保留其用戶數(shù)據(jù)的Shell數(shù)據(jù)庫上工作。然后,將SQL Server優(yōu)化程序采用的替代方案運送到PDW的數(shù)據(jù)移動服務(wù)(DMS),在其中使用分發(fā)信息對這些邏輯計劃進行改進。盡管這種方法避免了從頭開始構(gòu)建優(yōu)化器,但由于優(yōu)化邏輯分布在兩個不同的過程和代碼庫中,因此使調(diào)試和維護變得更加困難。
為并行執(zhí)行而優(yōu)化的結(jié)構(gòu)化計算(SCOPE)是Microsoft的數(shù)據(jù)分析平臺,它充分利用了并行數(shù)據(jù)庫和MapReduce系統(tǒng)的特性。 SCOPE的腳本語言(例如Hive )是基于SQL的。 SCOPE是為使用僅附加文件系統(tǒng)的Cosmos分布式數(shù)據(jù)平臺開發(fā)的,而Orca的設(shè)計目標(biāo)是與多個基礎(chǔ)數(shù)據(jù)管理系統(tǒng)一起工作。
SAP HANA 是一個分布式的內(nèi)存數(shù)據(jù)庫系統(tǒng),用于處理業(yè)務(wù)分析和OLTP查詢。 MPP數(shù)據(jù)庫中的分析查詢可能會產(chǎn)生大量中間結(jié)果。并發(fā)分析查詢會耗盡可用內(nèi)存,其中大部分已被消耗以存儲和索引原始數(shù)據(jù),并且會觸發(fā)數(shù)據(jù)溢出到磁盤,從而對查詢性能產(chǎn)生負面影響。
Vertica 是C-Store項目的商業(yè)化MPP版本,其中數(shù)據(jù)被組織為投影,每個投影都是表屬性的子集。最初的StarOpt及其經(jīng)過修改的StratifiedOpt優(yōu)化器是為針對星型/雪花模式的查詢而定制設(shè)計的,其中相同范圍的聯(lián)接鍵位于同一位置。如果無法實現(xiàn)數(shù)據(jù)并置,則可以在所有節(jié)點上復(fù)制相關(guān)的投影以提高性能,這是Vertica的V2Opt優(yōu)化器所解決的。
3. SQL on Hadoop
在Hadoop上執(zhí)行SQL的經(jīng)典方法是使用Hive 將查詢轉(zhuǎn)換為MapReduce作業(yè)。 MapReduce的性能可能無法滿足交互式分析的要求。 Stinger 是通過利用和擴展Hive在Hadoop上優(yōu)化查詢評估的一項計劃。但是,這種方法可能需要對MapReduce計算框架進行重大的重新設(shè)計,以優(yōu)化數(shù)據(jù)傳遞,并在磁盤上實現(xiàn)中間結(jié)果。
通過創(chuàng)建專門的查詢引擎,無需使用MapReduce,就可以在HDFS中基于SQL的數(shù)據(jù)處理,從而解決了Hadoop上的交互式處理問題。 Impala ,HAWQ 和Presto是朝著這個方向努力的關(guān)鍵。這些方法的查詢優(yōu)化器和執(zhí)行引擎的設(shè)計和功能不同,這兩者都是查詢性能的差異化因素。 DBMS和Hadoop技術(shù)的共同定位允許使用DBMS中的SQL和HDFS中的MapReduce在每個平臺上本地處理數(shù)據(jù)。 Hadapt 率先提出了這種方法。微軟還引入了PolyBase ,以提供將來自PDW 的表與HDFS上的數(shù)據(jù)連接起來的功能,以優(yōu)化從一個平臺到另一個平臺的數(shù)據(jù)交換。
AsterixDB 是一種開放源代碼的工作,可以基于NoSQL樣式數(shù)據(jù)模型有效地存儲,索引和查詢半結(jié)構(gòu)化信息。目前,AsterixDB的查詢計劃器是由用戶提示驅(qū)動的,而不是像Orca這樣的成本驅(qū)動的方法。 Dremel 是Google提供的可擴展的列存儲解決方案,用于分析MapReduce管道的輸出。 Dremel提供了類似于AsterixDB的腳本語言(AQL)和SCOPE 的高級腳本語言來處理只讀嵌套數(shù)據(jù)。
以上是“Orca的架構(gòu)是怎么樣的”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。