基于面向文档的NoSQL数据库的RDF数据存储实现

时间:2022-04-05 11:16:14

基于面向文档的NoSQL数据库的RDF数据存储实现

摘 要 以RDF格式的数据在语义Web上越来越多,需要有一个可以有效的存储和查询这些RDF数据的管理方案。本文设计并实现了基于面向文档的NoSQL数据库的RDF数据存储方案。该方案可以有效的实现管理RDF数据,并通过相应的索引来提高对数据的查询效率。实验结果表明,方案对RDF及其语义数据的存储和查询是有效并有性能的优势。

【关键词】RDF 存储 NoSQL MongoDB 语义Web

1 引言

随着计算机网络的快速发展,语义Web也得到大量的使用和发展,产生了大量的RDF数据。对于快速有效的存储和查询如此海量的RDF数据,提出了更高的要求。非关系(NoSQL)数据库技术是最近几年研究和学习热点,它们多数不支持事务的处理,更加关注数据的读取和查询的效率问题。同时它们的出现是迎合那些对数据的一致性不高但是对读取和查询性能要求高的应用。基于此,本文设计并实现了一种大规模RDF数据的存储方案,并在基于面向对象文档NoSQL数据库MongoDB上实现包括存储和查询的一系列实验。实验结果表明,该方案对于大规模RDF数据的存储和查询具有性能的优势。尤其在性能上优于传统的关系数据库。

2 相关工作

RDF数据是以形如(S,P,O)的三元组形式来描述和组织数据的,其中S表示主语,P表示谓语,宾语用O表示。主语表示Web的某一资源,谓语表示主语的某一属性或与其他资源的关系,宾语表示谓语的属性值或与之有关系的另一资源。(S,P,O)三元组中有以下三种形式的数据:统一资源标识符(URI)、字面值(Literal)、空节点(Blank Node)。

MongoDB是面向文档的数据库,是一种非关系型数据库(NoSQL),是一种强大、灵活、可扩展的数据存储方式。

论文中将RDF三元组存储在六张HBase表中,他们分别是S_PO、P_SO、O_SP、PS_O、SO_P和PO_S表。它通过冗余数据来实现数据的快速查询效率。论文[8]实现的是基于BigTable存储模型的分布式结构化数据存储系统。

3 RDF存储方案设计

3.1 存储模式设计

为了保持RDF原有数据的语义,在本文的设计模式中将RDF数据和RDFS信息分开存储,建立相应的存储集合。本文采用S、P、O分开存储的方案,其它的集合使用_id来进行映射。从而避免了数据的大量重复冗余。

3.1.1 建立RDF数据存储模式

因为空节点是没有名称既URI的资源,既空节点也是一种特殊的资源。所以我们设计资源,字面值和三元组声明三张表(见RDF_RESOURCE、RDF_LITERA、RDF_TRIPLE集合)。在XML描述语言中有命名空间的概念,为了节省存储空间,建立命名空间集合(见RDF_NAMESPACE集合)。在RDF_TRIPLE集合中的isResource标记object是资源还是字面值。

3.1.2 建立RDFS存储模式

RDFS建立了RDF的一些基本的模型限制,说明了类的属性、类与类之间的关系、值域和定义域在属性上的约束。RDFS主要通过以下资源来描述类及其之间的关系:rdfs:Class,rdf:Property,rdfs:Domain,rdfs:Range,rdfs:SubPropertyOf,rdfs:SubClassOf。所以分别建立了RDFS集合。其中,Class、Property集合声明了属于类和属性的资源。Domain、Range集合描述了属性与类之间或属性与数据类型之间的定义域和值域。SubPropertyOf、SubClassOf集合表示属性的子属性和类的子类的语义。

按照上面所述,我们设计的MongoDB存储模式的集合和字段内容如下:RDF_RESOURCE{_id、namespaceId、localName },RDF_NAMESPACE{_id、prefix、spaceName },RDF_TRIPLE{_id、subjectId、predicateId、objectId、isResource },RDF_LITERA{_id、literal },RDFS_CLASS{ resourceId },RDFS_PROPERTY{ resourceId },RDFS_DOMAIN{ propertyId、classId },RDFS_RANGE{ propertyId、classId },RDFS_SUBPROPERTYOF{ subId、superId },RDFS_SUBCLASSOF{ subId、superId }。

