一種基于Redis的RDF數(shù)據(jù)分布式存儲(chǔ)和查詢方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及RDF數(shù)據(jù)存儲(chǔ)以及查詢技術(shù)領(lǐng)域,特別是一種基于Redis的RDF分布 式存儲(chǔ)和查詢方法。
【背景技術(shù)】
[0002] 目前,學(xué)術(shù)界已經(jīng)幵發(fā)了一些成熟的RDF(Resource Description Framework)管 理系統(tǒng),如Jena、Sesame、RDF-3X,些系統(tǒng)大都釆用傳統(tǒng)的集中式關(guān)系型數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)RDF 數(shù)據(jù),將數(shù)據(jù)按照一定的組織方式存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中,利用成熟的關(guān)系或?qū)ο箨P(guān)系數(shù) 據(jù)庫(kù)進(jìn)行后臺(tái)存儲(chǔ),將SPARQL查詢轉(zhuǎn)化成SQL查詢語(yǔ)句進(jìn)行查詢。
[0003] 隨著RDF數(shù)據(jù)的急速增長(zhǎng),傳統(tǒng)的基于關(guān)系型數(shù)據(jù)庫(kù)的RDF存儲(chǔ)管理系統(tǒng)己經(jīng)無(wú) 法適應(yīng)爆炸式增長(zhǎng)的海量RDF數(shù)據(jù),越來(lái)越多的研宄者開始利用分布式系統(tǒng)的海量數(shù)據(jù)存 儲(chǔ)與并行計(jì)算能力解決海量RDF數(shù)據(jù)管理問(wèn)題。分布式RDF數(shù)據(jù)存儲(chǔ)與查詢通常采用分布 式文件系統(tǒng)以文件形式或者NoSQL數(shù)據(jù)庫(kù)多索引表的形式存儲(chǔ)數(shù)據(jù),在查詢方面通常采用 MapReduce計(jì)算模型處理SPARQL子句的連接,或者利用數(shù)據(jù)庫(kù)提供的API實(shí)現(xiàn)查詢處理。 這方面的研宄是近兩年的研宄熱點(diǎn),但還處于研宄的初始階段,目前還沒(méi)有成熟的系統(tǒng)方 案出現(xiàn)。采用傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)系統(tǒng)存儲(chǔ)RDF數(shù)據(jù)存在諸多存儲(chǔ)瓶頸,而且RDF數(shù)據(jù) 的無(wú)模式特征使得其難以使用關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢優(yōu)化策略?,F(xiàn)有研宄表明關(guān)系 型數(shù)據(jù)庫(kù)在處理海量RDF數(shù)據(jù)時(shí)存儲(chǔ)與查詢效率比分布式數(shù)據(jù)庫(kù)低;而采用文件系統(tǒng)的存 儲(chǔ)方式對(duì)于大規(guī)模RDF數(shù)據(jù),查詢效率很低;基于內(nèi)存的存儲(chǔ)方式存儲(chǔ)查詢效率雖然都很 快,但是受內(nèi)存大小的限制,只適應(yīng)于小規(guī)模RDF數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明的目的在于提供一種基于RediS的RDF分布式存儲(chǔ)和查詢方法,以解決現(xiàn) 有集中式Redis (Remote Dictionary Server)存儲(chǔ)和查詢存在的受內(nèi)存大小限制的問(wèn)題。
[0005] 為實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案是:一種基于Redis的RDF數(shù)據(jù)分布式存儲(chǔ)方 法,其特征在于,按照如下步驟實(shí)現(xiàn): 51 :提供一基于Redis的RDF數(shù)據(jù)分布式存儲(chǔ)系統(tǒng),該存儲(chǔ)系統(tǒng)包括:一個(gè)管理節(jié)點(diǎn) (Manage Node)以及與該管理節(jié)點(diǎn)(Manage Node)相匹配的處理節(jié)點(diǎn)(Process Node)和存 儲(chǔ)節(jié)點(diǎn)(Storage Node);其中,所述管理節(jié)點(diǎn)(Manage Node)提供對(duì)外的接口,負(fù)責(zé)接收以 及解析外部的RDF數(shù)據(jù); 52 :在存儲(chǔ)節(jié)點(diǎn)(Storage Node)的Redis中,首先根據(jù)RDF數(shù)據(jù)本體中的定義,建立以 主語(yǔ)所屬的類名命的類數(shù)據(jù)庫(kù),同時(shí)在該類數(shù)據(jù)庫(kù)中,為每一個(gè)屬性建立以該屬性命名的 屬性集合,即謂語(yǔ)集合;根據(jù)解析后RDF數(shù)據(jù)對(duì)應(yīng)的三元組中主語(yǔ)的類型和謂語(yǔ),將主語(yǔ)為 同一類、謂語(yǔ)相同的主語(yǔ)不重復(fù)地置于該類數(shù)據(jù)庫(kù)中的謂語(yǔ)集合中,并為該謂語(yǔ)集合中的 每個(gè)主語(yǔ)建立以該主語(yǔ)和其對(duì)應(yīng)的謂語(yǔ)命名的賓語(yǔ)集合,用以存放該主語(yǔ)及其謂語(yǔ)對(duì)應(yīng)的 所有賓語(yǔ);然后為每一個(gè)謂語(yǔ)建立謂語(yǔ)反轉(zhuǎn)備份,即根據(jù)同一個(gè)謂語(yǔ),建立一個(gè)以該謂語(yǔ)反 轉(zhuǎn)謂語(yǔ)命名的反轉(zhuǎn)謂語(yǔ)集合;再將解析后RDF數(shù)據(jù)對(duì)應(yīng)的三元組中主語(yǔ)為同一個(gè)類、謂語(yǔ) 相同的賓語(yǔ)不重復(fù)地置于該反轉(zhuǎn)謂語(yǔ)集合中,并為該反轉(zhuǎn)謂語(yǔ)集合中每個(gè)賓語(yǔ)建立以該賓 語(yǔ)和其對(duì)應(yīng)的謂語(yǔ)命名的主語(yǔ)集合,以存放該賓語(yǔ)及其謂語(yǔ)對(duì)應(yīng)的所有主語(yǔ)。
[0006] 在本發(fā)明一實(shí)施例中,每個(gè)存儲(chǔ)節(jié)點(diǎn)(Storage Node)包含一個(gè)Redis,每個(gè)Redis 中均能創(chuàng)建N個(gè)類數(shù)據(jù)庫(kù),且該N為正整數(shù)。
[0007] 在本發(fā)明一實(shí)施例中,所述管理節(jié)點(diǎn)(Manage Node)通過(guò)每個(gè)存儲(chǔ)節(jié)點(diǎn)(Storage Node)對(duì)應(yīng)的IP地址、端口地址以及類數(shù)據(jù)庫(kù)編號(hào)訪問(wèn)每個(gè)存儲(chǔ)節(jié)點(diǎn)(Storage Node)的 Redis中的類數(shù)據(jù)庫(kù)。
[0008] 在本發(fā)明一實(shí)施例中,在所述存儲(chǔ)系統(tǒng)中,所述處理節(jié)點(diǎn)(Process Node)通過(guò) Redis提供的API與所述存儲(chǔ)節(jié)點(diǎn)(Storage Node)進(jìn)行通信。
[0009] 在本發(fā)明一實(shí)施例中,在所述存儲(chǔ)系統(tǒng)中,所述處理節(jié)點(diǎn)(Process Node)和所述 存儲(chǔ)節(jié)點(diǎn)(Storage Node)為多對(duì)多的關(guān)系。
[0010] 進(jìn)一步的,還提供一種基于Redis的RDF數(shù)據(jù)分布式查詢方法,其特征在于,包括 如下步驟: 531 :管理節(jié)點(diǎn)(Manage Node)判斷查詢語(yǔ)句對(duì)應(yīng)的Type;若查詢語(yǔ)句的主語(yǔ)所屬類已 知、謂語(yǔ)未知,則轉(zhuǎn)入步驟S32 ;若查詢語(yǔ)句的主語(yǔ)所屬類未知、謂語(yǔ)已知,則轉(zhuǎn)入步驟S33 ; 若查詢語(yǔ)句的主語(yǔ)所屬類已知、謂語(yǔ)已知,則轉(zhuǎn)入步驟S34 ; 532 :從所述存儲(chǔ)系統(tǒng)的各個(gè)存儲(chǔ)節(jié)點(diǎn)(Storage Node)的Redis對(duì)應(yīng)的類數(shù)據(jù)庫(kù)中進(jìn) 行查找; 533 :從查詢語(yǔ)句的本體文件中獲取謂語(yǔ)的定義域,將所有謂語(yǔ)的定義域的交集作為查 詢的主語(yǔ)類型,轉(zhuǎn)化為主語(yǔ)所屬類已知、謂語(yǔ)已知的類型,并轉(zhuǎn)入步驟S34 ; 534 :管理節(jié)點(diǎn)(Manage Node)判斷查詢語(yǔ)句中的主語(yǔ)或賓語(yǔ)是否已知,若主語(yǔ)或者賓 語(yǔ)其中有一個(gè)已知,管理節(jié)點(diǎn)(Manage Node)直接進(jìn)行查詢,且該查詢過(guò)程的時(shí)間復(fù)雜度為 0 (1);若主語(yǔ)和或賓語(yǔ)均未知,則轉(zhuǎn)入步驟S35 ; 535 :管理節(jié)點(diǎn)(Manage Node)查找處理節(jié)點(diǎn)(ProcessNode)的注冊(cè)表,根據(jù)該注冊(cè)表 中已注冊(cè)的處理節(jié)點(diǎn)(ProcessNode)的個(gè)數(shù),將整個(gè)查詢?nèi)蝿?wù)分割成對(duì)應(yīng)個(gè)數(shù)的子任務(wù),并 分配給各個(gè)處理節(jié)點(diǎn)(ProcessNode)進(jìn)行查詢;處理節(jié)點(diǎn)(ProcessNode)根據(jù)子查詢?nèi)蝿?wù) 中查詢語(yǔ)句對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)(Storage Node),從該存儲(chǔ)節(jié)點(diǎn)(Storage Node)中進(jìn)行查詢; 處理節(jié)點(diǎn)(ProcessNode)查詢完成后將結(jié)果集返回給管理節(jié)點(diǎn)(Manage Node)。
[0011] 在本發(fā)明一實(shí)施例中,主語(yǔ)或賓語(yǔ)已知的查詢,管理節(jié)點(diǎn)(Manage Node)將查詢分 成三個(gè)階段:查詢語(yǔ)句分析、定位數(shù)據(jù)集和執(zhí)行查詢操作。
[0012] 在本發(fā)明一實(shí)施例中,對(duì)于元組模式個(gè)數(shù)較多和語(yǔ)義較復(fù)雜的查詢語(yǔ)句,管理節(jié) 點(diǎn)(Manage Node)將查詢?nèi)蝿?wù)分成多個(gè)子查詢?nèi)蝿?wù)并傳送至處理節(jié)點(diǎn)(ProcessNode)進(jìn)行 執(zhí)行。
[0013] 在本發(fā)明一實(shí)施例中,對(duì)于元組模式個(gè)數(shù)較多和語(yǔ)義較復(fù)雜的查詢語(yǔ)句,管理節(jié) 點(diǎn)(Manage Node)通過(guò)連接選擇策略樹(SST)生成連接策略,且在所述連接選擇策略樹 (SST)中,選擇策略樹包含一個(gè)根節(jié)點(diǎn):Decision節(jié)點(diǎn),用于生成連接策略;所述Decision 節(jié)點(diǎn)下一級(jí)是由每條查詢語(yǔ)句中謂語(yǔ)對(duì)應(yīng)生成的Pi節(jié)點(diǎn),Pi節(jié)點(diǎn)包含兩種子節(jié)點(diǎn):Si (主 語(yǔ))節(jié)點(diǎn)和Oi (賓語(yǔ))節(jié)點(diǎn),且Si (主語(yǔ))節(jié)點(diǎn)包括所有謂詞為Pi的主語(yǔ)實(shí)例,Oi (賓語(yǔ)) 節(jié)點(diǎn)包括所有謂詞為Pi的賓語(yǔ)實(shí)例;除了 Decision節(jié)點(diǎn)外,每個(gè)節(jié)點(diǎn)都具有自己的權(quán)值, 符號(hào)定義如下:Pi :SST中第i個(gè)P節(jié)點(diǎn);Si :第i個(gè)P節(jié)點(diǎn)的S子節(jié)點(diǎn);Oi :第i個(gè)P節(jié)點(diǎn) 的〇子節(jié)點(diǎn);sj :Si節(jié)點(diǎn)下的第j個(gè)S子節(jié)點(diǎn);oj :0i節(jié)點(diǎn)下的第j個(gè)O節(jié)點(diǎn);權(quán)值計(jì)算公 式如下: