摘 要: 为高效地存储和管理大规模语义Web数据,结合语义Web数据查询的特点,提出一种基于HBase的资源描述框架RDF(Resource Description Framework)数据存储改进方法。该方法将以主语+谓语、谓语+宾语、宾语+主语为索引的RDF数据存放在SP_O、PO_S、OS_P三张索引表中,同时将PO_S表按类划分为P_SO和P_OS两类,并给出改进的查询索引方法。对数据的加载存储,利用HBase自带的BulkLoad工具将数据上传至HBase存储表中。通过理论分析和实验结果显示,改进的存储方法对固定谓语的查询能作出快速响应;BulkLoad并行加载数据具有较高的加速比,在缩短数据加载时间的同时能提升系统整体存储性能。
关键词: 语义Web;HBase;RDF;数据存储
中图分类号: TP391.9 文献标识码: A DOI:10.3969/j.issn.1003-6970.2019.12.003
本文著录格式:朱道恒,秦学,刘君凤. 一种基于HBase的RDF数据存储改进方法[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上的文档中添加可被计算机所理解的语义,从而使整个Internet成为一個通用的信息交换媒介[1]。为规范化地描述Web资源及其属性,W3C组织提出了一个Web资源之间语义关系的开放元数据框架RDF[2]。RDF作为一种典型的非结构化数据,是一种规范的语义Web描述方法。
近年来,由于语义网发展迅速,语义Web数据呈现井喷式的增长,这使得关系型数据库管理系统已经很难管理这些数据。而关系型数据库在处理大规模语义Web数据时存储与查询效率均低于分布式数据库,越来越多的研究者开始利用分布式系统的海量数据存储与并行计算能力来解决海量数据管理问题[3-4]。
RDF数据的存储从以下两个方面入手:
(1)存储方面:建立合适的表结构使数据存储空间开销与查询性能达到一定平衡;
(2)查询方面:建立有效的索引使数据的查询变得简单、快速。
通过分析用户的一些日常查询数据,发现大部分的查询都包含固定的谓语值。根据这一现象,结合当前RDF数据的查询特点,提出一种基于HBase的RDF数据存储方法。将包含语义的RDF数据存储到设计好的三张HBase表中以实现海量RDF数据的分布式存储,并用HBase自带的BulkLoad工具完成数据的上传,一方面,提升数据导入数据库的效率,另一方面,提高RDF数据的查询效率。
1 相关研究工作
传统的关系型数据库管理系统RDBMS(Rela tional Database Management System)存储和管理RDF数据的弊端已经日渐凸显。RDBMS通过数据、关系和约束条件组成模型来存放和管理数据。当前,垂直(三元组表)存储模式[5]、水平存储模式[6]、属性存储模式[7]、模式生成存储模式[8]都是基于关系型
数据库设计的。因为关系型数据库的表结构一般需要提前设计好,而且部署环境是单机型,所以,对于动态性和可扩展性要求较高的大规模数据的存储而言,关系型数据库就难以满足。
分析上述几种存储模式,三元组表[9]的存储方式最简单,一张包含主语、谓语和宾语三列的表可以存储所有本体数据。垂直存储模式是在三元组表模式基础之上的一种优化。它把相同谓语的三元组存到同一张表中,一定程度上降低了存储开销。水平存储模式先垂直划分三元组,把相同的谓语作为列名,主语和宾语各存入一列,这样有效避免了空值和多值属性问题。属性表存储模式根据属性的不同,设计了多元表列,把相同的主语及对应的属性值存入同一行,这样避免了多表连接和自连接问题。模式生成存储主要是对表做水平和垂直切分,这样大幅减少了表中的空值数量。表1对以上几种存储模式各自的优缺点作出简单对比。
表1 基于关系型数据库存储方案的对比
Tab.1 Comparison of storage schemes based on relational database
存储方案 优点 缺点
三元组表 结构简单、易实现 自连接多、数据表大,查询效率低
水平存储 避免空值和多值属性问题 数据表过多,大量表连接操作,不支持未知属性查询
属性存储 避免多表连接和自连接 存储表稀疏,存储空间浪费
模式生成 降低储存开销、查询连接计算开销 过多人工干预、大规模数据管理难
近些年,大量的研究机构都在研究RDF数据的存储与查询,分布式系统和并行技术被广泛应用到语义Web的管理中,如Oracle公司开发的Oracle RDF,MPI研究所研发的RDF-3X[10],DERI研发的YARS系统等。RDF-3X系统将建立的索引存储在B+树的叶子节点上,通过各种索引表来分布式访问集群资源,这种系统存在数据存储结构复杂,通信开销较大,安全性不高等缺点。
HBase[11]是谷歌BigTable[12]的开源实现,它是基于列存储、可伸缩、性能较高的分布式数据库,便于存储非结构化和半结构化的数据。文献[13]设计出六张HBase索引表S_PO、P_OS、O_SP、PS_O、SO_P和PO_S来存储数据。S_PO表以主语为Row-Key,(谓语,宾语)为列标签,P_OS等五张表依此类推。文献[14]将文献[13]的存储表简化到三张,用SO_P、PO_S、OS_P三张索引表来存储数据。而S_PO、P_OS、O_SP这三种数据索引表就可以对应所有的三元组查询模式,它们对应如表2所示的查询组合。
当前,大多数的研究主要集中在Hadoop上进行数据的存储设计和查询处理。Hadoop是Apache
Software Foundation拥有的开源分布式计算平台,在分布式环境下提供了海量数据的处理能力。有研究者基于上述索引表存储机制,提出一种通过创建数据词典来编解码操作RDF数据的模型,该模型有效降低存储开销的同时保证了数据的安全性[15-17],但未对存储模式作出优化。
2 改进的RDF数据存储方法
2.1 存储改进方法
目前大多数的存储系统都是基于数据自身的结构来做改进,以求提高存储和查询效率。但从用户的查询习惯来看,这些数据存储和查询效率并不高。通过分析里海大学基准LUBM(Lehigh University Benchmark)中的查询记录,得到SP?、?PO、?P?三种固定谓语的查询方式较符合大多数用户的习惯,基于这些查询方式的数量占查询总数的绝大部分。
由于谓语的数量相对主语和宾语较少,如果单独将谓语作为行键索引会增大查询开销。因此本文设计三张表SP_O、PO_S、OS_P,分别是将<主语+谓语>、<谓语+宾语>、<宾语+主语>组成复合行键,三张表的列限定符分别为宾语、主语、谓语。对三张HBase表分别建索引表SP_O、PO_S、OS_P,再把PO_S索引表划分为两大类:P_OS和P_SO,而不修改SP_O、OS_P索引表。這样当谓语固定后做查询时,通过P_OS和P_SO表可对主语或宾语的不同组合做精细查询。实现方式如下:
P_OS:
Row-Key:Predicate{
Column Family:Object{
Column:(Subject)
}
}
P_SO:
Row-Key:Predicate{
Column Family:Subject{
Column:(Object)
}
}
2.2 模型设计
设计如下图1所示的数据存储模型,不改变SP_O和OS_P索引表,对PO_S索引表可按类进行划分为P_OS、P_SO两类,每个谓词值都被索引并存储为热数据。利用该模型查询固定谓语的RDF数据的速度将会提高。因为谓语一般在RDF数据集中所占比例较小,这样以谓语为索引的存储表便能用更短的时间找到数据,再配合SP_O和OS_P两张索引表的查询,就能查到绝大多数数据,同时查询效率也会提升。
2.3 索引查找算法
根据改进后的表3,我们要查找的目标索引是与查询请求相对应的索引类型。设计算法如下算法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
}
结束
该算法详细给出查询索引的步骤。根据算法流程,如果谓语固定,那就判断宾语是否固定来确定相对的索引类型。反之,如果谓语不固定,再进一步判断宾语是否固定来确定相对的索引类型。根据大多数用户查询习惯,该算法先将数量级较小的谓语作为固定条件,能够较快速地匹配出固定的元素,从而优化整体匹配索引的过程。
2.4 RDF数据导入HBase
设计完数据存储模型之后,将RDF数据按照
SP_O、OS_P、P_OS、P_SO模型加载到建好的HBase表中。如图2所示为导入RDF数据所需的环境。
图2 系统环境配置
Fig.2 System environment configuration
RDF数据导入HBase的方法主要有两种:交互式导入和BulkLoad工具导入。由于交互式导入数据效率较低,实际中一般不使用该方法。本文使用HBase自带的BulkLoad工具将RDF数据批量导入HBase表中。导入HBase表之前先通过HDFS Shell命令hadoop dfs -put将文件先导入HDFS上,再用HBase Java API将HDFS上的文件转化为HFile格式,最后通过BulkLoad批量导入数据到HBase表。
通过MapReduce的并行计算,HDFS中的文件转化适合HBase存储的HFile格式的文件,再用BulkLoad工具将HFile文件导入到每个Region,而每个Region的大小由HMaster自动平衡。HFile文件和Region都分布式地存储在DataNode节点上。MapReduce处理数据如图3所示。
图3 MapReduce处理数据流向
Fig.3 MapReduce handles data flow
3 实验测试与结果分析
3.1 实验环境简介
实验环境为具有4个节点的Hadoop集群,每个节点的硬件和软件配置如表4所示。实验目的是将RDF数据均衡分布于各节点的HBase数据库中。实验采用LUBM测试集,LUBM[15]是里海大学基准,它包含OWL本体定义文件,UBA数据集生成器和
14个SPARQL查询,能通过指定参数生成对应的数据集,参数的大小决定数据集规模的大小。
表4 硬件和软件配置
Tab.4 Hardware and software configuration
处理器 Intel Core i7 3.60 GHz JDK版本 1.8.0
内存 16 GB Hadoop版本 2.7.1
硬盘内存 500 GB HBase版本 1.1.5
操作系统 Ubuntu16.04 Jena版本 3.10.0
3.2 实验结果分析
用数据发生器UBA生成三组RDF数据集如表5所示。
表5 RDF数据集
Tab.5 RDF data sets
数据集大小 LUBM1 LUBM10 LUBM20
RDF三元组个数 84 612 955 823 2 128 324
利用MapReduce編程模型将大规模RDF数据并行加载到HBase,并分别统计串行加载和MapReduce并行加载三组不同数据集所用的时间并计算加速比,如表6所示。
表6 数据加载时间
Tab.6 Data loading time
数据集 串行/min MapReduce/min 加速比
LUBM1 0.9 0.77 1.17
LUBM10 4.8 3.55 1.35
LUBM20 15.6 8.12 1.92
实验加速比由式(1)计算:
(1)
式中:T(S)表示串行加载运行时间T(P)表示并行加载运行时间。
由表6,对比两种加载方法,当数据规模较小时,两种加载方式所用时间相差不大。当数据规模逐渐增大时,并行加载算法加载操作RDF数据明显比串行加载速度快,而且加速比也逐渐增大,说明加载性能也随之提升。
为验证本文对索引表PO_S分类之后的高效性,通过分别查询存储到SP_O和P_SO两张表中的数据集,三组数据在两张表中的响应时间如表7所示。使用固定谓词,已知主语,未知宾语设计查询方法如下:
SELECT s p ?o
WHERE
{
}
表7 SP_O与P_SO查询响应时间
Tab.7 SP_O and P_SO query response time
数据集 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
从表中可以看出,在查询每一组数据集时,P_SO表都比SP_O表的查询时间短,并且随着数据集的增大,查询加速比也逐渐变大。同时存储在HBase表中数据的有序性能够保证查询效率。
4 结语
面对大规模RDF数据的存储效率不高和管理混乱的问题,提出了一种改进的基于分布式数据库HBase的RDF数据存储方法。相比传统的RDF三元组存储方法,这种方法能根据索引更快速地查询到对应的数据。不仅减小数据存储开销,而且能保证一定的查询性能。为研究语义Web数据的高效查询和推理奠定了一定的理论和应用基础。由于本文主要针对RDF数据的存储方案在做优化,未对RDF数据的查询处理做深入的研究,后续的工作是要尝试将优化查询算法应用到该模型之中,从而进一步提升数据的查询效率。
参考文献
[1]R.Studer, R.Benjamins, D. Fensel. Knowledge Engineering: Principles and Methods. Data & Knowledge Engineering, 1998, 25(1–2): 161–198.
[2]杜方, 陈跃国, 杜小勇. RDF数据查询处理技术综述[J]. 软件学报, 2013(06): 1222-1242.
[3]谢华成, 马学文. MongoDB数据库下文件型数据存储研究[J]. 软件, 2015, 36(11): 12-14
[4]牛亚伟, 林昭文, 马严. 数据流信息从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数据管理研究进展[J]. 软件学报, 2009, 20(11): 2950-2964.
[7]鲍文, 李冠宇. 本体存储管理技术研究综述[J]. 计算机技术与发展. 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的数据存储平台访问控制策略[J]. 软件, 2016, 37(01): 67-70.
[16]申晋祥, 鲍美英. 基于Hadoop平台的优化协同过滤推荐算法研究[J]. 软件, 2018, 39(12): 01-05.
[17]王书梦, 吴晓松. 大数据环境下基于MapReduce的网络舆情热点发现[J]. 软件, 2015, 36(7): 108-113.