一種大規(guī)模RDF圖的ThetaJoin查詢處理方法
【專利摘要】本發(fā)明公開了一種大規(guī)模RDF圖的ThetaJoin查詢處理方法,包括了以下步驟:(1)采用伙伴內(nèi)存分配的方式分配ID空間,對RDF常量數(shù)據(jù)進(jìn)行保序編碼。(2)建立數(shù)據(jù)字典,將RDF三元組數(shù)據(jù)轉(zhuǎn)化為ID三元組,壓縮存儲并建立索引。(3)解析含ThetaJoin的SPARQL查詢請求,將已知量轉(zhuǎn)化為ID并將變量編碼。(4)利用擴(kuò)展的查詢圖模型對查詢進(jìn)行表示,查詢分解劃分星型子查詢,為各星型子查詢生成執(zhí)行計(jì)劃。(5)并行執(zhí)行各個(gè)星型子查詢,利用數(shù)據(jù)的分塊和流水線提高并行度,并盡可能早的處理ThetaJoin。(6)將星型子查詢內(nèi)部的變量約束傳遞給相鄰星型子查詢,利用連接調(diào)度對中間結(jié)果執(zhí)行連接運(yùn)算,削減中間結(jié)果。(7)執(zhí)行全連接,按照投影變量的順序?qū)⒉樵兘Y(jié)果返回給用戶。
【專利說明】
一種大規(guī)模RDF圖的ThetaJo i η查詢處理方法
技術(shù)領(lǐng)域
[000?]本發(fā)明屬于大數(shù)據(jù)處理領(lǐng)域,更具體地,涉及一種大規(guī)模RDF圖數(shù)據(jù)的ThetaJoin查詢處理方法。
【背景技術(shù)】
[0002]過去的一些年,語義網(wǎng)和RDF的研究與應(yīng)用都得到了飛速發(fā)展。一些重要的應(yīng)用領(lǐng)域如社交網(wǎng)絡(luò)、生命科學(xué)、商業(yè)智能都更傾向于使用RDF數(shù)據(jù)模型。越來越多的機(jī)構(gòu)如紐約時(shí)報(bào)、維基百科(Wikipedia)等,在互聯(lián)網(wǎng)上發(fā)布RDF形式的數(shù)據(jù)。與此同時(shí),RDF的數(shù)據(jù)規(guī)模也以驚人的速度爆發(fā)式增長。目前LOD(Linked Open Data)項(xiàng)目已從2011年的294個(gè)數(shù)據(jù)集增長到2014年的1091個(gè)數(shù)據(jù)集,數(shù)據(jù)總規(guī)模量早在2012年便超過了 520億條三元組。
[0003]對于RDF數(shù)據(jù)的存儲與查詢,國內(nèi)外專家提出了許多思路和方法,也涌現(xiàn)出了許多不同類型的RDF數(shù)據(jù)存儲查詢引擎。按照存儲方式大體上可以分為:基于三元組表的存儲引擎、基于屬性表的存儲引擎、基于垂直劃分的存儲引擎以及基于數(shù)據(jù)圖的存儲引擎。在查詢處理上,也出現(xiàn)了各種各樣的方式。將SPARQL查詢轉(zhuǎn)化為SQL語句利用關(guān)系數(shù)據(jù)庫是處理查詢最直接簡單的方式,但更有效的處理方式是利用自有存儲結(jié)合針對RDF數(shù)據(jù)的查詢優(yōu)化來處理SPARQL查詢。
[0004]SPARQL作為W3C推薦的語義數(shù)據(jù)標(biāo)準(zhǔn)查詢語句,2013年發(fā)布的SPARQL1.1查詢語言規(guī)則,包括了數(shù)據(jù)的更新、ThetaJoin等一系列復(fù)雜的操作。而已有的一部分RDF查詢引擎,如RDF-3X,TripleBit等,僅能夠處理簡單的三元組模式匹配查詢,涉及到的連接處理都是Equ1-Join,將查詢的優(yōu)化工作集中在了等值連接的查詢優(yōu)化上,而不能處理含不等符號(<,>,>=,〈=)的ThetaJoin查詢。但在RDF的數(shù)據(jù)分析和數(shù)據(jù)挖掘領(lǐng)域,會涉及很多復(fù)雜的查詢,包括ThetaJoin查詢。ThetaJoin查詢可以更豐富地表達(dá)用戶的查詢需求。關(guān)于ThetaJoin查詢的優(yōu)化技術(shù),隨著數(shù)據(jù)庫技術(shù)尤其是關(guān)系數(shù)據(jù)庫技術(shù)的發(fā)展已經(jīng)被國內(nèi)外學(xué)者研究的較多,但是如何高效處理RDF圖數(shù)據(jù)上的SPARQL ThetaJoin查詢,卻很少被人提及。為了能夠處理RDF圖數(shù)據(jù)上的ThetaJoin查詢,有些專家利用分布式MapReduce并行框架來實(shí)現(xiàn)Mult1-Way ThetaJoin等,但這些研究工作在處理RDF圖時(shí)將RDF數(shù)據(jù)轉(zhuǎn)化為(Key,Value)對的形式,利用Hadoop本身的特性來進(jìn)行處理。有些研究選擇利用關(guān)系數(shù)據(jù)庫能夠利用SQL引擎處理ThetaJoin查詢。也有一些研究在處理SPARQL查詢時(shí),實(shí)質(zhì)是將SPARQL轉(zhuǎn)化為SQL或通過修改SQL編譯器來支持SPARQL,利用SQL優(yōu)化的方式進(jìn)行處理,但都借助于已有數(shù)據(jù)庫的優(yōu)化策略,未能針對RDF數(shù)據(jù)本身的特性進(jìn)行優(yōu)化,效率都比較低,開銷較大。
【發(fā)明內(nèi)容】
[0005]針對以上現(xiàn)有技術(shù)缺陷或改進(jìn)需求,本發(fā)明提供一種大規(guī)模RDF圖數(shù)據(jù)的ThetaJoin查詢處理方法,其目的在于為已有的RDF存儲系統(tǒng)提供處理ThetaJoin查詢的方法,提升ThetaJoin查詢的處理效率,同時(shí)使得對于數(shù)據(jù)規(guī)模的增加,具有良好的擴(kuò)展性。
[0006]為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種大規(guī)模RDF圖數(shù)據(jù)的ThetaJoin查詢處理方法,具體包括了以下步驟:
[0007](I)采用類似于伙伴內(nèi)存分配的方式分配ID空間,對RDF常量數(shù)據(jù)進(jìn)行保序編碼,對分配的ID空間建立索引。
[0008](2)建立數(shù)據(jù)字典,將RDF三元組數(shù)據(jù)轉(zhuǎn)化為ID三元組數(shù)據(jù),采用壓縮的位圖矩陣進(jìn)行存儲,并建立索引。
[0009](3)用戶提交SPARQL查詢語句,將用戶提交的查詢語句交給SPARQL解析器進(jìn)行解析,并將查詢語句中的已知量轉(zhuǎn)化為ID,并對變量進(jìn)行編碼。
[0010](4)構(gòu)建查詢圖,對查詢圖進(jìn)行優(yōu)化,將復(fù)雜的關(guān)系模式及表達(dá)式模式進(jìn)行分解,使得查詢圖得以簡化。將查詢圖分解為若干以連接變量為中心的星型子查詢,計(jì)算模式、變量以及連接的選擇度,并為每個(gè)子查詢生成相應(yīng)的查詢執(zhí)行計(jì)劃。
[0011](5)并行的執(zhí)行各個(gè)星型子查詢,星型子查詢內(nèi)部利用數(shù)據(jù)的分塊和基于塊的流水線scan提高并行度,同時(shí)盡可能早的執(zhí)行星型子查詢內(nèi)部的Thetajoin。
[0012](6)將星型子查詢中間結(jié)果的變量約束信息傳遞給相鄰的星型子查詢,利用數(shù)據(jù)的分塊將模式之間的連接轉(zhuǎn)化為塊之間的連接,采用面向塊的連接調(diào)度執(zhí)行,削減中間結(jié)果O
[0013](7)執(zhí)行全連接,按照循環(huán)嵌套連接的方式執(zhí)行Thetajoin,將滿足條件的元組按照投影變量的順序轉(zhuǎn)化為字符串形式,并輸出最終結(jié)果返回給用戶。
[0014]總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下有益效果:
[0015](I)節(jié)省I/O開銷。與直接存儲原始數(shù)據(jù)相比,利用保序ID編碼壓縮存儲的方式,大大減少數(shù)據(jù)的存儲空間。針對Thetajoin查詢存在比較操作符的特性,與普通編碼方式相比,保序編碼能夠?qū)⒃紨?shù)據(jù)的比較轉(zhuǎn)化為ID的比較,省去了頻繁查找ID對應(yīng)的原始數(shù)據(jù)的過程,減少了 I/O代價(jià)。
[0016](2)節(jié)省執(zhí)行開銷。對查詢進(jìn)行分解,僅為簡單的星型子查詢生成查詢計(jì)劃,比為整個(gè)查詢生成查詢計(jì)劃更簡單。采用基于塊的流水線scan和面向塊的連接調(diào)度,將一個(gè)大的范圍分割為多個(gè)小的間隔區(qū)間,同時(shí)將模式的連接轉(zhuǎn)化為塊的連接,并行度大,中間結(jié)果更小。
【附圖說明】
[0017]圖1為本發(fā)明的大規(guī)模RDF圖的Thetajoin查詢處理方法的流程圖;
[0018]圖2為本發(fā)明的保序ID分配的流程圖;
[0019]圖3為本發(fā)明實(shí)施例的星型子查詢內(nèi)部基于塊的流水線scan處理的子圖。
【具體實(shí)施方式】
[0020]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0021]本發(fā)明提出了一種大規(guī)模RDF圖的Thetajoin查詢處理方法,包括對RDF圖數(shù)據(jù)實(shí)行保序ID編碼、查詢處理等,其中查詢處理流程圖如圖1所示,包括以下步驟:
[0022]步驟I常量數(shù)據(jù)的保序ID分配,流程圖如圖2所示,具體包括以下幾個(gè)子步驟:
[0023](1-1)對RDF數(shù)據(jù)進(jìn)行預(yù)處理,收集RDF常量數(shù)據(jù),劃分為字符串和數(shù)值型數(shù)據(jù),并分別排序;
[0024](1-2)依據(jù)實(shí)體的數(shù)目將ID空間大小設(shè)為232,ID空間允許分裂和回收,同時(shí)分配與回收的ID空間大小為2的冪次方;
[0025](1-3)為每一段數(shù)據(jù)分配一段連續(xù)的ID空間,大小為2的冪次方且大于數(shù)據(jù)段的長度;
[0026](1-4)對數(shù)據(jù)段內(nèi)的每一個(gè)常量數(shù)據(jù),找到對應(yīng)分配的ID空間,依據(jù)分配的連續(xù)ID空間大小及常量值數(shù)據(jù)的大小順序,在已分配的ID空間中為常量數(shù)據(jù)分配一個(gè)保持大小關(guān)系一致性的ID;
[0027](1-5)若對應(yīng)的ID空間中無法繼續(xù)分配與其保持大小一致性的ID,則回收該ID空間,撤銷該段數(shù)據(jù)已分配的ID并重新分配,重復(fù)(1-3)和(1-4)直至所有數(shù)據(jù)編碼結(jié)束。
[0028]步驟2建立RDF數(shù)據(jù)原始字符串與ID相互映射的數(shù)據(jù)字典。將原始數(shù)據(jù)轉(zhuǎn)化為ID,從而將RDF數(shù)據(jù)的三元組轉(zhuǎn)化為ID三元組,并壓縮存儲。建立用于數(shù)據(jù)定位的塊索引以及有助于查詢執(zhí)行的實(shí)體謂詞索引和統(tǒng)計(jì)信息索引。
[0029]步驟3用戶將查詢請求利用SPARQL語句表示。將用戶提交的查詢語句交給SPARQL解析器進(jìn)行解析,將查詢語句中的變量編碼,利用數(shù)據(jù)字典,將查詢語句中的已知量轉(zhuǎn)化為ID0
[0030]步驟4構(gòu)建查詢圖并進(jìn)行優(yōu)化,查詢分解,生成查詢計(jì)劃。具體包括了以下幾個(gè)子步驟:
[0031](4-1)將查詢語句中的復(fù)雜表達(dá)式模式(含有邏輯預(yù)算與、或和非)進(jìn)行分解簡化;
[0032](4-2)構(gòu)建查詢圖,其中變量(包括連接變量和約束變量)以及模式(包括三元組模式、關(guān)系模式和表達(dá)式模式)為頂點(diǎn)。若變量出現(xiàn)在模式中,則變量頂點(diǎn)與模式頂點(diǎn)之間形成一條邊。若兩個(gè)模式之間具有共同的連接變量,則兩個(gè)模式頂點(diǎn)之間形成一條邊;
[0033](4-3)將查詢圖分解成多個(gè)以變量為中心的星型子查詢;
[0034](4-4)計(jì)算模式、變量的選擇度,將以低選擇度變量為中心的星型子查詢中的公共模式標(biāo)記為不執(zhí)行,避免重復(fù)計(jì)算;
[0035](4-5)根據(jù)變量選擇度和模式選擇度的大小順序,將部分值約束表達(dá)式模式與三元組模式合并,使得查詢執(zhí)行過程中模式的scan與過濾操作同時(shí)執(zhí)行;調(diào)整模式的執(zhí)行順序,為每個(gè)星型子查詢生成查詢計(jì)劃。
[0036]步驟5并行的執(zhí)行各星型子查詢,星型子查詢采用基于塊的流水線scan,如圖3所示,具體包括以下子步驟:
[0037](5-1)各星型子查詢并行執(zhí)行;
[0038](5-2)在星型子查詢內(nèi)部采用基于塊的流水線scan。依據(jù)模式選擇度大小順序,利用索引,定位星型子查詢最大選擇度的模式對應(yīng)的數(shù)據(jù)塊范圍,并行的讀?。?br>[0039](5-3)當(dāng)最大選擇度模式的一個(gè)數(shù)據(jù)塊scan結(jié)束,將數(shù)據(jù)塊的邊界值傳遞給星型子查詢內(nèi)其他低選擇度模式;
[0040](5-4)星型子查詢內(nèi)低選擇度模式利用得到的邊界值及索引,定位需要讀取的數(shù)據(jù)塊范圍,并行讀??;
[0041](5-5)將星型子查詢內(nèi)的星型模式連接轉(zhuǎn)化為數(shù)據(jù)塊的連接,利用連接調(diào)度并行執(zhí)行。
[0042]步驟6將星型子查詢內(nèi)部中間結(jié)果的變量約束信息傳遞給相鄰的星型子查詢,采用面向塊的連接調(diào)度并發(fā)執(zhí)行,對中間結(jié)果繼續(xù)削減。
[0043]步驟7執(zhí)行全連接,按照循環(huán)嵌套連接的方式執(zhí)行ThetaJoin,將滿足條件的元組按照投影變量的順序轉(zhuǎn)化為原始數(shù)據(jù)并返回給用戶。
[0044]本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種大規(guī)模RDF圖的ThetaJoin查詢處理方法,其特征在于,包括以下步驟: 步驟I采用伙伴內(nèi)存分配的方式分配ID空間,對RDF常量數(shù)據(jù)進(jìn)行保序編碼,使得數(shù)據(jù)的ID大小順序與原始數(shù)據(jù)的大小順序保持一致,并對分配的ID空間建立索引; 步驟2建立原始數(shù)據(jù)與ID相互映射的數(shù)據(jù)字典,將RDF圖數(shù)據(jù)轉(zhuǎn)化為ID三元組數(shù)據(jù)進(jìn)行壓縮存儲并建立索引; 步驟3將用戶提交的SPARQL查詢語句交給SPARQL解析器,將查詢語句中的已知量轉(zhuǎn)化為ID,并對變量進(jìn)行編碼; 步驟4將解析后查詢語句中的變量、三元組模式、關(guān)系模式、表達(dá)式模式表示成查詢圖,對查詢圖進(jìn)行優(yōu)化,將查詢圖分解為多個(gè)星型子查詢,為每個(gè)星型子查詢生成相應(yīng)的執(zhí)行計(jì)劃; 步驟5并行的執(zhí)行各個(gè)星型子查詢,星型子查詢內(nèi)部利用數(shù)據(jù)的分塊和基于塊的流水線scan提高并行度,同時(shí)盡可能早的執(zhí)行星型子查詢內(nèi)部的ThetaJoin ; 步驟6將星型子查詢內(nèi)部中間結(jié)果的變量約束信息傳遞給相鄰的星型子查詢,將模式的連接轉(zhuǎn)化為塊的連接,采用面向塊的連接調(diào)度并發(fā)執(zhí)行,削減中間結(jié)果; 步驟7執(zhí)行全連接,按照循環(huán)嵌套連接的方式執(zhí)行ThetaJoin,按照投影變量的順序收集結(jié)果集ID,轉(zhuǎn)化為字符串,并輸出最終結(jié)果返回給用戶。2.如權(quán)利要求1所述的大規(guī)模RDF圖的ThetaJoin查詢處理方法,其特征在于,所述步驟I具體包括以下子步驟: (1-1)對RDF數(shù)據(jù)進(jìn)行預(yù)處理,收集RDF常量數(shù)據(jù),劃分為字符串和數(shù)值型數(shù)據(jù),并分別排序; (1-2)依據(jù)實(shí)體的數(shù)目將ID空間大小設(shè)為232,ID空間允許分配和回收,分配與回收的ID空間大小為2的冪次方; (1-3)為每一段數(shù)據(jù)分配一段連續(xù)的ID空間,大小為2的冪次方且大于數(shù)據(jù)段的長度;(1-4)對段內(nèi)每一個(gè)常量數(shù)據(jù),找到其對應(yīng)分配的ID空間,依據(jù)分配的連續(xù)ID空間大小及常量值數(shù)據(jù)大小順序,在已分配的ID空間中為常量數(shù)據(jù)分配一個(gè)保持大小關(guān)系一致性的ID; (1-5)若對應(yīng)的ID空間中無法繼續(xù)分配與其保持大小一致性的ID,則回收該ID空間,撤銷該段數(shù)據(jù)已分配的ID并重新分配,重復(fù)(1-3)和(1-4)直至所有數(shù)據(jù)編碼結(jié)束。3.如權(quán)利要求1或2所述的大規(guī)模RDF圖的ThetaJoin查詢處理方法,其特征在于,所述步驟4具體包括以下子步驟: (4-1)將查詢語句中的復(fù)雜表達(dá)式模式進(jìn)行分解簡化,所述復(fù)雜表達(dá)式模式包含了邏輯運(yùn)算符與、或和非; (4-2)構(gòu)建查詢圖,其中變量以及模式為頂點(diǎn),所述變量包括連接變量和約束變量,所述模式包括三元組模式、關(guān)系模式和表達(dá)式模式;若變量出現(xiàn)在模式中,則該變量頂點(diǎn)與模式頂點(diǎn)之間形成一條邊;若兩個(gè)模式之間具有共同的連接變量,則兩個(gè)模式頂點(diǎn)之間形成一條邊; (4-3)將查詢分解成多個(gè)以變量為中心的星型子查詢; (4-4)計(jì)算模式、變量的選擇度,將以低選擇度變量為中心的星型子查詢中的公共模式標(biāo)記為不執(zhí)行,避免重復(fù)計(jì)算; (4-5)根據(jù)變量選擇度和模式選擇度的大小順序,將部分值約束表達(dá)式模式與三元組模式合并,使得查詢執(zhí)行過程中模式的scan與過濾操作同時(shí)執(zhí)行;調(diào)整模式的執(zhí)行順序,為每個(gè)星型子查詢生成查詢計(jì)劃。4.如權(quán)利要求1或2所述的大規(guī)模RDF圖的ThetaJoin查詢處理方法,其特征在于,所述步驟5具體包括以下子步驟: (5-1)各星型子查詢并行執(zhí)行; (5-2)在星型子查詢內(nèi)部采用基于塊的流水線scan。依據(jù)模式選擇度大小順序,利用索弓丨,定位星型子查詢最大選擇度的模式對應(yīng)的數(shù)據(jù)塊范圍,并行的讀??; (5-3)當(dāng)最大選擇度模式的一個(gè)數(shù)據(jù)塊scan結(jié)束,將數(shù)據(jù)塊的邊界值傳遞給星型子查詢內(nèi)其他低選擇度模式; (5-4)星型子查詢內(nèi)低選擇度模式利用得到的邊界值及索引,定位需要讀取的數(shù)據(jù)塊范圍,并行讀取; (5-5)將星型子查詢內(nèi)的星型模式連接轉(zhuǎn)化為數(shù)據(jù)塊的連接,利用連接調(diào)度并行執(zhí)行,削減中間結(jié)果大小。
【文檔編號】G06F17/30GK105955999SQ201610247087
【公開日】2016年9月21日
【申請日】2016年4月20日
【發(fā)明人】袁平鵬, 金海 , 王濤
【申請人】華中科技大學(xué)