一種分布式層次化的rdf數(shù)據(jù)的存儲(chǔ)方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,包括以下步驟:對(duì)所有RDF數(shù)據(jù)進(jìn)行索引;采用兩個(gè)存儲(chǔ)層以存儲(chǔ)索引后的RDF數(shù)據(jù),從底層到上層依次為:持久化存儲(chǔ)層和分布式內(nèi)存存儲(chǔ)層;所有RDF數(shù)據(jù)首先存儲(chǔ)到持久化存儲(chǔ)層,然后,將常用的RDF數(shù)據(jù)存儲(chǔ)到分布式內(nèi)存存儲(chǔ)層;將所有存儲(chǔ)在持久化存儲(chǔ)層的RDF數(shù)據(jù)自動(dòng)保持多個(gè)備份;當(dāng)檢測(cè)到分布式內(nèi)存存儲(chǔ)層的節(jié)點(diǎn)發(fā)生數(shù)據(jù)失效時(shí),在下次查詢到該節(jié)點(diǎn)中的RDF數(shù)據(jù)時(shí),從持久化存儲(chǔ)層去獲取相應(yīng)的數(shù)據(jù)。本發(fā)明解決了現(xiàn)有的分布式存儲(chǔ)方法計(jì)算延時(shí)大、性能低、應(yīng)對(duì)動(dòng)態(tài)變化的能力不足的問(wèn)題。
【專(zhuān)利說(shuō)明】一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信【技術(shù)領(lǐng)域】,尤其涉及一種分布式層次化的RDF (ResourceDescription Framework,資源描述框架)數(shù)據(jù)的存儲(chǔ)方法。
【背景技術(shù)】
[0002]語(yǔ)義網(wǎng)(Semantic Web)是萬(wàn)維網(wǎng)的一個(gè)重要發(fā)展方向,為萬(wàn)維網(wǎng)上的知識(shí)表示、推理、交換和復(fù)用提供了基礎(chǔ)。由于任何機(jī)構(gòu)和個(gè)人都允許自由發(fā)布語(yǔ)義網(wǎng)數(shù)據(jù),尤其是現(xiàn)有商用搜索引擎倡導(dǎo)網(wǎng)站顯式地提供語(yǔ)義數(shù)據(jù)、社交網(wǎng)絡(luò)開(kāi)始使用語(yǔ)義數(shù)據(jù),這都使得語(yǔ)義網(wǎng)的數(shù)據(jù)量爆炸性增長(zhǎng)。目前,以DBpedia和Bio2RDF為例的語(yǔ)義網(wǎng)數(shù)據(jù)已經(jīng)達(dá)到了數(shù)以十億計(jì)的規(guī)模。這些海量語(yǔ)義網(wǎng)數(shù)據(jù)一方面促進(jìn)了語(yǔ)義網(wǎng)內(nèi)容和知識(shí)的繁榮,同時(shí)也對(duì)現(xiàn)有語(yǔ)義網(wǎng)數(shù)據(jù)管理系統(tǒng)的性能提出了挑戰(zhàn)。
[0003]語(yǔ)義網(wǎng)數(shù)據(jù)是采用RDF模型來(lái)表示的。RDF是一種數(shù)據(jù)模型,它是一個(gè)W3C推薦標(biāo)準(zhǔn),用于Web上的數(shù)據(jù)交換。RDF定義了一個(gè)簡(jiǎn)單的有向圖模型來(lái)表示資源以及資源間的聯(lián)系,每個(gè)聯(lián)系表示為一個(gè)RDF三元組,包括主語(yǔ)、謂語(yǔ)和賓語(yǔ)三個(gè)部分。一個(gè)RDF三元組聲明了該三元組中的主語(yǔ)和賓語(yǔ)存在的謂語(yǔ)聯(lián)系是成立的。RDF可以很靈活地對(duì)任何資源進(jìn)行定義或聲明。為了能夠方便地對(duì)RDF數(shù)據(jù)進(jìn)行查詢和管理,W3C推薦了一種RDF查詢的語(yǔ)言SPARQL (SimpIe Protocol and RDF Query Language),它的語(yǔ)法格式和 SQL 很類(lèi)似。絕大部分的SPARQL查詢語(yǔ)句的形式都是由一系列三元組模式(triple pattern)組成,其中每個(gè)三元組模式在格式上和一個(gè)RDF三元組類(lèi)似,只是其中的主語(yǔ)、謂語(yǔ)或賓語(yǔ)可能是變量。另外,SPARQL也可以通過(guò)連接(join)、交/并、選擇、投影等操作來(lái)構(gòu)造更加復(fù)雜的查詢。
[0004]傳統(tǒng)的RDF數(shù)據(jù)管理軟件,如Sesame、3store等,均在單機(jī)上運(yùn)行。隨著RDF數(shù)據(jù)量的不斷增長(zhǎng),單臺(tái)計(jì)算機(jī)存在規(guī)模上限,已經(jīng)難以有效地存儲(chǔ)和管理海量RDF數(shù)據(jù)。因此近些年來(lái),人們開(kāi)始通過(guò)將大規(guī)模RDF數(shù)據(jù)集劃分存儲(chǔ)到分布式系統(tǒng)中的多個(gè)機(jī)器上進(jìn)行管理和查詢操作。這些分布式的RDF數(shù)據(jù)管理系統(tǒng)可以寬泛地劃分為兩類(lèi):一類(lèi)是將RDF數(shù)據(jù)集看成由多條三元組記錄組成,構(gòu)建針對(duì)這些三元組記錄的分布式存儲(chǔ)系統(tǒng),這類(lèi)系統(tǒng)一般都是直接建立在現(xiàn)在廣為使用的大數(shù)據(jù)的基礎(chǔ)處理引擎Apache Hadoop,HBase,Pig等之上,例如Jena-HBase、SHARD和PigSPARQL等。這類(lèi)方法存在的一個(gè)嚴(yán)重的問(wèn)題就是性能較低,其原因是它們將查詢轉(zhuǎn)換為一系列MapReduce任務(wù)執(zhí)行,而MapReduce的設(shè)計(jì)定位側(cè)重處理高延時(shí)的離線處理分析等應(yīng)用;另外一種方法將RDF數(shù)據(jù)集看成一張圖,采用圖劃分的優(yōu)化技術(shù)來(lái)提高查詢時(shí)模式匹配的效率,這類(lèi)方法被稱(chēng)為基于圖劃分的方法。在實(shí)際應(yīng)用中基于圖劃分的方法有一個(gè)重要缺陷,當(dāng)有新的批量數(shù)據(jù)或機(jī)器加入到系統(tǒng)中,為了重新使整個(gè)系統(tǒng)負(fù)載均衡,整個(gè)新的RDF圖需要重新劃分。該過(guò)程非常耗時(shí)甚至需要中止對(duì)外提供的查詢服務(wù)。當(dāng)圖很大時(shí),對(duì)均勻地劃分圖將越來(lái)越難實(shí)現(xiàn)。從這個(gè)意義上看,基于圖劃分的方法并不具備動(dòng)態(tài)性,對(duì)于現(xiàn)實(shí)中流式或增量式輸入RDF數(shù)據(jù)的應(yīng)用場(chǎng)景不適用。
【發(fā)明內(nèi)容】
[0005]發(fā)明目的:針對(duì)上述現(xiàn)有技術(shù)存在的問(wèn)題和不足,本發(fā)明的目的是提供一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,解決了現(xiàn)有的分布式存儲(chǔ)方法計(jì)算延時(shí)大、性能低、應(yīng)對(duì)動(dòng)態(tài)變化的能力不足的問(wèn)題。
[0006]技術(shù)方案:為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采用的技術(shù)方案為一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,包括以下步驟:
(1)對(duì)所有RDF數(shù)據(jù)進(jìn)行索引;
(2)采用兩個(gè)存儲(chǔ)層以存儲(chǔ)索引后的RDF數(shù)據(jù),從底層到上層依次為:持久化存儲(chǔ)層和分布式內(nèi)存存儲(chǔ)層;所有RDF數(shù)據(jù)首先存儲(chǔ)到持久化存儲(chǔ)層,然后,將常用的RDF數(shù)據(jù)存儲(chǔ)到分布式內(nèi)存存儲(chǔ)層;
(3)將所有存儲(chǔ)在持久化存儲(chǔ)層的RDF數(shù)據(jù)自動(dòng)保持多個(gè)備份;當(dāng)檢測(cè)到分布式內(nèi)存存儲(chǔ)層的節(jié)點(diǎn)發(fā)生數(shù)據(jù)失效時(shí),在下次查詢到該節(jié)點(diǎn)中的RDF數(shù)據(jù)時(shí),從持久化存儲(chǔ)層去獲取相應(yīng)的數(shù)據(jù),然后根據(jù)一致性哈希算法將獲取到的數(shù)據(jù)加載到分布式內(nèi)存存儲(chǔ)層的其他節(jié)點(diǎn)以供后面快速查詢。
[0007]進(jìn)一步地,采用冷熱數(shù)據(jù)混合索引的方法對(duì)所有RDF數(shù)據(jù)進(jìn)行索引。更進(jìn)一步的,采用基于哈希的索引方法索引冷熱數(shù)據(jù),支持快速查詢并節(jié)省RDF數(shù)據(jù)存儲(chǔ)空間,哈希索引后的RDF數(shù)據(jù)可以支持快速的查詢定位,避免查詢時(shí)進(jìn)行全表掃描;同時(shí),索引后RDF數(shù)據(jù)量大幅壓縮,有利于存放在內(nèi)存數(shù)據(jù)庫(kù)中進(jìn)行快速查詢。更進(jìn)一步的,為了解決哈希索引后的碰撞問(wèn)題,采用基于MD5哈希和閉散列的方法存儲(chǔ)發(fā)生碰撞的RDF數(shù)據(jù)。
[0008]進(jìn)一步地,所述步驟(2)中,將“主語(yǔ)謂語(yǔ)*”和“*謂語(yǔ)賓語(yǔ)”這兩種查詢模式的RDF數(shù)據(jù)存儲(chǔ)到分布式內(nèi)存存儲(chǔ)層,其中*為一個(gè)通配符,表示相應(yīng)的部分可取任意值。
[0009]進(jìn)一步地,所述步驟(2)中,當(dāng)分布式內(nèi)存存儲(chǔ)層的容量不足時(shí),用新的RDF數(shù)據(jù)替換過(guò)時(shí)的RDF數(shù)據(jù)。
[0010]進(jìn)一步地,所述步驟(3)中,為了解決RDF數(shù)據(jù)的存儲(chǔ)的可靠性以及容錯(cuò)問(wèn)題,分布式內(nèi)存存儲(chǔ)層的節(jié)點(diǎn)上運(yùn)行守護(hù)進(jìn)程,用于監(jiān)控本節(jié)點(diǎn)的狀態(tài),并將該狀態(tài)注冊(cè)到全局監(jiān)管服務(wù)中;一旦有節(jié)點(diǎn)發(fā)生數(shù)據(jù)失效,全局監(jiān)管服務(wù)感知到,當(dāng)下次需要到該節(jié)點(diǎn)查詢數(shù)據(jù)時(shí),跳向持久化存儲(chǔ)層進(jìn)行查詢,并將使用到的相關(guān)數(shù)據(jù)重新載入到分布式內(nèi)存存儲(chǔ)層的其他節(jié)點(diǎn)中,以供后面快速查詢。
[0011]進(jìn)一步地,還包括步驟(4):提供位于最上層的RDF數(shù)據(jù)存儲(chǔ)和查詢接口層,用于導(dǎo)入數(shù)據(jù)和向用戶提供查詢服務(wù)。更進(jìn)一步的,所述步驟(4)中,RDF數(shù)據(jù)存儲(chǔ)和查詢接口包括SPARQL引擎模塊、數(shù)據(jù)庫(kù)選擇模塊和數(shù)據(jù)庫(kù)連接模塊;所述SPARQL引擎模塊用于解析用戶提交的查詢請(qǐng)求并生成相應(yīng)的查詢計(jì)劃,所述數(shù)據(jù)庫(kù)選擇模塊用于決定是將查詢請(qǐng)求發(fā)送到持久化存儲(chǔ)層還是直接在分布式內(nèi)存存儲(chǔ)層上完成,所述數(shù)據(jù)庫(kù)連接模塊用于管理和保持常用的數(shù)據(jù)庫(kù)連接,同時(shí)還負(fù)責(zé)監(jiān)管關(guān)于數(shù)據(jù)庫(kù)狀態(tài)的信息。
[0012]有益效果:本發(fā)明能夠高效地對(duì)大規(guī)模RDF數(shù)據(jù)進(jìn)行存儲(chǔ):第一,設(shè)計(jì)一個(gè)分布式層次化存儲(chǔ)架構(gòu)來(lái)高效地存儲(chǔ)大規(guī)模RDF數(shù)據(jù)。所有的RDF數(shù)據(jù)都通過(guò)一個(gè)基于硬盤(pán)的分布式數(shù)據(jù)存儲(chǔ)引擎進(jìn)行持久化存儲(chǔ)。為解決RDF數(shù)據(jù)的查詢?nèi)狈Ρ镜鼗奶攸c(diǎn),提高對(duì)磁盤(pán)的隨機(jī)訪問(wèn)性能,本發(fā)明在持久化存儲(chǔ)層之上還設(shè)計(jì)了一個(gè)分布式內(nèi)存存儲(chǔ)層來(lái)存儲(chǔ)那些經(jīng)常被查詢的RDF數(shù)據(jù)及其索引;第二,通過(guò)對(duì)百萬(wàn)條真實(shí)用戶的查詢?nèi)罩竞秃芏嗷鶞?zhǔn)測(cè)試中查詢實(shí)例的分析,本發(fā)明在上述層次化存儲(chǔ)架構(gòu)的基礎(chǔ)之上,設(shè)計(jì)了一個(gè)冷熱數(shù)據(jù)混合索引機(jī)制,以更好地利用系統(tǒng)架構(gòu)并提高性能;第三,為了提升系統(tǒng)應(yīng)對(duì)動(dòng)態(tài)變化的能力,本發(fā)明對(duì)存儲(chǔ)在分布式內(nèi)存中的RDF數(shù)據(jù)采用一致性哈希算法來(lái)對(duì)進(jìn)行劃分。當(dāng)系統(tǒng)需要增加或刪減存儲(chǔ)資源時(shí),無(wú)需對(duì)原有RDF數(shù)據(jù)全部重新劃分即可在線完成調(diào)整,整個(gè)調(diào)整過(guò)程中對(duì)外服務(wù)無(wú)需中止;第四,由于在現(xiàn)實(shí)應(yīng)用中,分布式系統(tǒng)中獨(dú)立的節(jié)點(diǎn)可能會(huì)發(fā)生故障。為保障在節(jié)點(diǎn)發(fā)生故障時(shí)整個(gè)分布式系統(tǒng)的高可用性,本發(fā)明還設(shè)計(jì)了一套容錯(cuò)機(jī)制。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0013]圖1為本發(fā)明的方法總體示意圖;
圖2為本發(fā)明中節(jié)點(diǎn)狀態(tài)監(jiān)測(cè)示意圖(變化的節(jié)點(diǎn)指新增或故障節(jié)點(diǎn));
圖3為本發(fā)明中節(jié)點(diǎn)數(shù)據(jù)劃分示意圖(變化的節(jié)點(diǎn)指新增或故障節(jié)點(diǎn));
圖4為本發(fā)明中RDF三元組的混合索引機(jī)制和數(shù)據(jù)存放策略示意圖。
【具體實(shí)施方式】
[0014]下面結(jié)合附圖和具體實(shí)施例,進(jìn)一步闡明本發(fā)明,應(yīng)理解這些實(shí)施例僅用于說(shuō)明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對(duì)本發(fā)明的各種等價(jià)形式的修改均落于本申請(qǐng)所附權(quán)利要求所限定的范圍。
[0015]本發(fā)明采用兩個(gè)存儲(chǔ)層以存儲(chǔ)數(shù)據(jù),從底層到上層依次為:持久化存儲(chǔ)層和分布式內(nèi)存存儲(chǔ)層;還包括位于最上層的RDF數(shù)據(jù)存儲(chǔ)和查詢接口層;將常用的RDF數(shù)據(jù)存儲(chǔ)到分布式內(nèi)存存儲(chǔ)層,將不常用的RDF數(shù)據(jù)存儲(chǔ)到持久化存儲(chǔ)層;當(dāng)分布式內(nèi)存存儲(chǔ)層的容量不足時(shí),用最新查詢的RDF數(shù)據(jù)替換過(guò)時(shí)的RDF數(shù)據(jù);RDF數(shù)據(jù)存儲(chǔ)和查詢接口層用于導(dǎo)入數(shù)據(jù)和向用戶提供查詢服務(wù)。進(jìn)一步地,本發(fā)明還提供了一種節(jié)點(diǎn)的容錯(cuò)和動(dòng)態(tài)擴(kuò)展機(jī)制。
[0016]將一個(gè)RDF三元組(記為“主語(yǔ)謂語(yǔ)賓語(yǔ)”)導(dǎo)入存儲(chǔ)中的流程包括以下步驟:
(1)將該三元組按照key=“主語(yǔ)謂語(yǔ)”,value= “賓語(yǔ)”格式添加到位于分布式內(nèi)存存儲(chǔ)層的“主語(yǔ)謂語(yǔ)” RDF數(shù)據(jù)表中;
(2)將該三元組按照key=“謂語(yǔ)賓語(yǔ)”,value= “主語(yǔ)”格式添加到位于分布式內(nèi)存存儲(chǔ)層的“謂語(yǔ)賓語(yǔ)” RDF數(shù)據(jù)表中;
(3)將該三元組按照key=“主語(yǔ)謂語(yǔ)賓語(yǔ)”的格式添加到位于持久化存儲(chǔ)層的“主語(yǔ)謂語(yǔ)賓語(yǔ)” RDF數(shù)據(jù)表中;
(4)將該三元組按照key=“謂語(yǔ)賓語(yǔ)主語(yǔ)”的格式添加到位于持久化存儲(chǔ)層的“謂語(yǔ)賓語(yǔ)主語(yǔ)” RDF數(shù)據(jù)表中;
(5)將該三元組按照key=“賓語(yǔ)主語(yǔ)謂語(yǔ)”的格式添加到位于持久化存儲(chǔ)層的“賓語(yǔ)主語(yǔ)謂語(yǔ)” RDF數(shù)據(jù)表中。
[0017]進(jìn)一步地,所述RDF數(shù)據(jù)存儲(chǔ)和查詢接口層包括SPARQL (Simple Protocol andRDF Query Language)引擎模塊、數(shù)據(jù)庫(kù)選擇模塊和數(shù)據(jù)庫(kù)連接模塊;所述SPARQL引擎模塊用于解析用戶提交的查詢請(qǐng)求并生成相應(yīng)的查詢計(jì)劃,所述數(shù)據(jù)庫(kù)選擇模塊用于決定是將查詢請(qǐng)求發(fā)送到持久化存儲(chǔ)層還是直接在分布式內(nèi)存存儲(chǔ)層上完成,所述數(shù)據(jù)庫(kù)連接模塊用于管理和保持常用的數(shù)據(jù)庫(kù)連接,同時(shí)還負(fù)責(zé)監(jiān)管關(guān)于數(shù)據(jù)庫(kù)狀態(tài)的信息。對(duì)于一個(gè)給定的RDF查詢模式請(qǐng)求,其處理流程包括以下步驟:
(I)如果該查詢模式是“主語(yǔ)謂語(yǔ)*”(*表示一個(gè)通配符,表示相應(yīng)的部分可以取任意值)或“主語(yǔ)謂語(yǔ)賓語(yǔ)”,則以“主語(yǔ)謂語(yǔ)”為key直接到位于分布式內(nèi)存存儲(chǔ)層的“主語(yǔ)謂語(yǔ)”表中查詢,如果查詢結(jié)果不為空則返回結(jié)果,查詢結(jié)束。如果不為空,則按步驟(3)中的查詢方式進(jìn)行。
[0018](2)如果該查詢模式是“謂語(yǔ)賓語(yǔ)*”,則以“謂語(yǔ)賓語(yǔ)”為key直接到位于分布式內(nèi)存存儲(chǔ)層的“謂語(yǔ)賓語(yǔ)”表中查詢,如果查詢結(jié)果不為空則返回結(jié)果,查詢結(jié)束。如果不為空,則按步驟(4)中的查詢方式進(jìn)行。
[0019](3)如果該查詢模式是“主語(yǔ)*”或“主語(yǔ)賓語(yǔ)*”,則以“主語(yǔ)*”為key到位于持久化存儲(chǔ)層的“主語(yǔ)謂語(yǔ)賓語(yǔ)”表中進(jìn)行通配查詢,將查詢的結(jié)果返回,同時(shí)將結(jié)果以對(duì)應(yīng)的格式插入到分布式存儲(chǔ)層的“主語(yǔ)謂語(yǔ)”和“謂語(yǔ)賓語(yǔ)” RDF數(shù)據(jù)表中。
[0020](4)如果該查詢模式是“謂語(yǔ)*”,則以“謂語(yǔ)*”為key到位于持久化存儲(chǔ)層的“謂語(yǔ)賓語(yǔ)主語(yǔ)”表中進(jìn)行通配查詢,將查詢的結(jié)果返回,同時(shí)將結(jié)果以對(duì)應(yīng)的格式插入到分布式存儲(chǔ)層的“主語(yǔ)謂語(yǔ)”和“謂語(yǔ)賓語(yǔ)” RDF數(shù)據(jù)表中。
[0021](5)如果該查詢模式是“賓語(yǔ)*”,則以“賓語(yǔ)*”為key到位于持久化存儲(chǔ)層的“賓語(yǔ)主語(yǔ)謂語(yǔ)”表中進(jìn)行通配查詢,將查詢的結(jié)果返回,同時(shí)將結(jié)果以對(duì)應(yīng)的格式插入到分布式存儲(chǔ)層的“主語(yǔ)謂語(yǔ)”和“謂語(yǔ)賓語(yǔ)” RDF數(shù)據(jù)表中。
[0022](6)如果該查詢模式是“*”,則對(duì)位于持久化存儲(chǔ)層“主語(yǔ)謂語(yǔ)賓語(yǔ)”表的全表掃描,并將結(jié)果返回。
[0023]本發(fā)明中容錯(cuò)機(jī)制的工作流程是:所述分布式內(nèi)存存儲(chǔ)層的節(jié)點(diǎn)上運(yùn)行守護(hù)進(jìn)程,用于監(jiān)控本節(jié)點(diǎn)內(nèi)存數(shù)據(jù)庫(kù)的狀態(tài),并將該狀態(tài)注冊(cè)到全局監(jiān)管服務(wù)中;一旦有節(jié)點(diǎn)內(nèi)存數(shù)據(jù)庫(kù)發(fā)生故障,全局監(jiān)管服務(wù)感知到,當(dāng)下次需要到該節(jié)點(diǎn)查詢內(nèi)存數(shù)據(jù)庫(kù)時(shí),跳向持久化存儲(chǔ)層進(jìn)行查詢,并將使用到的相關(guān)RDF數(shù)據(jù)重新載入到其他節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)庫(kù)中。
[0024]如圖1所示,本發(fā)明所涉及到的分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法的實(shí)施方式為:構(gòu)建一個(gè)包括主要包括3個(gè)層面的系統(tǒng),其中持久化存儲(chǔ)層在最底層,并通過(guò)多個(gè)副本的方式對(duì)該層的數(shù)據(jù)進(jìn)行容錯(cuò)。持久化存儲(chǔ)層是基于磁盤(pán)的,有很大的數(shù)據(jù)容量,但是對(duì)隨機(jī)存儲(chǔ)效率不高,因此本發(fā)明還采用多個(gè)Key-Value類(lèi)型的內(nèi)存數(shù)據(jù)庫(kù)(一個(gè)Key-Value類(lèi)型的內(nèi)存數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)節(jié)點(diǎn))構(gòu)建了一個(gè)分布式內(nèi)存存儲(chǔ)層。存儲(chǔ)在分布式內(nèi)存存儲(chǔ)層的數(shù)據(jù)具有很快的訪問(wèn)速度,但是數(shù)據(jù)總體的容量不大。為此,本發(fā)明設(shè)計(jì)了一套混合式的RDF數(shù)據(jù)存儲(chǔ)機(jī)制,將常用的RDF數(shù)據(jù)存到分布式內(nèi)存存儲(chǔ)層的內(nèi)存數(shù)據(jù)庫(kù)中,而不常用的RDF數(shù)據(jù)存儲(chǔ)到持久化存儲(chǔ)層中。隨著查詢的進(jìn)行,將新的常用的RDF數(shù)據(jù)導(dǎo)入到分布式內(nèi)存存儲(chǔ)層中,當(dāng)分布式內(nèi)存存儲(chǔ)層容量不夠的時(shí)候,會(huì)啟動(dòng)LRU (Least Recently Used,近期最少使用)替換機(jī)制,優(yōu)先清除很久沒(méi)被使用過(guò)的內(nèi)存中的RDF數(shù)據(jù)。最后,本發(fā)明還在最上層構(gòu)建了一個(gè)RDF數(shù)據(jù)存儲(chǔ)和查詢接口層,這一層主要負(fù)責(zé)數(shù)據(jù)的導(dǎo)入和向終端用戶(簡(jiǎn)稱(chēng)“用戶”)提供查詢服務(wù)。它由3個(gè)子模塊構(gòu)成,第一個(gè)子模塊是SPARQL引擎模塊。用戶提交的查詢請(qǐng)求的解析和優(yōu)化的查詢計(jì)劃將在這里生成;第二個(gè)子模塊是數(shù)據(jù)庫(kù)選擇模塊,主要是用于決定是將查詢請(qǐng)求發(fā)送到持久化存儲(chǔ)層還是直接在分布式內(nèi)存存儲(chǔ)層上完成;第三個(gè)子模塊是數(shù)據(jù)庫(kù)連接模塊,主要工作是管理和保持一些經(jīng)常使用的數(shù)據(jù)庫(kù)連接,同時(shí)還負(fù)責(zé)監(jiān)管一些關(guān)于數(shù)據(jù)庫(kù)狀態(tài)的信息。通過(guò)第三個(gè)子模塊,可以在實(shí)際查詢的時(shí)候避免或減少連接數(shù)據(jù)的額外開(kāi)銷(xiāo),同時(shí)還能在系統(tǒng)運(yùn)行過(guò)程中及時(shí)發(fā)現(xiàn)數(shù)據(jù)故障,以做容錯(cuò)處理。
[0025]本發(fā)明中針對(duì)分布式的RDF數(shù)據(jù)庫(kù)提出的容錯(cuò)和支持動(dòng)態(tài)變化的實(shí)施方式為:針對(duì)中間層分布式內(nèi)存存儲(chǔ)的容錯(cuò)和可擴(kuò)展問(wèn)題設(shè)計(jì)了一系列方法,如圖2和圖3所示。分布式內(nèi)存存儲(chǔ)是由多個(gè)Key-Value類(lèi)型的內(nèi)存數(shù)據(jù)庫(kù)(一個(gè)Key-Value類(lèi)型的內(nèi)存數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)節(jié)點(diǎn))構(gòu)建而成的。本發(fā)明首先在這些節(jié)點(diǎn)上運(yùn)行一個(gè)守護(hù)進(jìn)程負(fù)責(zé)監(jiān)控本節(jié)點(diǎn)內(nèi)存數(shù)據(jù)庫(kù)的狀態(tài),然后觀測(cè)到的狀態(tài)注冊(cè)到全局監(jiān)管服務(wù)中。對(duì)于一個(gè)給定Key的數(shù)據(jù),其所在的Key-Value類(lèi)型的內(nèi)存數(shù)據(jù)庫(kù)地址是通過(guò)一致性哈希算法決定的。接著,一旦有Key-Value類(lèi)型的內(nèi)存數(shù)據(jù)庫(kù)對(duì)應(yīng)的節(jié)點(diǎn)發(fā)生故障時(shí),全局監(jiān)管服務(wù)會(huì)及時(shí)感知到,當(dāng)有查詢通過(guò)Key算出需要到該節(jié)點(diǎn)查詢內(nèi)存數(shù)據(jù)庫(kù)時(shí),程序自動(dòng)跳向底層持久化存儲(chǔ)層進(jìn)行查詢,并將使用到的相關(guān)RDF數(shù)據(jù)重新載入到其他節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)庫(kù)中。同理,本發(fā)明也是通過(guò)類(lèi)似的機(jī)制實(shí)現(xiàn)節(jié)點(diǎn)的動(dòng)態(tài)擴(kuò)展技術(shù),當(dāng)有新的節(jié)點(diǎn)添加到分布式內(nèi)存存儲(chǔ)層之后,該新的節(jié)點(diǎn)將會(huì)注冊(cè)到全局監(jiān)管服務(wù)上。通過(guò)一致性哈希算法,新加入的節(jié)點(diǎn)會(huì)分擔(dān)掉集群中其他Key-Value類(lèi)型的內(nèi)存數(shù)據(jù)庫(kù)中的一些數(shù)據(jù),從而達(dá)到負(fù)載均衡的目的。
[0026]SPARQL查詢通常都是由一組RDF三元組查詢模式(簡(jiǎn)稱(chēng)“三元組模式”)匹配組成的。在RDF三元組數(shù)據(jù)庫(kù)中,為了能夠提高這些模式匹配的速度,通常會(huì)建立這些模式的索引。和現(xiàn)有的方法不同,本發(fā)明所提出的建立索引的方式是從信息檢索角度,而不是數(shù)據(jù)的角度。為了提供更快的查詢速度,本發(fā)明還采用了一種混合式的索引技術(shù)。其實(shí)施方式為:首先,為了分析這些三元組查詢模式的分 布情況,本發(fā)明基于含有兩千萬(wàn)查詢記錄的真實(shí)的DBpedia查詢?nèi)罩疽约耙恍?廣為使用的LUBM、SP2Bench等基準(zhǔn)測(cè)試實(shí)例上做了統(tǒng)計(jì)。接著,根據(jù)統(tǒng)計(jì)結(jié)果發(fā)現(xiàn),“主語(yǔ)謂語(yǔ)*”、“*謂語(yǔ)賓語(yǔ)”和“*謂語(yǔ)*”(*表示一個(gè)通配符,表示相應(yīng)的部分可以取任意值)這三種模式經(jīng)常被用到,其占了所有三元組模式匹配查詢條數(shù)的90%以上,而“*謂語(yǔ)*”通常又可以擴(kuò)展成“主語(yǔ)謂語(yǔ)*”、“*謂語(yǔ)賓語(yǔ)”。最后,基于這個(gè)分析結(jié)果,為了更好地利用本發(fā)明提出的層次化存儲(chǔ)架構(gòu),本發(fā)明提出了一個(gè)混合式的存儲(chǔ)模式(如圖4所示):將“主語(yǔ)謂語(yǔ)*”、“*謂語(yǔ)賓語(yǔ)”這兩種查詢模式的RDF數(shù)據(jù)存放到分布式內(nèi)存存儲(chǔ)層中,而將通用查詢模式的RDF數(shù)據(jù)存儲(chǔ)到持久化存儲(chǔ)層。
[0027]本發(fā)明基于已有的一些開(kāi)源軟件實(shí)現(xiàn)了一個(gè)原型系統(tǒng)。其中持久化數(shù)據(jù)存儲(chǔ)采用HBase、全局監(jiān)管服務(wù)采用ZooKeeper,這兩個(gè)軟件不屬于本發(fā)明的內(nèi)容。通過(guò)使用國(guó)際工具評(píng)測(cè)中的 LUBM 基準(zhǔn)測(cè)試(http://swat.cse.lehigh.edu/projects/lubm/)對(duì)本發(fā)明實(shí)現(xiàn)的原型系統(tǒng)和現(xiàn)有方法進(jìn)行測(cè)試,評(píng)測(cè)中使用查詢耗時(shí)作為度量指標(biāo)。通過(guò)與Jena-Hbase、SHARD這2個(gè)現(xiàn)有方法的對(duì)比,本發(fā)明實(shí)現(xiàn)的原型系統(tǒng)在絕大多數(shù)測(cè)試?yán)由系牟樵冃室恢聝?yōu)于現(xiàn)有方法(參見(jiàn)表1),證明了本發(fā)明的分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法的有效性。
[0028]表1:本發(fā)明與現(xiàn)有兩種方法的在LUBM-1O數(shù)據(jù)集查詢性能對(duì)比(單位:毫秒)
【權(quán)利要求】
1.一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,包括以下步驟: (1)對(duì)所有RDF數(shù)據(jù)進(jìn)行索引; (2)采用兩個(gè)存儲(chǔ)層以存儲(chǔ)索引后的RDF數(shù)據(jù),從底層到上層依次為:持久化存儲(chǔ)層和分布式內(nèi)存存儲(chǔ)層;所有RDF數(shù)據(jù)首先存儲(chǔ)到持久化存儲(chǔ)層,然后,將常用的RDF數(shù)據(jù)存儲(chǔ)到分布式內(nèi)存存儲(chǔ)層; (3)將所有存儲(chǔ)在持久化存儲(chǔ)層的RDF數(shù)據(jù)自動(dòng)保持多個(gè)備份;當(dāng)檢測(cè)到分布式內(nèi)存存儲(chǔ)層的節(jié)點(diǎn)發(fā)生數(shù)據(jù)失效后,在下次查詢到該節(jié)點(diǎn)中的RDF數(shù)據(jù)時(shí),從持久化存儲(chǔ)層去獲取相應(yīng)的數(shù)據(jù),然后根據(jù)一致性哈希算法將獲取到的數(shù)據(jù)加載到分布式內(nèi)存存儲(chǔ)層的其他節(jié)點(diǎn)以供后面快速查詢。
2.根據(jù)權(quán)利要求1所述一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,其特征在于:采用冷熱數(shù)據(jù)混合索引的方法對(duì)所有RDF數(shù)據(jù)進(jìn)行索引。
3.根據(jù)權(quán)利要求1所述一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,其特征在于:采用基于哈希的索引方法對(duì)所有RDF數(shù)據(jù)進(jìn)行索引。
4.根據(jù)權(quán)利要求3所述一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,其特征在于:所述步驟(I)中,采用基于標(biāo)準(zhǔn)MD5哈希和閉散列的方法存儲(chǔ)發(fā)生碰撞的RDF數(shù)據(jù)。
5.根據(jù)權(quán)利要求1所述一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,其特征在于:所述步驟(2)中,將“主語(yǔ)謂語(yǔ)*”和“*謂語(yǔ)賓語(yǔ)”這兩種查詢模式的RDF數(shù)據(jù)存儲(chǔ)到分布式內(nèi)存存儲(chǔ)層,其中*為一個(gè)通配符,表示相應(yīng)的部分可取任意值。
6.根據(jù)權(quán)利要求1所述一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,其特征在于:所述步驟(2)中,當(dāng)分布式內(nèi)存存儲(chǔ)層的容量不足時(shí),用新的RDF數(shù)據(jù)替換過(guò)時(shí)的RDF數(shù)據(jù)。
7.根據(jù)權(quán)利要求1所述一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,其特征在于:所述步驟(3)中,分布式內(nèi)存存儲(chǔ)層的節(jié)點(diǎn)上運(yùn)行守護(hù)進(jìn)程,用于監(jiān)控本節(jié)點(diǎn)的狀態(tài),并將該狀態(tài)注冊(cè)到全局監(jiān)管服務(wù)中;一旦有節(jié)點(diǎn)發(fā)生數(shù)據(jù)失效,全局監(jiān)管服務(wù)感知到,當(dāng)下次需要到該節(jié)點(diǎn)查詢數(shù)據(jù)時(shí),跳向持久化存儲(chǔ)層進(jìn)行查詢,并將使用到的相關(guān)數(shù)據(jù)重新載入到分布式內(nèi)存存儲(chǔ)層的其他節(jié)點(diǎn)中,以供后面快速查詢。
8.根據(jù)權(quán)利要求1所述一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,其特征在于:還包括步驟(4):提供位于最上層的RDF數(shù)據(jù)存儲(chǔ)和查詢接口層,用于導(dǎo)入數(shù)據(jù)和向用戶提供查詢服務(wù)。
9.根據(jù)權(quán)利要求8所述一種分布式層次化的RDF數(shù)據(jù)的存儲(chǔ)方法,其特征在于:所述步驟(4)中,RDF數(shù)據(jù)存儲(chǔ)和查詢接口包括SPARQL引擎模塊、數(shù)據(jù)庫(kù)選擇模塊和數(shù)據(jù)庫(kù)連接模塊;所述SPARQL引擎模塊用于解析用戶提交的查詢請(qǐng)求并生成相應(yīng)的查詢計(jì)劃,所述數(shù)據(jù)庫(kù)選擇模塊用于決定是將查詢請(qǐng)求發(fā)送到持久化存儲(chǔ)層還是直接在分布式內(nèi)存存儲(chǔ)層上完成,所述數(shù)據(jù)庫(kù)連接模塊用于管理和保持常用的數(shù)據(jù)庫(kù)連接,同時(shí)還負(fù)責(zé)監(jiān)管關(guān)于數(shù)據(jù)庫(kù)狀態(tài)的信息。
【文檔編號(hào)】G06F17/30GK103617276SQ201310658588
【公開(kāi)日】2014年3月5日 申請(qǐng)日期:2013年12月9日 優(yōu)先權(quán)日:2013年12月9日
【發(fā)明者】黃宜華, 顧榮, 胡偉 申請(qǐng)人:南京大學(xué)