郭東新,張 偉,2+,徐 濤
(1.北京信息科技大學(xué) 計(jì)算機(jī)學(xué)院,北京 100101;2.北京信息科技大學(xué) 北京材料基因工程高精尖創(chuàng)新中心,北京 100101;3.清華大學(xué) 信息技術(shù)研究院,北京 100101)
隨著大數(shù)據(jù)時(shí)代的到來,感知設(shè)備種類越來越豐富,從而產(chǎn)生了海量來源不同的結(jié)構(gòu)化數(shù)據(jù)。由于存儲(chǔ)系統(tǒng)的廠商和架構(gòu)不同,不同的存儲(chǔ)系統(tǒng)存儲(chǔ)滿足自身特點(diǎn)的數(shù)據(jù),造成數(shù)據(jù)之間互不連通。但是,在不同的存儲(chǔ)系統(tǒng)上進(jìn)行關(guān)聯(lián)查詢的業(yè)務(wù)需求越來越普遍,在一條SQL查詢命令中,關(guān)系表可能來自多個(gè)數(shù)據(jù)源,并存儲(chǔ)在不同的源系統(tǒng)中,且需要將數(shù)據(jù)從一個(gè)存儲(chǔ)系統(tǒng)中遷移到另一個(gè)存儲(chǔ)系統(tǒng)中。因此,研究如何優(yōu)化數(shù)據(jù)遷移方向和降低數(shù)據(jù)遷移量能夠提高多數(shù)據(jù)源的關(guān)聯(lián)查詢效率,實(shí)現(xiàn)大數(shù)據(jù)資源的互聯(lián)互通,為大數(shù)據(jù)業(yè)務(wù)的推廣提供支持。
為此,本文為了優(yōu)化數(shù)據(jù)遷移的方向和降低數(shù)據(jù)遷移量,提出了一個(gè)多數(shù)據(jù)源的關(guān)聯(lián)查詢優(yōu)化模型MAQM,首先,對(duì)新加入模型的存儲(chǔ)系統(tǒng)進(jìn)行初始化,使用包裝器對(duì)存儲(chǔ)系統(tǒng)進(jìn)行包裝;然后,利用我們提出的區(qū)域劃分策略,以存儲(chǔ)系統(tǒng)中的關(guān)系表為中心劃分出目標(biāo)關(guān)系表區(qū)域、條件區(qū)域和輸出區(qū)域3個(gè)區(qū)間并構(gòu)建區(qū)域有向圖,生成多個(gè)查詢子任務(wù)。最后,在區(qū)域有向圖的基礎(chǔ)上,采用數(shù)據(jù)遷移代價(jià)模型確定存儲(chǔ)系統(tǒng)間生成的中間結(jié)果的傳輸方向,得到多個(gè)子任務(wù)的查詢順序。
目前,國內(nèi)外學(xué)者已經(jīng)對(duì)多數(shù)據(jù)源關(guān)聯(lián)查詢進(jìn)行了一系列研究,主要分為基于數(shù)字圖書館的多數(shù)據(jù)源查詢、基于結(jié)構(gòu)化數(shù)據(jù)的多數(shù)據(jù)源關(guān)聯(lián)查詢、基于異構(gòu)數(shù)據(jù)的多數(shù)據(jù)源關(guān)聯(lián)查詢和多數(shù)據(jù)源融合查詢4種實(shí)現(xiàn)方式。
黃文碧[1]提出構(gòu)建元數(shù)據(jù)倉庫,對(duì)元數(shù)據(jù)進(jìn)行映射和關(guān)聯(lián)的方法實(shí)現(xiàn)了對(duì)多個(gè)館藏資源的訪問。唐明偉等[2]采用RESTful Web方法實(shí)現(xiàn)應(yīng)用服務(wù)層的資源注冊(cè)功能,將URL存儲(chǔ)在資源庫中,通過URL可獲取對(duì)應(yīng)數(shù)據(jù)圖書館的資源。Yu Q等[3]提出將不同來源使用的元數(shù)據(jù)進(jìn)行映射,形成具有內(nèi)部標(biāo)識(shí)符的統(tǒng)一結(jié)構(gòu)化數(shù)據(jù),實(shí)現(xiàn)對(duì)圖書館數(shù)據(jù)庫的檢索。以上基于數(shù)字圖書館的多數(shù)據(jù)源查詢方法只是解決了多個(gè)數(shù)據(jù)源查詢的問題,但是沒有解決多數(shù)據(jù)源關(guān)聯(lián)查詢的問題。
樊文飛等[4,5]提出了邊界計(jì)算方法,可以在大數(shù)據(jù)集基于“access schema”約束下找出主要的小數(shù)據(jù)集進(jìn)行關(guān)聯(lián)查詢,但是建立access schema約束的過程過于復(fù)雜。文獻(xiàn)[6,7]介紹了ODCH工具的查詢過程,Oracle數(shù)據(jù)庫使用外部表的方式與外部存儲(chǔ)系統(tǒng)建立映射關(guān)系,Oracle的連接器直接從外部表中訪問數(shù)據(jù)文件,但是,每次進(jìn)行關(guān)聯(lián)查詢時(shí)需對(duì)外部表做一系列前期準(zhǔn)備工作,而且數(shù)據(jù)只能從外部表單向傳輸?shù)絆racle數(shù)據(jù)庫中。
潘明明等[8]提出了一種將MySQL的數(shù)據(jù)冗余寫入MongoDB數(shù)據(jù)庫的方法,從而實(shí)現(xiàn)異構(gòu)數(shù)據(jù)的關(guān)聯(lián)查詢。毛佳飛等[9]提出基于XML Schema中間件的方法建立全局模式到局部模式的映射關(guān)系,將用戶的XQuery全局查詢分解轉(zhuǎn)換到各個(gè)局部數(shù)據(jù)源,最后將查詢結(jié)果整合成XML文檔。Chamanara J等[10]提出了一種基于插件適配器的異構(gòu)數(shù)據(jù)關(guān)聯(lián)查詢系統(tǒng),在進(jìn)行關(guān)聯(lián)查詢時(shí),可將部分命令轉(zhuǎn)換至單個(gè)數(shù)據(jù)源上執(zhí)行。Hai R等[11]先從異構(gòu)數(shù)據(jù)源的原始數(shù)據(jù)中提取出元數(shù)據(jù),再采用查詢重寫的方法查詢結(jié)構(gòu)化個(gè)半結(jié)構(gòu)化數(shù)據(jù)。以上基于異構(gòu)數(shù)據(jù)的多數(shù)據(jù)源關(guān)聯(lián)查詢方法在進(jìn)行關(guān)聯(lián)查詢時(shí),必須將一個(gè)或多個(gè)異構(gòu)系統(tǒng)的整張表冗余寫到另一個(gè)異構(gòu)系統(tǒng)中,導(dǎo)致異構(gòu)系統(tǒng)中出現(xiàn)不相關(guān)聯(lián)的字段冗余。
Rao G等[12]提出一種多源連接開放數(shù)據(jù)融合方法,先將各種數(shù)據(jù)集轉(zhuǎn)換成RDF三元數(shù)據(jù),再使用數(shù)據(jù)融合方法將三元數(shù)據(jù)重新存放在一個(gè)新的存儲(chǔ)系統(tǒng)中。Liu W等[13]提出一種通用的多數(shù)據(jù)源融合方法,以RDF為標(biāo)準(zhǔn),將多源結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換成統(tǒng)一的數(shù)據(jù)格式,從而實(shí)現(xiàn)多個(gè)數(shù)據(jù)源的關(guān)聯(lián)查詢。Liu P等[14]提出了一種多數(shù)據(jù)源融合和多維分析模型,先將多數(shù)據(jù)源進(jìn)行標(biāo)準(zhǔn)化,形成統(tǒng)一的表示模式,再將表示模式中表示一類的字段聚合成一組字段,從而實(shí)現(xiàn)多數(shù)據(jù)源的融合查詢?;诙鄶?shù)據(jù)源融合查詢方法的查詢性能優(yōu)于前3種方法,但是需要對(duì)多個(gè)數(shù)據(jù)源進(jìn)行重構(gòu),在寫入到一個(gè)存儲(chǔ)系統(tǒng)中,存在系統(tǒng)耦合性高,操作復(fù)雜的缺點(diǎn)。
綜上可以看出,采用外部表或者基于異構(gòu)數(shù)據(jù)的多數(shù)據(jù)源關(guān)聯(lián)查詢方法,只需建立映射關(guān)系或?qū)⒈頂?shù)據(jù)進(jìn)行重寫,實(shí)現(xiàn)過程簡(jiǎn)單,但是查詢性能受到限制,而對(duì)多數(shù)據(jù)源進(jìn)行融合查詢的方法能夠提高關(guān)聯(lián)查詢的性能,但是需要對(duì)所有的數(shù)據(jù)源進(jìn)行重構(gòu),實(shí)現(xiàn)過程比較復(fù)雜,而且,系統(tǒng)之間的耦合度大?,F(xiàn)存的方法無法同時(shí)提高查詢性能和簡(jiǎn)化實(shí)現(xiàn)過程。
對(duì)于多數(shù)據(jù)源的關(guān)聯(lián)查詢模型的研究,目前的方法常將一個(gè)存儲(chǔ)系統(tǒng)的查詢數(shù)據(jù)遷移到另一個(gè)存儲(chǔ)系統(tǒng)中,操作非常簡(jiǎn)便,當(dāng)數(shù)據(jù)遷移量非常大時(shí),查詢性能則會(huì)降低,而且,目前的方法常將多個(gè)存儲(chǔ)系統(tǒng)進(jìn)行融合,出現(xiàn)系統(tǒng)之間耦合程度較高的弊端。因此,為了提高查詢性能和降低系統(tǒng)之間的耦合度,本文提出了一種基于多數(shù)據(jù)源的關(guān)聯(lián)查詢優(yōu)化模型MAQM,模型的體系架構(gòu)如圖1所示。
圖1 MAQM的體系架構(gòu)
從圖1中可以看出,MAQM共分為3層。模型上層提供了統(tǒng)一的多數(shù)據(jù)源關(guān)聯(lián)查詢接口。在模型的底層,每個(gè)包裝器安裝不同的驅(qū)動(dòng),與存儲(chǔ)系統(tǒng)相連,并通過統(tǒng)一的API與模型上層相連。既保障了存儲(chǔ)系統(tǒng)之間的獨(dú)立性,又不需要改變存儲(chǔ)系統(tǒng)的存儲(chǔ)方式,只需要包裝器向存儲(chǔ)系統(tǒng)發(fā)送查詢命令,并接收查詢結(jié)果。
模型的中間層是查詢命令控制的核心,接收接口發(fā)送的查詢命令,忽略查詢命令中的關(guān)系表在存儲(chǔ)方法和查詢方式的不同,透明地進(jìn)行多個(gè)數(shù)據(jù)源的關(guān)聯(lián)查詢。該層主要有4個(gè)模塊組成:
(1)查詢拆分模塊:利用3.1節(jié)的區(qū)域劃分策略拆分多數(shù)據(jù)源關(guān)聯(lián)查詢命令,將拆分的命令以區(qū)域有向圖的形式展示;
(2)查詢優(yōu)化模塊:利用3.2節(jié)的數(shù)據(jù)遷移代價(jià)模型為區(qū)域有向圖建立代價(jià)模型,得到的查詢子任務(wù)的執(zhí)行順序;
(3)子查詢分發(fā)與協(xié)同模塊:將查詢子任務(wù)分發(fā)給各個(gè)包裝器,然后將存儲(chǔ)系統(tǒng)執(zhí)行的結(jié)果按順序進(jìn)行匯總,得到最終的查詢結(jié)果并返回給用戶;
(4)元數(shù)據(jù)模塊:管理各個(gè)存儲(chǔ)系統(tǒng)以及包裝器的配置信息。
當(dāng)在MAQM中新添加一個(gè)存儲(chǔ)系統(tǒng)時(shí),需要進(jìn)行初始化操作,為存儲(chǔ)系統(tǒng)配置一個(gè)包裝器,并且保證存儲(chǔ)系統(tǒng)與它的包裝器處于同一局域網(wǎng)內(nèi),通過包裝器完成子查詢命令轉(zhuǎn)發(fā),實(shí)現(xiàn)跨區(qū)域、跨網(wǎng)絡(luò)的多數(shù)據(jù)源關(guān)聯(lián)查詢。包裝器的部署方式如圖2所示。
圖2 MAQM的初始化過程
將包裝器部署完畢之后,需要對(duì)元數(shù)據(jù)模塊進(jìn)行如下操作:
(1)將存儲(chǔ)系統(tǒng)的連接信息保存在元數(shù)據(jù)模塊的SystemInfo文件中,配置信息見表1。
表1 SystemInfo文件配置信息
(2)將存儲(chǔ)系統(tǒng)所處的網(wǎng)絡(luò)類型和網(wǎng)絡(luò)帶寬保存在元數(shù)據(jù)模塊的ConfigInfo文件中,配置信息見表2。接入系統(tǒng)的網(wǎng)絡(luò)類型有3種:①不同的外網(wǎng)網(wǎng)絡(luò);②一個(gè)交換機(jī)下的同一局域網(wǎng);③一個(gè)交換機(jī)下的不同局域網(wǎng)。而且,由于網(wǎng)絡(luò)帶寬是實(shí)時(shí)變化的,所以需要定時(shí)更新ConfigInfo文件。
表2 ConfigInfo文件配置信息
(3)將存儲(chǔ)系統(tǒng)中的關(guān)系表、表結(jié)構(gòu)和記錄數(shù)保存在元數(shù)據(jù)模塊中。
現(xiàn)有的多數(shù)據(jù)源關(guān)聯(lián)查詢方法一般采用人工拆分關(guān)聯(lián)查詢命令,方法簡(jiǎn)單,但是拆分多數(shù)據(jù)源且大批量的查詢命令時(shí),效率較低且存在錯(cuò)誤率。為了提高多數(shù)據(jù)源關(guān)聯(lián)查詢命令拆分的效率和準(zhǔn)確率,提出了一種區(qū)域劃分策略,以查詢命令中的關(guān)系表為中心劃分目標(biāo)關(guān)系表區(qū)域、條件區(qū)域和輸出區(qū)域3個(gè)區(qū)間,建立區(qū)域有向圖,得到各個(gè)存儲(chǔ)系統(tǒng)的查詢子任務(wù)。
以表3展示的多數(shù)據(jù)源關(guān)聯(lián)查詢命令為例,詳細(xì)介紹區(qū)域劃分策略,在表3中,prediction_table表存儲(chǔ)在MySQL中,表示售貨機(jī)的每日銷售增量數(shù)據(jù);all_in_one表存儲(chǔ)在Hive中,表示售貨機(jī)10年的歷史銷量數(shù)據(jù)。
表3 多數(shù)據(jù)源關(guān)聯(lián)查詢命令
區(qū)域劃分策略的第一個(gè)步驟是解析多數(shù)據(jù)源關(guān)聯(lián)查詢命令的關(guān)鍵字。
首先,根據(jù)from關(guān)鍵字找出目標(biāo)關(guān)系表,并為其存儲(chǔ)系統(tǒng)創(chuàng)建一個(gè)分組,將目標(biāo)關(guān)系表放在對(duì)應(yīng)的分組中;然后,根據(jù)where或having關(guān)鍵字解析條件查詢語句,若條件語句的字段在同一目標(biāo)關(guān)系表中,則將條件語句放在同源條件分組中,否則,放在異源條件分組中;最后,解析select、group by和order by后的查詢字段,將其放在輸出字段分組中。最終得到的分組見表4。
表4 多數(shù)據(jù)源關(guān)聯(lián)查詢命令分組情況
區(qū)域劃分策略的第二個(gè)步驟是根據(jù)4個(gè)分組創(chuàng)建區(qū)域有向圖G
(1)創(chuàng)建區(qū)域圖G的結(jié)點(diǎn)集V。在水平方向上,區(qū)域圖從左向右依次被劃分為:①條件區(qū)域,根據(jù)同源條件分組和異源條件分組分為同源條件結(jié)點(diǎn)V(C1)和異源條件結(jié)點(diǎn)V(C2);②目標(biāo)關(guān)系表區(qū)域,根據(jù)存儲(chǔ)系統(tǒng)和關(guān)系表分組的層級(jí)不同,將V(TL)設(shè)為存儲(chǔ)系統(tǒng)對(duì)應(yīng)的分組,V(TL[i]),1≤i≤n設(shè)置為存儲(chǔ)系統(tǒng)中的關(guān)系表分組;③輸出區(qū)域,根據(jù)字段輸出分組標(biāo)記為輸出節(jié)點(diǎn)V(FO),由此生成的3層區(qū)域如圖3所示。
圖3 區(qū)域有向圖劃分
(2)創(chuàng)建區(qū)域圖G的邊集E。首先,將所有的同源條件節(jié)點(diǎn)u(u∈V(C1))與其對(duì)應(yīng)的關(guān)系表節(jié)點(diǎn)v(v∈V(TL[i]))建立有向邊;然后將所有的異源條件節(jié)點(diǎn)u(u∈V(C2))與其對(duì)應(yīng)的多個(gè)關(guān)系表節(jié)點(diǎn)v1,v2,…(v1,v2∈V(TL[i]))建立無向邊(u,v1),(u,v2)等;最后將所有的輸出節(jié)點(diǎn)u(u∈V(FO))與其對(duì)應(yīng)的關(guān)系表節(jié)點(diǎn)v(v∈V(TL[i]))建立有向邊。
(3)以每個(gè)關(guān)系表為中心,將與其相連的條件節(jié)點(diǎn)和輸出節(jié)點(diǎn)一起劃分在同一個(gè)任務(wù)分組中。
(4)確定中間結(jié)果并生成子任務(wù)命令。將異源條件節(jié)點(diǎn)作為需傳輸?shù)闹虚g結(jié)果。并且,按照區(qū)域有向圖從多數(shù)據(jù)源關(guān)聯(lián)查詢命令中拆分出各個(gè)查詢子任務(wù),見表5。
紫地榆中4種單體對(duì)3種致齲菌培養(yǎng)液中大分子物質(zhì)吸光值的影響………李夢(mèng)琪,羅胤珠,盧 燕,藍(lán) 海(18)
表5 各個(gè)子任務(wù)的查詢命令
在區(qū)域有向圖中,中間結(jié)果需在兩個(gè)存儲(chǔ)系統(tǒng)中進(jìn)行數(shù)據(jù)遷移,其傳輸方向還未確定,因此,需要建立數(shù)據(jù)遷移代價(jià)模型,確定中間結(jié)果的傳輸方向,使得子任務(wù)的查詢代價(jià)最優(yōu)。
由于存儲(chǔ)系統(tǒng)的廠商和架構(gòu)不同,而且,傳輸速率也不同,本文主要從存儲(chǔ)系統(tǒng)的查詢響應(yīng)時(shí)間、關(guān)系表的大小和存儲(chǔ)系統(tǒng)間的帶寬等因素分析數(shù)據(jù)遷移的代價(jià),確定中間結(jié)果的傳輸方向。
圖4 查詢拓?fù)鋱D
數(shù)據(jù)遷移代價(jià)模型是在拓?fù)鋱D的基礎(chǔ)上建立的,代價(jià)模型中的各個(gè)參數(shù)為:
(1)關(guān)系表大小D,保存在元數(shù)據(jù)模塊中的存儲(chǔ)系統(tǒng)所有表的表名、字段等信息;
(2)中間結(jié)果大小DQ,存儲(chǔ)系統(tǒng)之間查詢出來的中間結(jié)果;
(3)存儲(chǔ)系統(tǒng)間的網(wǎng)絡(luò)帶寬S[i][j],保存在元數(shù)據(jù)模塊中的存儲(chǔ)系統(tǒng)間的帶寬值,i、j分別代表不同的存儲(chǔ)系統(tǒng);
(4)字段查詢時(shí)間T1(D,field),從關(guān)系表D中查詢出字段field消耗的時(shí)間;
(5)遷移時(shí)間T2(i,j,DQ),將中間結(jié)果DQ從存儲(chǔ)系統(tǒng)i遷移到存儲(chǔ)系統(tǒng)j消耗的時(shí)間。計(jì)算公式如式(1)所示,其中T0表示存儲(chǔ)系統(tǒng)間進(jìn)行數(shù)據(jù)遷移時(shí)的準(zhǔn)備時(shí)間。Tpack表示打包壓縮中間結(jié)果的時(shí)間
(1)
匯總時(shí)間T3(i,0,field)將字段結(jié)果集Vfield從存儲(chǔ)系統(tǒng)i發(fā)送到子查詢分發(fā)與協(xié)同模塊的時(shí)間。計(jì)算公式如式(2)所示
(2)
根據(jù)查詢拓?fù)鋱D的查詢順序,可以預(yù)測(cè)存儲(chǔ)系統(tǒng)內(nèi)和存儲(chǔ)系統(tǒng)間的查詢結(jié)果的大小,進(jìn)而可以估計(jì)字段查詢時(shí)間和遷移時(shí)間。然后,本文將時(shí)間作為拓?fù)鋱D中有向邊的權(quán)重,形成加權(quán)有向圖,建立數(shù)據(jù)遷移代價(jià)模型。其中,每條邊的加權(quán)值定義如下所示:
(1)同一存儲(chǔ)系統(tǒng)的有向邊賦值。其中,u為同源條件節(jié)點(diǎn)u(u∈V(C1)),則有向邊的權(quán)值如式(3)所示
w()=T1(D,field)
(3)
(2)不同存儲(chǔ)系統(tǒng)間i和j的有向邊賦值。其中,u為異源條件節(jié)點(diǎn)u(u∈V(C2)),則有向邊的權(quán)值如式(4)所示
(4)
(3)輸出結(jié)點(diǎn)V(FO)[i]的有向邊賦值。如果以關(guān)系表節(jié)點(diǎn)v(v∈V(TL[i]))為起點(diǎn)的路徑不存在其它關(guān)系表節(jié)點(diǎn),則關(guān)系表節(jié)點(diǎn)v被稱為輸出結(jié)點(diǎn),將輸出結(jié)點(diǎn)的結(jié)果數(shù)據(jù)集發(fā)送給子查詢分發(fā)與協(xié)同模塊,則添加一條有向邊
(5)
經(jīng)過以上操作則將拓?fù)鋱D轉(zhuǎn)換成數(shù)據(jù)遷移代價(jià)模型,如圖5所示。在數(shù)據(jù)遷移代價(jià)模型中,以不同的輸入節(jié)點(diǎn)為起點(diǎn),子查詢分發(fā)與協(xié)同模塊為終點(diǎn),計(jì)算整條完整路徑的查詢時(shí)間權(quán)重之和,即為數(shù)據(jù)遷移代價(jià)。比較數(shù)據(jù)遷移代價(jià),選擇執(zhí)行開銷較小對(duì)應(yīng)的子任務(wù)查詢順序。
圖5 數(shù)據(jù)遷移代價(jià)模型
為了快速并且優(yōu)化存儲(chǔ)系統(tǒng)間數(shù)據(jù)遷移的代價(jià),本文提出了基于MAQM的關(guān)聯(lián)查詢算法。先將存儲(chǔ)系統(tǒng)經(jīng)過包裝器進(jìn)行封裝,然后采用區(qū)域拆分策略查詢存儲(chǔ)系統(tǒng)的查詢子任務(wù),最后利用數(shù)據(jù)遷移代價(jià)模型確定存儲(chǔ)系統(tǒng)間查詢結(jié)果的傳輸方向,實(shí)現(xiàn)多數(shù)據(jù)源的關(guān)聯(lián)查詢。
基于MAQM的關(guān)聯(lián)查詢算法不僅忽略了存儲(chǔ)系統(tǒng)的架構(gòu),對(duì)不同的存儲(chǔ)系統(tǒng)提供統(tǒng)一的算法,且能夠自動(dòng)化而且準(zhǔn)確地拆分多數(shù)據(jù)源關(guān)聯(lián)查詢命令,使得查詢代價(jià)最小。以下為算法步驟。
基于MAQM的關(guān)聯(lián)查詢算法。
輸入:關(guān)聯(lián)查詢多個(gè)存儲(chǔ)系統(tǒng)的select語句Q。
輸出:語句Q的查詢結(jié)果R。
(1)遍歷MAQM中的元數(shù)據(jù)模塊,若存儲(chǔ)系統(tǒng)不存在,則采用包裝器對(duì)存儲(chǔ)系統(tǒng)進(jìn)行封裝,關(guān)系表等配置信息進(jìn)行保存;若存儲(chǔ)系統(tǒng)存在,則判斷關(guān)系表是否存在,不存在則重新更新存儲(chǔ)系統(tǒng)的信息。
(2)采用區(qū)域拆分策略對(duì)語句Q進(jìn)行拆分,若語句Q中需查詢n個(gè)存儲(chǔ)系統(tǒng)中的任務(wù),則劃分出n個(gè)查詢子任務(wù)q1,q2,…,qn。
(3)n個(gè)查詢子任務(wù)間會(huì)產(chǎn)生Mk(k=0,1,…,n-1)個(gè)中間結(jié)果,利用數(shù)據(jù)遷移代價(jià)模型,確定每一個(gè)中間結(jié)果Mk的傳輸方向qi→Mk→qj,即將語句qi查詢得到的結(jié)果Mk遷移到存儲(chǔ)系統(tǒng)j中,再執(zhí)行語句qj。
(4)按照步驟(3)確定的n個(gè)語句的執(zhí)行順序執(zhí)行查詢,返回查詢結(jié)果R。
本文的實(shí)驗(yàn)數(shù)據(jù)公開的TPC-H數(shù)據(jù)集,而且,TPC-H中的查詢命令為多表關(guān)聯(lián)查詢,滿足多數(shù)據(jù)源關(guān)聯(lián)查詢測(cè)試的要求。本文主要采用TPC-H的5條查詢命令,共生成5 G測(cè)試數(shù)據(jù),每條查詢命令對(duì)應(yīng)的數(shù)據(jù)集分布見表6。
表6 實(shí)驗(yàn)數(shù)據(jù)集分布
表6中,customer表共117 MB,lineitem表共3.6 GB,supplier表共6.8 MB,partsupp表共573 MB,part表共116 MB,orders表共830 MB。實(shí)驗(yàn)1驗(yàn)證遷移方向?qū)Χ鄶?shù)據(jù)源關(guān)聯(lián)查詢的影響,其數(shù)據(jù)分布是將大數(shù)據(jù)集儲(chǔ)存在Hive中,小數(shù)據(jù)集儲(chǔ)存在關(guān)系數(shù)據(jù)庫中;實(shí)驗(yàn)2驗(yàn)證遷移數(shù)據(jù)量對(duì)多數(shù)據(jù)源關(guān)聯(lián)查詢的影響,其數(shù)據(jù)分布式將小數(shù)據(jù)集儲(chǔ)存在Hive中,大數(shù)據(jù)集儲(chǔ)存在關(guān)系型數(shù)據(jù)庫中。
為了驗(yàn)證MAQM的查詢性能,本文搭建了一個(gè)實(shí)驗(yàn)測(cè)試平臺(tái)。該平臺(tái)包含MySQL和Oracle兩個(gè)數(shù)據(jù)庫和一個(gè)數(shù)據(jù)倉庫Hive,其中,Hive的搭建采用CDH版本。平臺(tái)的硬件配置是:8 G內(nèi)存,4核CPU和100 G硬盤服務(wù)器。并且,將MAQM模型的包裝器安裝在同一網(wǎng)絡(luò)中,Oracle和Hive通過ODCH工具連接在同一網(wǎng)絡(luò)中。
第一組實(shí)驗(yàn)是為了驗(yàn)證本文提出的MAQM能夠優(yōu)化多數(shù)據(jù)源關(guān)聯(lián)查詢的數(shù)據(jù)遷移方向,與ODCH模型在查詢響應(yīng)時(shí)間上進(jìn)行比較,在相同的實(shí)驗(yàn)1環(huán)境下執(zhí)行對(duì)應(yīng)TPC-H的5條查詢命令,對(duì)比實(shí)驗(yàn)結(jié)果如圖6所示。
圖6 查詢響應(yīng)時(shí)間對(duì)比實(shí)驗(yàn)結(jié)果
從圖6中可以看出,由于ODCH模型需要手動(dòng)進(jìn)行拆分多數(shù)據(jù)源關(guān)聯(lián)查詢命令,而本文提出的MAQM采用建立最優(yōu)區(qū)域有向圖的形式快速拆分命令,因此在整個(gè)查詢時(shí)間上,MAQM比ODCH模型明顯降低一半的時(shí)間。
第二組實(shí)驗(yàn)是為了驗(yàn)證本文提出的MAQM能夠優(yōu)化多數(shù)據(jù)源關(guān)聯(lián)查詢時(shí)中間結(jié)果的遷移量,與ODCH模型在數(shù)據(jù)遷移占比上進(jìn)行比較,在相同的實(shí)驗(yàn)1環(huán)境下執(zhí)行對(duì)應(yīng)TPC-H的5條查詢命令,MAQM模型與ODCH模型對(duì)比實(shí)驗(yàn)結(jié)果如圖7所示。
圖7 數(shù)據(jù)遷移占比實(shí)驗(yàn)對(duì)比結(jié)果
從圖7中可以看出,由于ODCH模型的查詢機(jī)制是在Oracle數(shù)據(jù)庫中為Hive建立外部表,將查詢命令直接發(fā)送給外部表,因此,查詢過程中產(chǎn)生的中間結(jié)果只能從外部表到Oracle系統(tǒng)內(nèi)部進(jìn)行單向傳輸,所以,當(dāng)外部表數(shù)據(jù)量較大時(shí),數(shù)據(jù)遷移量明顯增大。而本文提出的MAQM的查詢機(jī)制是以存儲(chǔ)系統(tǒng)內(nèi)查詢和系統(tǒng)間查詢時(shí)間為代價(jià)建立數(shù)據(jù)遷移模型,找到代價(jià)最小的查詢方案,從而能夠減少數(shù)據(jù)遷移量,因此本文提出的MAQM在減少多數(shù)據(jù)源關(guān)聯(lián)查詢的數(shù)據(jù)遷移量方面具有很大的優(yōu)勢(shì)。
第三組為了驗(yàn)證本文提出的MAQM的查詢性能,與ODCH模型在查詢響應(yīng)時(shí)間上進(jìn)行比較,在相同的實(shí)驗(yàn)2環(huán)境下執(zhí)行對(duì)應(yīng)的TPC-H的5條查詢命令,對(duì)比實(shí)驗(yàn)結(jié)果如圖8所示。
圖8 查詢性能對(duì)比實(shí)驗(yàn)結(jié)果
從圖8中可以看出,ODCH和MAQM根據(jù)自身的查詢機(jī)制,都對(duì)小數(shù)據(jù)集進(jìn)行數(shù)據(jù)遷移,但是,MAQM在區(qū)域劃分策略中將查詢結(jié)果的字段按照關(guān)系表進(jìn)行劃分,最終只將關(guān)系表的部分字段作為中間結(jié)果,數(shù)據(jù)遷移到另外一個(gè)數(shù)據(jù)庫中,而ODCH需要將整張關(guān)系表的數(shù)據(jù)進(jìn)行數(shù)據(jù)遷移操作。因此本文提出的MAQM能夠提高多數(shù)據(jù)源關(guān)聯(lián)查詢的查詢性能。
為了解決數(shù)據(jù)遷移對(duì)多數(shù)據(jù)源關(guān)聯(lián)查詢的影響,本文針對(duì)現(xiàn)有方法查詢性能低和存儲(chǔ)系統(tǒng)間的耦合度高的問題,提出了一個(gè)多數(shù)據(jù)源關(guān)聯(lián)查詢模型MAQM,通過包裝器對(duì)所有的存儲(chǔ)系統(tǒng)進(jìn)行包裝,使存儲(chǔ)系統(tǒng)能夠忽略相互之間的存儲(chǔ)差異性,連接到MAQM中。本文進(jìn)一步提出了區(qū)域劃分策略,以存儲(chǔ)系統(tǒng)的關(guān)系表為劃分中心,建立條件層、關(guān)系表層和輸出層相分離的區(qū)域有向圖,實(shí)現(xiàn)了系統(tǒng)內(nèi)查詢子任務(wù)的分配;考慮到系統(tǒng)間中間結(jié)果的數(shù)據(jù)遷移對(duì)查詢性能的影響,以系統(tǒng)內(nèi)和系統(tǒng)間的操作時(shí)間為約束,建立數(shù)據(jù)遷移代價(jià)模型,確定中間結(jié)果的傳輸方向,從而確定查詢子任務(wù)的執(zhí)行順序。
實(shí)驗(yàn)及分析結(jié)果表明,本文的方法不僅能夠準(zhǔn)確劃分出多數(shù)據(jù)源關(guān)聯(lián)查詢命令的子任務(wù),而且能夠降低多數(shù)據(jù)源關(guān)聯(lián)查詢的響應(yīng)時(shí)間和提高多數(shù)據(jù)源關(guān)聯(lián)查詢的性能。