本發(fā)明涉及一種基于圖遍歷的sparql查詢執(zhí)行方法,具體涉及一種面向大數(shù)據(jù)關(guān)聯(lián)的存儲和查詢的方法及系統(tǒng)。
背景技術(shù):
::圖數(shù)據(jù)挖掘和分析是大數(shù)據(jù)的新領域,通過建立關(guān)聯(lián)萬維網(wǎng)資源、微生物菌種資源、以及科研資源等的關(guān)聯(lián)關(guān)系,支持基于數(shù)據(jù)關(guān)聯(lián)的信息挖掘和科學發(fā)現(xiàn)。資源描述框架(resourcedescriptionframework,簡稱rdf)是用于表達關(guān)于萬維網(wǎng)(worldwideweb)資源的信息的語言,能夠表達任何可在互聯(lián)網(wǎng)上被標識的事物的信息,如頁面標題、作者和修改時間以及不同數(shù)據(jù)之間的關(guān)聯(lián)關(guān)系。rdf規(guī)范提供了描述資源的基礎性詞匯表,定義了各領域應用如wdcm(mircenworlddatacentreformicroorganisms)微生物描述資源詞匯表時必須遵循的規(guī)則。sparql(sparqlprotocolandrdfquerylanguage)是為rdf開發(fā)的一種查詢語言和數(shù)據(jù)獲取協(xié)議,由w3c國際標準組織推薦的rdf數(shù)據(jù)模型定義,用于查詢?nèi)魏文苡胷df表示的信息資源。sparql協(xié)議和rdf查詢語言(sparql)于2008年1月15日正式成為一項w3c推薦標準。由于rdf使用了結(jié)構(gòu)化的xml數(shù)據(jù),檢索和查詢能夠理解元數(shù)據(jù)的精確含義,搜索變得更為智能和準確,有效避免了檢索經(jīng)常返回無關(guān)數(shù)據(jù)的情況。rdf文件包含若干資源描述,每個資源描述由若干語句構(gòu)成,每個語句由資源、屬性類型、屬性值構(gòu)成三元組,表示資源具有一個屬性。資源對應于自然語言中的主語,屬性類型對應于謂語,屬性值對應于賓語,多個rdf資源文件構(gòu)成完整的資源描述和關(guān)聯(lián)圖。隨著關(guān)聯(lián)網(wǎng)絡的數(shù)據(jù)規(guī)模越來越大,其表達和處理的數(shù)據(jù)類型越來越多,對rdf數(shù)據(jù)存儲和sparql查詢的實時性構(gòu)成挑戰(zhàn)。因此,采用可擴展的新型大數(shù)據(jù)架構(gòu)提升rdf數(shù)據(jù)的存儲和管理效率,提高sparql查詢速度和分析能力非常重要?;诖髨D數(shù)據(jù)處理技術(shù)如bigtable的圖數(shù)據(jù)存儲和管理框架,由于其出色的大規(guī)模數(shù)據(jù)處理能力,成為知識圖譜網(wǎng)絡的新發(fā)展方向。目前,rdf數(shù)據(jù)主要采用關(guān)系數(shù)據(jù)庫表或kv數(shù)據(jù)倉庫存儲和管理rdf三元組,通過自連接的方式實現(xiàn)rdf三元組的主語、謂語和賓語的子圖匹配和sparql查詢,通過hash或index支持本地數(shù)據(jù)的快速查詢和檢索,其典型實現(xiàn)如virtuosordf圖數(shù)據(jù)庫。其分布式版本主要采用聯(lián)邦方式,將rdf數(shù)據(jù)查詢和分布式計算框架融合到一個統(tǒng)一的框架中,具體為:將sparql查詢解析并分發(fā)到各個節(jié)點,每個節(jié)點運行子圖匹配計算然后匯總每個節(jié)點的匹配結(jié)果。該架構(gòu)簡單且易于實現(xiàn),支持rdf數(shù)據(jù)的分布式查詢和快速返回,簡化了面向較大大規(guī)模知識關(guān)聯(lián)網(wǎng)絡的設計和開發(fā)。然而,基于聯(lián)邦和子圖匹配的分布式查詢方式,每次查詢均需要將sparql查詢分解為子圖匹配分發(fā)到多個結(jié)點,運行子圖匹配并返回結(jié)果,容易導致大量的節(jié)點通信和中間數(shù)據(jù)。當數(shù)據(jù)規(guī)模超大時,系統(tǒng)面臨如下問題:1)高開銷的自連接操作。針對分布式系統(tǒng),數(shù)據(jù)表的連接操作導致系統(tǒng)結(jié)點間大量的數(shù)據(jù)通信。當數(shù)據(jù)量大和機器結(jié)點較多時,自連接開銷大,查詢延遲明顯增加,不利于系統(tǒng)的橫向擴展。2)大量的中間數(shù)據(jù)。sparql查詢分解后被分發(fā)到多個節(jié)點分別運行,每個節(jié)點相當于一個查詢引擎,其運行產(chǎn)生大量的中間數(shù)據(jù),增加了系統(tǒng)的內(nèi)存消耗,減少了系統(tǒng)并行處理的sparql個數(shù)。3)對數(shù)據(jù)分片要求高。聯(lián)邦式查詢將sparql查詢分發(fā)到各個節(jié)點分別完成,對數(shù)據(jù)分片的質(zhì)量要求較高。如果不同劃分之間存在大量的關(guān)聯(lián)關(guān)系,則sparql子圖匹配不能在多個數(shù)據(jù)結(jié)點并行執(zhí)行,降低了系統(tǒng)的運行效率。由于這些問題的存在,基于聯(lián)邦方式的sparql查詢難以有效應對大規(guī)模rdf關(guān)聯(lián)數(shù)據(jù)的大規(guī)模增長和滿足知識網(wǎng)絡關(guān)聯(lián)應用的實時性查詢需求,查詢時間隨數(shù)據(jù)規(guī)模的增長而增加。而基于bigtable的數(shù)據(jù)處理技術(shù)由于缺乏大規(guī)模表的連接操作(join),難以應用到海量rdf知識網(wǎng)絡關(guān)聯(lián)數(shù)據(jù)的處理中。技術(shù)實現(xiàn)要素:針對rdf大數(shù)據(jù)sparql查詢存在的問題,本發(fā)明的目的在于提供一種基于圖遍歷的sparql查詢優(yōu)化方法。本發(fā)明的技術(shù)方案為:一種基于圖遍歷的sparql查詢優(yōu)化方法,其步驟為:1)使用屬性圖表示rdf數(shù)據(jù)中三元組,然后利用bigtable模型存儲rdf數(shù)據(jù),得到rdf數(shù)據(jù)對應的bigtable數(shù)據(jù);2)將sparql查詢轉(zhuǎn)化對rdf屬性圖的遍歷;3)根據(jù)步驟2)獲得的遍歷序列,遍歷bigtable數(shù)據(jù)中滿足條件的所有節(jié)點,完成sparql查詢。利用bigtable模型存儲rdf數(shù)據(jù)的方法為:21)針對rdf數(shù)據(jù)中的每一rdf三元組(sub,pre,obj),將主語sub作為節(jié)點v,存儲為bigtable模型中一行;22)判斷賓語obj的類型:a)若賓語obj為rdf:literal,即謂語pre為主語sub的屬性,則將賓語obj作為該節(jié)點v的屬性值,然后將謂語pre作為該節(jié)點v的屬性名稱,存儲為該節(jié)點v所在行的一個存貯單元cell;b)若賓語obj為rdf:resource,即謂語pre為主語sub關(guān)聯(lián)到其它節(jié)點的邊,則將賓語obj作為一獨立節(jié)點w,存儲為bigtable模型中一行;然后將謂語pre作為該節(jié)點v的出邊,指向該節(jié)點w,存儲為該節(jié)點v所在行的一個cell,并且將謂語pre作為該節(jié)點w的入邊,出自該節(jié)點v,存儲為該節(jié)點w所在行的一個cell。進一步的,步驟2)中,將sparql查詢轉(zhuǎn)化為gremlin圖遍歷,實現(xiàn)將sparql查詢轉(zhuǎn)化對rdf屬性圖的遍歷。進一步的,將sparql查詢轉(zhuǎn)化為gremlin圖遍歷的方法為:對于sparql查詢的where子句中的每個三元組(sub,pre,obj),如果該三元組為謂語pre表示屬性圖中屬性的三元組,則將該三元組轉(zhuǎn)化為對主語sub所代表屬性圖中節(jié)點的過濾has(pre,obj),obj為過濾條件,pre為謂語pre所代表的屬性名稱;如果該三元組為謂語pre表示屬性圖中邊的三元組,則將該三元組轉(zhuǎn)化為主語sub所代表節(jié)點到賓語obj所代表節(jié)點的遍歷sub.out(pre)->obj,out表示出邊,pre表示謂語pre所代表的邊的關(guān)聯(lián)標簽;通過處理where子句的所有三元組,獲得所述遍歷序列。進一步的,根據(jù)步驟2)獲得的遍歷序列,遍歷bigtable數(shù)據(jù)中滿足條件的所有節(jié)點的方法為:所述遍歷序列為過濾和關(guān)聯(lián)邊組成的遍歷序列;首先根據(jù)關(guān)聯(lián)邊組成遍歷路徑,然后利用過濾消除無效的遍歷路徑,得到有效遍歷路徑;然后根據(jù)有效遍歷路徑遍歷bigtable數(shù)據(jù)中滿足條件的所有節(jié)點,然后組織有效遍歷路徑的節(jié)點和邊的屬性值。本發(fā)明包括bigtable數(shù)據(jù)存儲、sparql到gremlin遍歷轉(zhuǎn)化、gremlin圖遍歷執(zhí)行。其功能描述如下:1)基于bigtable模型存儲rdf數(shù)據(jù)rdf是一種面向互聯(lián)網(wǎng)的圖數(shù)據(jù)格式,采用<主語,謂語,賓語>三元組表示圖數(shù)據(jù),其主語(subject)表示圖節(jié)點,謂語為sub主語節(jié)點的屬性名稱,對應的賓語obj為屬性。賓語(object)主要包括rdf:literal和rdf:resource兩種情況,前者表示主語節(jié)點的屬性,屬性名為謂語;后者表示主語節(jié)點關(guān)聯(lián)到的其它節(jié)點,謂語標識主語關(guān)聯(lián)到其它節(jié)點的邊,邊的標簽為謂語。rdf圖對應的屬性圖為圖1(a),其bigtable表示如圖1(b)所示。本發(fā)明使用bigtable存儲rdf圖,針對rdf數(shù)據(jù)三元組:主語(subject)、謂語(predicate)、賓語(object),依據(jù)其特性以及rdf模型(即rdf本體),其結(jié)構(gòu)解析如下:針對“subpreobj.”rdf三元組,將主語sub作為節(jié)點v,存儲為bigtable模型中一行。若賓語obj為rdf:literal,則將賓語obj作為節(jié)點v的屬性值,將謂語pre作為該節(jié)點v的屬性名稱,存儲為v所在行的一個cell(存貯單元)。否則,將obj作為獨立節(jié)點w,存儲為bigtable中一行。將謂語pre作為主語sub節(jié)點v的出邊,指向該節(jié)點w,將謂語pre存儲為節(jié)點v所在行的一個cell;將謂語pre作為賓語obj節(jié)點w的入邊,出自節(jié)點v(即入邊的出發(fā)點為節(jié)點v),存儲為節(jié)點w所在行的一個cell。其中,rdf:lieral為賓語的一種類型,由apachejena或其他rdf工具解析。其中,bigtable是一種海量數(shù)據(jù)的存儲結(jié)構(gòu),能夠高效支持海量圖數(shù)據(jù)的存儲和管理。2)將sparql查詢轉(zhuǎn)化為gremlin圖遍歷如圖2所示,sparql查詢使用where子句的多個rdf三元組序列表示子圖匹配。本發(fā)明使用圖遍歷實現(xiàn)sparql子圖匹配,將sparql查詢的where子句中的三元組序列轉(zhuǎn)化為對圖中節(jié)點和邊的過濾和遍歷。針對where子句中的每個“subpreobj.”三元組,其轉(zhuǎn)化流程如下所示:針對謂語pre表示屬性圖中屬性的三元組,轉(zhuǎn)化為對sub所代表屬性圖中節(jié)點的過濾has(pre,obj),obj為過濾條件,pre為謂語pre所代表的屬性名稱。針對謂語pre表示屬性圖中邊的三元組,轉(zhuǎn)化為sub所代表節(jié)點到obj所代表節(jié)點的遍歷,其gremlin代碼為sub.out(pre)->obj,out表示出邊,pre表示謂語pre所代表的邊的關(guān)聯(lián)標簽。通過處理where子句的所有三元組,獲得過濾和關(guān)聯(lián)邊組成的遍歷序列。3)圖遍歷執(zhí)行針對步驟(2)獲得的遍歷序列,遍歷步驟1)中基于bigtable模型存儲rdf數(shù)據(jù)得到的bigtable數(shù)據(jù)中滿足條件的所有節(jié)點。其關(guān)聯(lián)邊組成遍歷路徑,而過濾用于消除無效的遍歷路徑。遍歷完成后,組織有效遍歷路徑的節(jié)點和邊的屬性值,按用戶需求返回。由于是直接對bigtable訪問,查詢過程基本沒有中間數(shù)據(jù)的產(chǎn)生。所述rdf數(shù)據(jù)指w3c國際標準組織定義的圖數(shù)據(jù)表示方法,采用三元組表示數(shù)據(jù)和數(shù)據(jù)之間的關(guān)聯(lián)關(guān)系,所述主語、謂語、賓語指rdf數(shù)據(jù)的標準數(shù)據(jù)結(jié)構(gòu)。所述gremlin指面向圖數(shù)據(jù)遍歷的標準語言。本發(fā)明的有益效果在于:針對目前大規(guī)模rdf圖數(shù)據(jù)存儲可擴展性差和查詢效率較低的問題,提出了一種基于bigtable的rdf圖數(shù)據(jù)存儲和查詢方法,通過將rdf圖數(shù)據(jù)轉(zhuǎn)換為bigtable模型的數(shù)據(jù)格式,支持大規(guī)模圖數(shù)據(jù)的水平擴展;通過將sparql查詢轉(zhuǎn)化為基于圖遍歷的bigtable數(shù)據(jù)訪問,避免了rdf數(shù)據(jù)連接導致的開銷較大和擴展性差的問題,減少了查詢過程中間數(shù)據(jù)的產(chǎn)生。而且由于將sparql查詢過程轉(zhuǎn)化為對bigtable的訪問,能夠利用緩存減少訪問次數(shù)。本發(fā)明解決了海量大規(guī)模rdf數(shù)據(jù)的分布式存儲和低延遲查詢的問題,一方面消除了傳統(tǒng)sparql查詢對hash等數(shù)據(jù)結(jié)構(gòu)的依賴,減少了中間數(shù)據(jù)的產(chǎn)生,避免了大規(guī)模rdf數(shù)據(jù)的連接計算;另一方面,能有效利用基于bigtable的大數(shù)據(jù)處理技術(shù)存儲和管理rdf海量關(guān)聯(lián)知識網(wǎng)絡數(shù)據(jù),利用緩存技術(shù)和索引技術(shù)加速rdf關(guān)聯(lián)數(shù)據(jù)的查詢和分析。附圖說明圖1為基于bigtable模型存儲rdf數(shù)據(jù)表示圖;(a)rdf數(shù)據(jù)屬性圖,(b)基于bigtable模型rdf數(shù)據(jù)圖;圖2為基于圖遍歷的sparql查詢執(zhí)行流程圖;圖3為小數(shù)據(jù)集vs大數(shù)據(jù)集對比圖。具體實施方式為使本發(fā)明的上述特征和優(yōu)點能更明顯易懂,下文特舉實施例,并配合所附圖作詳細說明如下。如圖2所示,一種基于圖遍歷的sparql執(zhí)行引擎,由bigtable數(shù)據(jù)存儲、sparql到gremlin轉(zhuǎn)化,圖遍歷執(zhí)行組成。本發(fā)明依據(jù)rdf三元組賓語的rdf:literal特性和rdf:resource特性,使用屬性圖表示rdf三元組的關(guān)聯(lián)關(guān)系和literal值,使用bigtable數(shù)據(jù)模型存儲和管理rdf數(shù)據(jù),使用圖遍歷實現(xiàn)sparql對rdf關(guān)聯(lián)數(shù)據(jù)的查詢和分析。目前面向rdf數(shù)據(jù)的數(shù)據(jù)倉庫以三元組為基本單位存儲和管理rdf知識網(wǎng)絡數(shù)據(jù),依賴表自連接的方式實現(xiàn)子圖匹配,從而實現(xiàn)對rdf數(shù)據(jù)的sparql查詢和分析。本發(fā)明則采用bigtable存儲和管理rdf數(shù)據(jù),將sparql查詢和分析轉(zhuǎn)化為對rdf屬性圖的遍歷,通過對bigtable的訪問完成sparql查詢。如此,本發(fā)明實現(xiàn)了對rdf海量數(shù)據(jù)的分布式擴展,避免了連接操作對sparql查詢的不利影響。下面描述rdf數(shù)據(jù)的bigtable存儲和sparql到gremlin轉(zhuǎn)化按如圖1所示進行設計來支持rdf數(shù)據(jù)的快速檢索和分析:bigtable數(shù)據(jù)存儲:如圖1所示,針對rdf三元組數(shù)據(jù),將其表示為如圖1(a)所示的屬性圖。如“<tax1><type><taxnode>.”,其賓語類型為rdf:literal,則轉(zhuǎn)化為主語tax1所代表節(jié)點的屬性值,屬性名稱為謂語;“<tax1><x-taxon><gene1>.”,其賓語為rdf:resource,則轉(zhuǎn)化為主語tax1所代表節(jié)點指向賓語所代表gene1節(jié)點的邊,謂語為邊的標簽,如此將所有的rdf三元組和屬性圖對應起來,并采用bigtable數(shù)據(jù)結(jié)構(gòu)存儲屬性和邊。sparql到gremlin:將sparql查詢中where子句的三元組轉(zhuǎn)化為對屬性圖的遍歷,其中sparql為面向rdf數(shù)據(jù)的查詢語言,而gremlin是面向?qū)傩詧D的遍歷語言。針對where子句的三元組“?tax<type><taxnode>.”,由于在屬性圖中type表示屬性,則將該關(guān)聯(lián)轉(zhuǎn)化為gremlin中對節(jié)點屬性type的過濾has(type,taxnode)step,其執(zhí)行過程為依據(jù)taxnode對bigtable數(shù)據(jù)的過濾,減小遍歷范圍,提高遍歷效率。針對“?tax<x-taxon>?gene.”,由于在屬性圖中x-taxon為節(jié)點之間的邊,因此將該關(guān)聯(lián)轉(zhuǎn)化為gremlin中對tax所代表節(jié)點出邊的遍歷out(x-taxon)step,通過對bigtable數(shù)據(jù)的訪問實現(xiàn)該遍歷。本發(fā)明選取微生物關(guān)聯(lián)數(shù)據(jù)集wdcm的3億規(guī)模小數(shù)據(jù)集、30億規(guī)模的大數(shù)據(jù)集和16條標準sparql查詢對發(fā)明進行測試,給出使用發(fā)明中所提出的面向大數(shù)據(jù)的基于圖遍歷的sparql執(zhí)行引擎的一個具體實施過程,查詢重復過程為10次,并去除最大值和最小值。測試環(huán)境為4臺支持bigtable的hbase集群,hbase版本為0.98.23.hadoop1,每個節(jié)點32g內(nèi)存、12核cpu、28t磁盤,節(jié)點之間通過萬兆交換機互聯(lián)。gremlin查詢和分析引擎為titan1.0.0,sparqltogremlin轉(zhuǎn)化由項目組開發(fā)。使用本發(fā)明系統(tǒng)得到的查詢運行時間如下:如圖3所示,對于3億規(guī)模的小數(shù)據(jù)集,查詢需要的時間在1s左右。針對30億三元組規(guī)模的大數(shù)據(jù)集,由于圖遍歷負載有效分散在多個結(jié)點,16條查詢語句所用時間小于1s,反而優(yōu)于小數(shù)據(jù)集的查詢時間。實驗結(jié)果表明,針對不斷增加的rdf數(shù)據(jù),本發(fā)明能夠有效利用bigtable分布式數(shù)據(jù)存儲的優(yōu)勢和圖遍歷查詢的優(yōu)勢,保持查詢時間恒定,很好地解決了目前rdf數(shù)據(jù)大規(guī)模增加時sparql查詢時間明顯增加的問題。以上實施僅用以說明本發(fā)明的技術(shù)方案而非對其進行限制,本領域的普通技術(shù)人員可以對本發(fā)明的技術(shù)方案進行修改或者等同替換,而不脫離本發(fā)明的精神和范圍,本發(fā)明的保護范圍應以權(quán)利要求書所述為準。當前第1頁12當前第1頁12