亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種列族覆蓋存儲的SPARQL查詢優(yōu)化方法與流程

文檔序號:12121474閱讀:736來源:國知局
一種列族覆蓋存儲的SPARQL查詢優(yōu)化方法與流程

本發(fā)明涉及RDF數(shù)據(jù)查詢技術(shù)領(lǐng)域,尤其涉及一種列族覆蓋存儲的SPARQL查詢優(yōu)化方法。



背景技術(shù):

RDF數(shù)據(jù)模型是一種圖狀形式,以邊為單位,結(jié)構(gòu)靈活,適用于描述無模式或半模式數(shù)據(jù)。目前,基于RDF數(shù)據(jù)的查詢已成為急切需求,其中,SPARQL查詢語言被W3C接受,成為RDF數(shù)據(jù)的查詢標(biāo)準(zhǔn)。隨著新數(shù)據(jù)源的加入,以及數(shù)據(jù)自身內(nèi)容的變化,模式永遠(yuǎn)都處于變化中。因而,RDF數(shù)據(jù)庫的存儲就涉及將數(shù)據(jù)分散存儲到列族中。這些列族之間具有相似性,存在交叉覆蓋的現(xiàn)象,即多個(gè)列族中都含有相同的列名,稱為列族覆蓋。通常,同名謂詞允許出現(xiàn)在多個(gè)列族中,但列族間的數(shù)據(jù)不存在冗余,且描述同一主語的所有信息僅出現(xiàn)在一個(gè)列族中。在這樣的場景下,我們需要考慮列族覆蓋這種復(fù)雜情況下的數(shù)據(jù)集查詢的優(yōu)化問題?;赟PARQL的查詢結(jié)構(gòu),可將其分為三種類型:鏈型查詢、星型查詢和混合查詢,由于混合查詢由星型查詢和鏈型查詢構(gòu)成,所以將主要針對前兩種查詢進(jìn)行優(yōu)化。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明所要解決的技術(shù)問題是:提供一種列族覆蓋存儲數(shù)據(jù)集的SPARQL查詢優(yōu)化方法。

為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:一種列族覆蓋存儲的SPARQL查詢優(yōu)化方法,包括:

當(dāng)為星型查詢時(shí),采用連接優(yōu)先的執(zhí)行策略進(jìn)行查詢;

當(dāng)為鏈型查詢時(shí),分別判斷采用連接優(yōu)先的執(zhí)行策略和包并優(yōu)先的執(zhí)行策略進(jìn)行查詢的代價(jià),選擇代價(jià)較小的執(zhí)行策略進(jìn)行查詢。

本發(fā)明的有益效果在于:在列族覆蓋存儲數(shù)據(jù)集的SPARQL查詢中,針對星型查詢和鏈型查詢兩種情況,分別給出優(yōu)化方法,提高了查詢效率。

附圖說明

圖1為本發(fā)明列族覆蓋存儲的SPARQL查詢優(yōu)化方法流程圖;

圖2為本發(fā)明實(shí)施例星型查詢示意圖;

圖3為本發(fā)明實(shí)施例鏈型查詢示意圖。

具體實(shí)施方式

為詳細(xì)說明本發(fā)明的技術(shù)內(nèi)容、所實(shí)現(xiàn)目的及效果,以下結(jié)合實(shí)施方式并配合附圖予以說明。

本發(fā)明最關(guān)鍵的構(gòu)思在于:針對星型查詢,使用連接優(yōu)先的執(zhí)行策略;針對鏈型查詢,首先判斷連接優(yōu)先與包并優(yōu)先哪種執(zhí)行策略代價(jià)最小,從中選擇代價(jià)最小的執(zhí)行策略。

請參照圖1至圖3,一種列族覆蓋存儲的SPARQL查詢優(yōu)化方法,包括:

當(dāng)為星型查詢時(shí),采用連接優(yōu)先的執(zhí)行策略進(jìn)行查詢;

當(dāng)為鏈型查詢時(shí),分別判斷采用連接優(yōu)先的執(zhí)行策略和包并優(yōu)先的執(zhí)行策略進(jìn)行查詢的代價(jià),選擇代價(jià)較小的執(zhí)行策略進(jìn)行查詢。

從上述描述可知,本發(fā)明的有益效果在于:在列族覆蓋存儲數(shù)據(jù)集的SPARQL查詢中,針對星型查詢和鏈型查詢兩種情況,分別給出優(yōu)化方法,針對星型查詢,使用連接優(yōu)先的執(zhí)行策略,針對鏈型查詢,首先判斷連接優(yōu)先與包并優(yōu)先哪種執(zhí)行策略代價(jià)最小,從中選擇代價(jià)最小的執(zhí)行策略,提高了查詢效率。

進(jìn)一步的,當(dāng)為星型查詢時(shí),在采用連接優(yōu)先的執(zhí)行策略進(jìn)行查詢之前,還包括將星型連接轉(zhuǎn)換成列族的過濾,得到包含星型查詢中的全部屬性的列族。

由上述描述可知,進(jìn)行星型查詢前先過濾不包含全部星型查詢屬性的列族,查詢時(shí)可以避免不必要的掃描,提高查詢效率。

