摘 ?要: 為高效地存儲和管理大規(guī)模語義Web數(shù)據(jù),結(jié)合語義Web數(shù)據(jù)查詢的特點(diǎn),提出一種基于HBase的資源描述框架RDF(Resource Description Framework)數(shù)據(jù)存儲改進(jìn)方法。該方法將以主語+謂語、謂語+賓語、賓語+主語為索引的RDF數(shù)據(jù)存放在SP_O、PO_S、OS_P三張索引表中,同時(shí)將PO_S表按類劃分為P_SO和P_OS兩類,并給出改進(jìn)的查詢索引方法。對數(shù)據(jù)的加載存儲,利用HBase自帶的BulkLoad工具將數(shù)據(jù)上傳至HBase存儲表中。通過理論分析和實(shí)驗(yàn)結(jié)果顯示,改進(jìn)的存儲方法對固定謂語的查詢能作出快速響應(yīng);BulkLoad并行加載數(shù)據(jù)具有較高的加速比,在縮短數(shù)據(jù)加載時(shí)間的同時(shí)能提升系統(tǒng)整體存儲性能。
關(guān)鍵詞: 語義Web;HBase;RDF;數(shù)據(jù)存儲
中圖分類號: TP391.9 ? ?文獻(xiàn)標(biāo)識碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.12.003
本文著錄格式:朱道恒,秦學(xué),劉君鳳. 一種基于HBase的RDF數(shù)據(jù)存儲改進(jìn)方法[J]. 軟件,2019,40(12):1317
An Improved Method of RDF Data Storage Based on HBase
ZHU Dao-heng, QIN Xue, LIU Jun-feng
(College of Big Data and Information Engineering, Guizhou University, Guiyang Guizhou 550025, China)
【Abstract】: In order to efficiently store and manage large-scale semantic Web data , an improved method of data storage based on HBase's resource description framework RDF is proposed., which combines the characteristics of semantic Web data query. In this method, RDF data indexed by subject + predicate, predicate + object, object + subject is stored in three index tables of SP_O, PO_S and OS_P.At the same time, PO_S table is divided into two categories, P_SO and P_OS, and an improved query index method is given. To load and store the data, the BulkLoad tool that HBase brings is used to upload the data to the HBase storage table. The theoretical analysis and experimental results show that the improved storage method can respond quickly to the fixed predicate query; BulkLoad parallel loading data has a high acceleration ratio, which can improve the overall storage performance of the system while shortening the data loading time.
【Key words】: Semantic web; HBase; RDF; Data storage
0 ?引言
語義Web核心思想是:通過在Internet上的文檔中添加可被計(jì)算機(jī)所理解的語義,從而使整個(gè)Internet成為一個(gè)通用的信息交換媒介[1]。為規(guī)范化地描述Web資源及其屬性,W3C組織提出了一個(gè)Web資源之間語義關(guān)系的開放元數(shù)據(jù)框架RDF[2]。RDF作為一種典型的非結(jié)構(gòu)化數(shù)據(jù),是一種規(guī)范的語義Web描述方法。
近年來,由于語義網(wǎng)發(fā)展迅速,語義Web數(shù)據(jù)呈現(xiàn)井噴式的增長,這使得關(guān)系型數(shù)據(jù)庫管理系統(tǒng)已經(jīng)很難管理這些數(shù)據(jù)。而關(guān)系型數(shù)據(jù)庫在處理大規(guī)模語義Web數(shù)據(jù)時(shí)存儲與查詢效率均低于分布式數(shù)據(jù)庫,越來越多的研究者開始利用分布式系統(tǒng)的海量數(shù)據(jù)存儲與并行計(jì)算能力來解決海量數(shù)據(jù)管理問題[3-4]。
RDF數(shù)據(jù)的存儲從以下兩個(gè)方面入手:
(1)存儲方面:建立合適的表結(jié)構(gòu)使數(shù)據(jù)存儲空間開銷與查詢性能達(dá)到一定平衡;
(2)查詢方面:建立有效的索引使數(shù)據(jù)的查詢變得簡單、快速。
通過分析用戶的一些日常查詢數(shù)據(jù),發(fā)現(xiàn)大部分的查詢都包含固定的謂語值。根據(jù)這一現(xiàn)象,結(jié)合當(dāng)前RDF數(shù)據(jù)的查詢特點(diǎn),提出一種基于HBase的RDF數(shù)據(jù)存儲方法。將包含語義的RDF數(shù)據(jù)存儲到設(shè)計(jì)好的三張HBase表中以實(shí)現(xiàn)海量RDF數(shù)據(jù)的分布式存儲,并用HBase自帶的BulkLoad工具完成數(shù)據(jù)的上傳,一方面,提升數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫的效率,另一方面,提高RDF數(shù)據(jù)的查詢效率。
1 ?相關(guān)研究工作
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)RDBMS(Rela tional Database Management System)存儲和管理RDF數(shù)據(jù)的弊端已經(jīng)日漸凸顯。RDBMS通過數(shù)據(jù)、關(guān)系和約束條件組成模型來存放和管理數(shù)據(jù)。當(dāng)前,垂直(三元組表)存儲模式[5]、水平存儲模式[6]、屬性存儲模式[7]、模式生成存儲模式[8]都是基于關(guān)系型
數(shù)據(jù)庫設(shè)計(jì)的。因?yàn)殛P(guān)系型數(shù)據(jù)庫的表結(jié)構(gòu)一般需要提前設(shè)計(jì)好,而且部署環(huán)境是單機(jī)型,所以,對于動態(tài)性和可擴(kuò)展性要求較高的大規(guī)模數(shù)據(jù)的存儲而言,關(guān)系型數(shù)據(jù)庫就難以滿足。
分析上述幾種存儲模式,三元組表[9]的存儲方式最簡單,一張包含主語、謂語和賓語三列的表可以存儲所有本體數(shù)據(jù)。垂直存儲模式是在三元組表模式基礎(chǔ)之上的一種優(yōu)化。它把相同謂語的三元組存到同一張表中,一定程度上降低了存儲開銷。水平存儲模式先垂直劃分三元組,把相同的謂語作為列名,主語和賓語各存入一列,這樣有效避免了空值和多值屬性問題。屬性表存儲模式根據(jù)屬性的不同,設(shè)計(jì)了多元表列,把相同的主語及對應(yīng)的屬性值存入同一行,這樣避免了多表連接和自連接問題。模式生成存儲主要是對表做水平和垂直切分,這樣大幅減少了表中的空值數(shù)量。表1對以上幾種存儲模式各自的優(yōu)缺點(diǎn)作出簡單對比。
表1 ?基于關(guān)系型數(shù)據(jù)庫存儲方案的對比
Tab.1 ?Comparison of storage schemes based on relational database
存儲方案 優(yōu)點(diǎn) 缺點(diǎn)
三元組表 結(jié)構(gòu)簡單、易實(shí)現(xiàn) 自連接多、數(shù)據(jù)表大,查詢效率低
水平存儲 避免空值和多值屬性問題 數(shù)據(jù)表過多,大量表連接操作,不支持未知屬性查詢
屬性存儲 避免多表連接和自連接 存儲表稀疏,存儲空間浪費(fèi)
模式生成 降低儲存開銷、查詢連接計(jì)算開銷 過多人工干預(yù)、大規(guī)模數(shù)據(jù)管理難
近些年,大量的研究機(jī)構(gòu)都在研究RDF數(shù)據(jù)的存儲與查詢,分布式系統(tǒng)和并行技術(shù)被廣泛應(yīng)用到語義Web的管理中,如Oracle公司開發(fā)的Oracle RDF,MPI研究所研發(fā)的RDF-3X[10],DERI研發(fā)的YARS系統(tǒng)等。RDF-3X系統(tǒng)將建立的索引存儲在B+樹的葉子節(jié)點(diǎn)上,通過各種索引表來分布式訪問集群資源,這種系統(tǒng)存在數(shù)據(jù)存儲結(jié)構(gòu)復(fù)雜,通信開銷較大,安全性不高等缺點(diǎn)。
HBase[11]是谷歌BigTable[12]的開源實(shí)現(xiàn),它是基于列存儲、可伸縮、性能較高的分布式數(shù)據(jù)庫,便于存儲非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù)。文獻(xiàn)[13]設(shè)計(jì)出六張HBase索引表S_PO、P_OS、O_SP、PS_O、SO_P和PO_S來存儲數(shù)據(jù)。S_PO表以主語為Row-Key,(謂語,賓語)為列標(biāo)簽,P_OS等五張表依此類推。文獻(xiàn)[14]將文獻(xiàn)[13]的存儲表簡化到三張,用SO_P、PO_S、OS_P三張索引表來存儲數(shù)據(jù)。而S_PO、P_OS、O_SP這三種數(shù)據(jù)索引表就可以對應(yīng)所有的三元組查詢模式,它們對應(yīng)如表2所示的查詢組合。
當(dāng)前,大多數(shù)的研究主要集中在Hadoop上進(jìn)行數(shù)據(jù)的存儲設(shè)計(jì)和查詢處理。Hadoop是Apache
Software Foundation擁有的開源分布式計(jì)算平臺,在分布式環(huán)境下提供了海量數(shù)據(jù)的處理能力。有研究者基于上述索引表存儲機(jī)制,提出一種通過創(chuàng)建數(shù)據(jù)詞典來編解碼操作RDF數(shù)據(jù)的模型,該模型有效降低存儲開銷的同時(shí)保證了數(shù)據(jù)的安全性[15-17],但未對存儲模式作出優(yōu)化。
2 ?改進(jìn)的RDF數(shù)據(jù)存儲方法
2.1 ?存儲改進(jìn)方法
目前大多數(shù)的存儲系統(tǒng)都是基于數(shù)據(jù)自身的結(jié)構(gòu)來做改進(jìn),以求提高存儲和查詢效率。但從用戶的查詢習(xí)慣來看,這些數(shù)據(jù)存儲和查詢效率并不高。通過分析里海大學(xué)基準(zhǔn)LUBM(Lehigh University Benchmark)中的查詢記錄,得到SP?、?PO、?P?三種固定謂語的查詢方式較符合大多數(shù)用戶的習(xí)慣,基于這些查詢方式的數(shù)量占查詢總數(shù)的絕大部分。
由于謂語的數(shù)量相對主語和賓語較少,如果單獨(dú)將謂語作為行鍵索引會增大查詢開銷。因此本文設(shè)計(jì)三張表SP_O、PO_S、OS_P,分別是將<主語+謂語>、<謂語+賓語>、<賓語+主語>組成復(fù)合行鍵,三張表的列限定符分別為賓語、主語、謂語。對三張HBase表分別建索引表SP_O、PO_S、OS_P,再把PO_S索引表劃分為兩大類:P_OS和P_SO,而不修改SP_O、OS_P索引表。這樣當(dāng)謂語固定后做查詢時(shí),通過P_OS和P_SO表可對主語或賓語的不同組合做精細(xì)查詢。實(shí)現(xiàn)方式如下:
P_OS:
Row-Key:Predicate{
Column Family:Object{
Column:(Subject)
}
}
P_SO:
Row-Key:Predicate{
Column Family:Subject{
Column:(Object)
}
}
2.2 ?模型設(shè)計(jì)
設(shè)計(jì)如下圖1所示的數(shù)據(jù)存儲模型,不改變SP_O和OS_P索引表,對PO_S索引表可按類進(jìn)行劃分為P_OS、P_SO兩類,每個(gè)謂詞值都被索引并存儲為熱數(shù)據(jù)。利用該模型查詢固定謂語的RDF數(shù)據(jù)的速度將會提高。因?yàn)橹^語一般在RDF數(shù)據(jù)集中所占比例較小,這樣以謂語為索引的存儲表便能用更短的時(shí)間找到數(shù)據(jù),再配合SP_O和OS_P兩張索引表的查詢,就能查到絕大多數(shù)數(shù)據(jù),同時(shí)查詢效率也會提升。
2.3 ?索引查找算法
根據(jù)改進(jìn)后的表3,我們要查找的目標(biāo)索引是與查詢請求相對應(yīng)的索引類型。設(shè)計(jì)算法如下算法1所示。
算法1 查詢索引
輸入:查詢語句
輸出:索引類型
開始
//若謂語固定
if(predicate is constrained)
{
//且賓語固定
if(object is constrained)
return P_OS
else
Return P_SO
}
elso
{
//賓語固定
if(object is constrained)
return OS_P
elso
return SO_P
}
結(jié)束
該算法詳細(xì)給出查詢索引的步驟。根據(jù)算法流程,如果謂語固定,那就判斷賓語是否固定來確定相對的索引類型。反之,如果謂語不固定,再進(jìn)一步判斷賓語是否固定來確定相對的索引類型。根據(jù)大多數(shù)用戶查詢習(xí)慣,該算法先將數(shù)量級較小的謂語作為固定條件,能夠較快速地匹配出固定的元素,從而優(yōu)化整體匹配索引的過程。
2.4 ?RDF數(shù)據(jù)導(dǎo)入HBase
設(shè)計(jì)完數(shù)據(jù)存儲模型之后,將RDF數(shù)據(jù)按照
SP_O、OS_P、P_OS、P_SO模型加載到建好的HBase表中。如圖2所示為導(dǎo)入RDF數(shù)據(jù)所需的環(huán)境。
圖2 ?系統(tǒng)環(huán)境配置
Fig.2 ?System environment configuration
RDF數(shù)據(jù)導(dǎo)入HBase的方法主要有兩種:交互式導(dǎo)入和BulkLoad工具導(dǎo)入。由于交互式導(dǎo)入數(shù)據(jù)效率較低,實(shí)際中一般不使用該方法。本文使用HBase自帶的BulkLoad工具將RDF數(shù)據(jù)批量導(dǎo)入HBase表中。導(dǎo)入HBase表之前先通過HDFS Shell命令hadoop dfs -put將文件先導(dǎo)入HDFS上,再用HBase Java API將HDFS上的文件轉(zhuǎn)化為HFile格式,最后通過BulkLoad批量導(dǎo)入數(shù)據(jù)到HBase表。
通過MapReduce的并行計(jì)算,HDFS中的文件轉(zhuǎn)化適合HBase存儲的HFile格式的文件,再用BulkLoad工具將HFile文件導(dǎo)入到每個(gè)Region,而每個(gè)Region的大小由HMaster自動平衡。HFile文件和Region都分布式地存儲在DataNode節(jié)點(diǎn)上。MapReduce處理數(shù)據(jù)如圖3所示。
圖3 ?MapReduce處理數(shù)據(jù)流向
Fig.3 ?MapReduce handles data flow
3 ?實(shí)驗(yàn)測試與結(jié)果分析
3.1 ?實(shí)驗(yàn)環(huán)境簡介
實(shí)驗(yàn)環(huán)境為具有4個(gè)節(jié)點(diǎn)的Hadoop集群,每個(gè)節(jié)點(diǎn)的硬件和軟件配置如表4所示。實(shí)驗(yàn)?zāi)康氖菍DF數(shù)據(jù)均衡分布于各節(jié)點(diǎn)的HBase數(shù)據(jù)庫中。實(shí)驗(yàn)采用LUBM測試集,LUBM[15]是里海大學(xué)基準(zhǔn),它包含OWL本體定義文件,UBA數(shù)據(jù)集生成器和
14個(gè)SPARQL查詢,能通過指定參數(shù)生成對應(yīng)的數(shù)據(jù)集,參數(shù)的大小決定數(shù)據(jù)集規(guī)模的大小。
表4 ?硬件和軟件配置
Tab.4 ?Hardware and software configuration
處理器 Intel Core i7 3.60 GHz JDK版本 1.8.0
內(nèi)存 16 GB Hadoop版本 2.7.1
硬盤內(nèi)存 500 GB HBase版本 1.1.5
操作系統(tǒng) Ubuntu16.04 Jena版本 3.10.0
3.2 ?實(shí)驗(yàn)結(jié)果分析
用數(shù)據(jù)發(fā)生器UBA生成三組RDF數(shù)據(jù)集如表5所示。
表5 ?RDF數(shù)據(jù)集
Tab.5 ?RDF data sets
數(shù)據(jù)集大小 LUBM1 LUBM10 LUBM20
RDF三元組個(gè)數(shù) 84 612 955 823 2 128 324
利用MapReduce編程模型將大規(guī)模RDF數(shù)據(jù)并行加載到HBase,并分別統(tǒng)計(jì)串行加載和MapReduce并行加載三組不同數(shù)據(jù)集所用的時(shí)間并計(jì)算加速比,如表6所示。
表6 ?數(shù)據(jù)加載時(shí)間
Tab.6 ?Data loading time
數(shù)據(jù)集 串行/min MapReduce/min 加速比
LUBM1 0.9 0.77 1.17
LUBM10 4.8 3.55 1.35
LUBM20 15.6 8.12 1.92
實(shí)驗(yàn)加速比由式(1)計(jì)算:
(1)
式中:T(S)表示串行加載運(yùn)行時(shí)間T(P)表示并行加載運(yùn)行時(shí)間。
由表6,對比兩種加載方法,當(dāng)數(shù)據(jù)規(guī)模較小時(shí),兩種加載方式所用時(shí)間相差不大。當(dāng)數(shù)據(jù)規(guī)模逐漸增大時(shí),并行加載算法加載操作RDF數(shù)據(jù)明顯比串行加載速度快,而且加速比也逐漸增大,說明加載性能也隨之提升。
為驗(yàn)證本文對索引表PO_S分類之后的高效性,通過分別查詢存儲到SP_O和P_SO兩張表中的數(shù)據(jù)集,三組數(shù)據(jù)在兩張表中的響應(yīng)時(shí)間如表7所示。使用固定謂詞,已知主語,未知賓語設(shè)計(jì)查詢方法如下:
SELECT s p ?o
WHERE
{
}
表7 ?SP_O與P_SO查詢響應(yīng)時(shí)間
Tab.7 ?SP_O and P_SO query response time
數(shù)據(jù)集 SP_O索引/s P_SO索引/s 加速比
LUBM1 0.482 0.391 1.23
LUBM10 1.063 0.782 1.36
LUBM20 2.045 1.329 1.53
從表中可以看出,在查詢每一組數(shù)據(jù)集時(shí),P_SO表都比SP_O表的查詢時(shí)間短,并且隨著數(shù)據(jù)集的增大,查詢加速比也逐漸變大。同時(shí)存儲在HBase表中數(shù)據(jù)的有序性能夠保證查詢效率。
4 ?結(jié)語
面對大規(guī)模RDF數(shù)據(jù)的存儲效率不高和管理混亂的問題,提出了一種改進(jìn)的基于分布式數(shù)據(jù)庫HBase的RDF數(shù)據(jù)存儲方法。相比傳統(tǒng)的RDF三元組存儲方法,這種方法能根據(jù)索引更快速地查詢到對應(yīng)的數(shù)據(jù)。不僅減小數(shù)據(jù)存儲開銷,而且能保證一定的查詢性能。為研究語義Web數(shù)據(jù)的高效查詢和推理奠定了一定的理論和應(yīng)用基礎(chǔ)。由于本文主要針對RDF數(shù)據(jù)的存儲方案在做優(yōu)化,未對RDF數(shù)據(jù)的查詢處理做深入的研究,后續(xù)的工作是要嘗試將優(yōu)化查詢算法應(yīng)用到該模型之中,從而進(jìn)一步提升數(shù)據(jù)的查詢效率。
參考文獻(xiàn)
[1]R.Studer, R.Benjamins, D. Fensel. Knowledge Engineering: Principles and Methods. Data & Knowledge Engineering, 1998, 25(1–2): 161–198.
[2]杜方, 陳躍國, 杜小勇. RDF數(shù)據(jù)查詢處理技術(shù)綜述[J]. 軟件學(xué)報(bào), 2013(06): 1222-1242.
[3]謝華成, 馬學(xué)文. MongoDB數(shù)據(jù)庫下文件型數(shù)據(jù)存儲研究[J]. 軟件, 2015, 36(11): 12-14
[4]牛亞偉, 林昭文, 馬嚴(yán). 數(shù)據(jù)流信息從MySQL到HBase的遷移策略的研究[J]. 軟件, 2015, 36(11): 01-05.
[5]Harris S, Lamb N, Shadbolt N, et al. 4store: The design and implementation of a clustered rdf store[J]. Scalable Semantic Web Knowledge Base Systems, 2009, 4: 94-109.
[6]杜小勇, 王琰, 呂彬. 語義Web數(shù)據(jù)管理研究進(jìn)展[J]. 軟件學(xué)報(bào), 2009, 20(11): 2950-2964.
[7]鮑文, 李冠宇. 本體存儲管理技術(shù)研究綜述[J]. 計(jì)算機(jī)技術(shù)與發(fā)展. 2008, 18(1): 146-150.
[8]Zhou Q, Hall W, Roure D D. Building a Distributed Infra-structure for Scalable Triple Stores[J].Journal of ComputerScience & Technology, 2009, 24(3): 447-462.
[9]Kaoudi Z, Manolescu I. RDF in the clouds:a survey[J]. Vldb Journal, 2015, 24(1): 67-91.
[10]Zheng W, Zou L, Lian X, et al. Efficient Subgraph Skyline Search Over Large Graphs[C]//Proceedings of the 23rd ACM International Conference on Conference on Information and Knowledge Management. ACM, 2014: 1529-1538.
[11]George L. HBase: the definitive guide[M]. OReilly Media, Incorporated, 2001.
[12]Chang F, Dean J, Ghemawat S, et al. Bigtable: A distributed storage system for structured data[J]. ACM Transactions on Computer Systems (TOCS), 2008, 26(2): 4.
[13]Sun J, Jin Q.Scalable rdf store based on hbase and mapreduce[C]. Advancd Computer Theory and Engineering (ICACTE), 2010 3rd International Conference on IEEE, 2010, 1: V1-633-V1-636.
[14]Papailiou N, Konstantinou I, Tsoumakos D, et al. H2RDF: adaptive query processing on RDF data in the cloud[C]. Processing of the 21st international conference companion on the World Wide Web. ACM, 2012: 397-400.
[15]王又立, 王晶. 一種基于Kerberos和HDFS的數(shù)據(jù)存儲平臺訪問控制策略[J]. 軟件, 2016, 37(01): 67-70.
[16]申晉祥, 鮑美英. 基于Hadoop平臺的優(yōu)化協(xié)同過濾推薦算法研究[J]. 軟件, 2018, 39(12): 01-05.
[17]王書夢, 吳曉松. 大數(shù)據(jù)環(huán)境下基于MapReduce的網(wǎng)絡(luò)輿情熱點(diǎn)發(fā)現(xiàn)[J]. 軟件, 2015, 36(7): 108-113.