3.2 面向文档的MongoDB的实现

3.2.1 MongoDB集合存储

MongoDB存储上面每组数据时通过文档的形式来存储的。如果说MongoDB中的文档类似于关系数据库中的行,那么集合就相当于表。MongoDB的集合是无模式的,但是因为RDF/RDFS的数据格式都是规范的,而且这种无模式的特性可行带来效率上下降。所以本文中不涉及到MongoDB集合的无模式操作。所有的数据格式都按照上面所设计的集合来创建和存储。

3.2.2 实现

根据上面所设计的模式来创建MongoDB集合。

第一步:我们创建一个名叫rdf的数据库:

use rdf;

第二步:创建RDF和RDFS集合:

db.createCollection(“RDF_NAMESPACE”); db.createCollection(“RDF_RESOURCE”);

并使用Sesame通过分解规则将RDF三元组的信息分别存入相应的集合中。对于RDFS数据,可以参考文献中的分解规则来对RDFS信息分解存入相应的集合中。为了提高查询的效率,我们将对一些主要的集合建立索引。

索引字段的顺序是很重要的,不能随便的排序或打乱,否则会影响查找的效率。

在集合RDF_TRIPLE中的SP,SO,PO索引实际上实现了论文中通过冗余数据来实现查询性能的提升。

4 实验结果及性能分析

实验所用环境:惠普笔记本电脑,CPU为Intel Core 2 Duo T6570,2.1GHz,内存2G,windows7 32位操作系统,MongoDB版本为2.4.3。

4.1 数据集

本次实验使用dblp数据集。它提供了主要的计算机科学期刊和会议的文献书目信息,但只存储文献的相关元数据,如标题,作者,发表时间等。截止2013年已包括超过230万计算机文献。

4.2 查询性能

查询性能作为评价系统整体性能优劣的一个重要因素。本实验查询设计采用文献的方案,分别对Q1,Q2,Q3,Q4查询进行实验。其中Q1针对单一属性的查询;Q2做一次subject-subject连接;Q3做两次subject-subject连接;Q4需要做subject-subject和subject-object连接。我们将在上面数据集对Sesame进行性能的对比。本文实验采用Mysql的Sesame数据库方式。

表2是两种方案的查询时间对比。使用面向文档数据库MongoDB的存储方案比Sesame关系数据库的查询速度上有优势。

5 结束语

文中给出了面向文档的NoSQL数据库在RDF存储的基本方案。在与Sesame的关系型数据库存储方式的对比中在性能上更优,尤其是在对Q2,Q4的查询场合。

面向文档的NoSQL数据库MongoDB是支持分布式的非关系型数据库,既支持集群。下一步的工作将对MongoDB在本方案的基础上实现多个节点的集群下性能实验。并与其它NoSQL数据库在集群的情况下的性能比较。最后能将自己的方案整合扩展到Sesame的存储后端,为开源多出自己的一点贡献。

参考文献

[1]易雅鑫,宋自林,尹康银.RDF数据存储模式研究及实现[J].情报科学,2007.

[2]王星,宋金玉,陈爽,陈萍.基于列数据库的RDF数据管理实现[J].计算机技术与发展.2012.

[3]鲍文,李冠宇.本体存储技术研究[J].计算机技术与发展,2008.

[4]MongoDB权威指南[M].程显峰译.北京:人民邮电出版社,2011.

[5]蒋龙翔,王鑫,李旭,冯志勇.一种大规模RDF语义数据的分布式存储方案[J].计算机应用与软件.2011.

作者单位

南京航空航天大学 计算机科学与技术学院 江苏省南京市 210016

上一篇:浅谈电力企业日常技术工作的要点 下一篇:基于叶片高度信息的植物水分监控