進(jìn)一步的,當(dāng)為星型查詢時(shí),采用連接優(yōu)先的執(zhí)行策略進(jìn)行查詢,具體包括:

針對待查詢屬性,對所述包含星型查詢中的全部屬性的列族進(jìn)行投影;

若過濾后僅剩一個(gè)列族,查詢結(jié)果集為所述列族投影;

若過濾剩下多個(gè)列族,查詢結(jié)果集為所述多個(gè)列族投影的包并。

進(jìn)一步的,當(dāng)為鏈型查詢時(shí),通過代價(jià)預(yù)估工具分別判斷采用連接優(yōu)先的執(zhí)行策略和包并優(yōu)先的執(zhí)行策略進(jìn)行查詢的代價(jià),選擇代價(jià)較小的執(zhí)行策略進(jìn)行查詢。

進(jìn)一步的,所述代價(jià)預(yù)估工具包括借助是否存在索引來判斷,若查詢涉及的列存在索引,則采用連接優(yōu)先的執(zhí)行策略進(jìn)行查詢;若查詢涉及的列不存在索引,則采用包并優(yōu)先的執(zhí)行策略進(jìn)行查詢。

進(jìn)一步的,當(dāng)鏈型查詢采用連接優(yōu)先的執(zhí)行策略進(jìn)行查詢時(shí),具體包括:

從所有列族的列值中找出同時(shí)包含鏈型查詢?nèi)繉傩缘慕M合,將所述組合串成一組按鏈型查詢關(guān)系順序的連接;

若只得到一種組合,則查詢結(jié)果集為所述連接的結(jié)果;

若得到多種組合,則查詢結(jié)果集為所述連接的結(jié)果的包并。

進(jìn)一步的,當(dāng)鏈型查詢采用包并優(yōu)先的執(zhí)行策略進(jìn)行查詢時(shí),具體包括:

針對每一個(gè)RDF主謂賓元組,從所有列族中找出涉及鏈型查詢屬性的列,將所述列對應(yīng)的非空的列值包并起來;

將所述包并的結(jié)果按照鏈型查詢關(guān)系連接起來,得到查詢結(jié)果集。

實(shí)施例

請參照圖1至圖3,本發(fā)明的實(shí)施例一為:如圖1所示,一種列族覆蓋存儲的SPARQL查詢優(yōu)化方法,包括:

當(dāng)為星型查詢時(shí),采用連接優(yōu)先的執(zhí)行策略進(jìn)行查詢,進(jìn)一步優(yōu)化成列族投影的包并,實(shí)施方式如下:

如圖2所示,該類查詢的目的是查詢直接關(guān)聯(lián)節(jié)點(diǎn)的信息,即查詢的目的是得到foaf:person1在foaf:firstName和foaf:surName這兩個(gè)屬性上的取值,?firstName和?surName的“?”表示后面是變量名,為簡化描述,星型查詢簡化表示為:{?a Pred1?v1}.{?a Pred2?v2}.{?a Pred3?v3}等。

將星型連接轉(zhuǎn)換成列族的過濾,即過濾留下的每一個(gè)列族,必須滿足:每一個(gè)列族中包含的列名,必須包含星型查詢中涉及的所有屬性。在所有列族中,過濾剩下的每一個(gè)列族T1、T2、T3…都含有Pred1、Pred2、Pred3…這些關(guān)系。

接下來,對每一個(gè)過濾剩下的列族,針對待查詢的屬性進(jìn)行投影:πID,Pred1,Pred2...(T1)、πID,Pred1,Pred2...(T2)等。一方面去除掉列族中與待查詢屬性無關(guān)的列;另一方面去除掉待查詢屬性值為空的行。

若過濾僅剩一個(gè)列族T1,查詢結(jié)果集為該列族投影,即πID,Pred1,Pred2...(T1);

若過濾剩下多個(gè)列族T1、T2、T3…,查詢結(jié)果集為這些列族投影的包并,即πID,Pred1,Pred2...(T1)∪πID,Pred1,Pred2...(T2)∪πID,Pred1,Pred2...(T3)...。

當(dāng)為鏈型查詢時(shí),分別判斷采用連接優(yōu)先的執(zhí)行策略和包并優(yōu)先的執(zhí)行策略進(jìn)行查詢的代價(jià),選擇代價(jià)較小的執(zhí)行策略進(jìn)行查詢。

當(dāng)為鏈型查詢時(shí),判斷連接優(yōu)先與包并優(yōu)先哪種執(zhí)行策略代價(jià)小,從中選擇代價(jià)小的執(zhí)行策略。代價(jià)預(yù)估的一種方法是借助是否存在索引的方式來判斷:若查詢涉及的列存在索引,則采用連接優(yōu)先的執(zhí)行策略進(jìn)行查詢;若查詢涉及的列不存在索引,則采用包并優(yōu)先的執(zhí)行策略進(jìn)行查詢。具體實(shí)現(xiàn)如下所述:

Algorithm ChainOptimize(q,dd)

輸入:

q--一個(gè)鏈型的SPARQL查詢

dd--數(shù)據(jù)庫的數(shù)據(jù)字典,包括列族信息

輸出:sql--優(yōu)化后的SQL查詢

ChainOptimize是主函數(shù),根據(jù)輸入的鏈型SPARQL查詢和數(shù)據(jù)字典信息(包括列族信息)得到優(yōu)化后的SQL查詢。第1行將鏈型查詢分解為多個(gè)基本圖模式(即RDF的主謂賓元組),每對基本圖模式相互連接,構(gòu)成鏈型查詢;然后在第2~4行得到每個(gè)基本圖模式對應(yīng)的列族,存儲于變量colFamSet中;第5~7行是關(guān)鍵,針對每對連接,得到優(yōu)化后的SQL,具體的實(shí)現(xiàn)在AddSQL函數(shù)中。AddSQL的主要工作是:針對每個(gè)連接,判斷是連接優(yōu)先還是包并優(yōu)先,默認(rèn)支持包并優(yōu)先,如根據(jù)預(yù)估的執(zhí)行代價(jià),發(fā)現(xiàn)連接優(yōu)先更為有利,則轉(zhuǎn)換為連接優(yōu)先的寫法,具體做法如下所示:

AlgorithmAddSQL(sql,curCols,nextCols,dd)

輸入:

sql--對本次連接優(yōu)化前的SQL查詢

curCols--當(dāng)前基本圖模式對應(yīng)的列族

nextCols--下一個(gè)基本圖模式對應(yīng)的列族

dd--數(shù)據(jù)字典

輸出:sql--對本次連接優(yōu)化后的SQL語句

預(yù)估執(zhí)行代價(jià)時(shí),先判斷這對基本圖模式對應(yīng)的列族中是否有索引或稱排序,通過函數(shù)IndexExists得到,如果存在,通過JoinFirst函數(shù)判斷連接優(yōu)先的執(zhí)行代價(jià)是否優(yōu)于包并優(yōu)先,如是,則根據(jù)連接優(yōu)先的方法改寫SQL查詢,使用AddJoin函數(shù)將下一個(gè)圖模式的列族并集與當(dāng)前圖模式對應(yīng)的列族并集進(jìn)行連接;否則,如第6行所示,調(diào)用AddUnion方法,根據(jù)包并優(yōu)先的方法實(shí)現(xiàn)兩個(gè)圖模式的連接。

如圖3所示,為鏈型查詢示意圖,鏈型查詢的特點(diǎn)在于它側(cè)重于尋找與節(jié)點(diǎn)間接關(guān)聯(lián)的其他節(jié)點(diǎn)的信息,例如,查詢‘foaf:person1’合作者的頭銜,由于RDF圖是一個(gè)有向圖,實(shí)際的鏈型查詢并不一定能在圖中顯示為一條有向鏈,更可能是由多條方向相反的鏈組成。由于邊方向?qū)Σ樵冝D(zhuǎn)換的影響不大,差別僅在于連接的順序,為簡化描述,鏈型查詢簡化表示為:{?a Pred1?v1}.{?v1Pred2?v2}.{?v2Pred3?v3}等。

經(jīng)過代價(jià)預(yù)估判斷,鏈型查詢?nèi)舨捎眠B接優(yōu)先的執(zhí)行策略,其實(shí)現(xiàn)方法為:從所有列族的列值中找出各種組合,每一種組合串成一組按Pred1、Pred2、Pred3…順序的連接:{?a列值、?v1列值}Joinv1相同{?v1列值、?v2列值}Joinv2相同{?v2列值、?v3列值}…。若只得到一種組合,則查詢結(jié)果集為上述連接的結(jié)果;若得到多種組合,則查詢結(jié)果集為上述這些連接結(jié)果的包并。

鏈型查詢?nèi)舨捎冒?yōu)先的執(zhí)行策略,其實(shí)現(xiàn)方法為:針對鏈型查詢涉及的每一個(gè)RDF主謂賓元組,從所有列族中找出涉及的列,將對應(yīng)的非空的列值包并起來,例如從所有列族中找出涉及{?a Pred1?v1}的列,將對應(yīng)的非空的列值包并起來;同樣,從所有列族中找出涉及{?v1Pred2?v2}的列,將對應(yīng)的非空的列值包并起來…。再將包并的結(jié)果按照該鏈型查詢的關(guān)聯(lián)關(guān)系,連接起來,即連接成{?a、?v1}Joinv1相同{?v1、?v2}Joinv2相同{?v2、?v3}…的形式,得到查詢結(jié)果集。

綜上所述,本發(fā)明提供的一種列族覆蓋存儲的SPARQL查詢優(yōu)化方法,當(dāng)為星型查詢時(shí),使用連接優(yōu)先的執(zhí)行策略,查詢優(yōu)化為列族投影的包并;當(dāng)為鏈型查詢時(shí),通過代價(jià)預(yù)估,判斷連接優(yōu)先與包并優(yōu)先哪種執(zhí)行策略代價(jià)最小,從中選擇代價(jià)最小的執(zhí)行策略,可使查詢效率顯著提升。

以上所述僅為本發(fā)明的實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等同變換,或直接或間接運(yùn)用在相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1