本文由北京大学的Lei Zou和Jinghui Mo, 香港科技大学Lei Chen,加拿大滑铁卢大学 M. Tamer Ozsu以及同时隶属于北京大学和中国教育部重点实验室计算语言学的Dongyan Zhao联合发表。
原因:由于RDF数据的使用增多,所以有效处理RDF数据集的SPARQL查询已成为问题。目前的局限性:1、无法以可伸缩的方式用通配符回答SPARQL查询;2、无法有效地处理RDF存储库中的频繁更新。
解决方法:在本文中提出了一种基于图的方法来存储和查询RDF数据。先将RDF数据存储为大图,然后将SPARQL查询转换为相应的子图匹配查询,还引入了其他方法分别加快查询处理速度和维护在线更新。
RDF数据模型对Web对象建模,属于开发语义Web的一部分。RDF数据为SPO(subject, property, object)三元组集合,示例如下:
RDF数据集也可建模为折线图(称为RDFgraph)如图:
为了查询RDF存储库,提出了SPARQL查询。
知识补充
- 带通配符的SPARQL查询:由于不能全面了解查询对象,所以无法指定确切查询条件。尽管有通配符支持SPARQL查询和管理大型RDF数据集技术,但没有一种技术以可伸缩方式使用通配符执行SPARQL查询。
- RDF存储库上的频繁更新:应用程序中,RDF存储库是动态的。
方法:
将RDF数据集建模为标记的、定向的多边图(RDF图),每个顶点对应于一个主题或一个对象。每个三元组表示从主题到对应对象的有向边。给定主题和对象,它们之间可能存在多个属性,即可能存在多条边和RDF图是多边图,所以SPARQL查询可转换为RDF图上的子图匹配查询。
RDF图的特征与现有图数据库文献中考虑的典型图在三个方面不同:1、RDF图的大小(即数字顶点和边的数量)大于典型值图数据库的数量级;2、RDF图的顶点和边标签基数远大于传统图数据库;3、SPARQL查询结合了同一实体的多个属性,所以使用包含星号作为子查询。星型査询是指由一个中心顶点及其相邻顶点构成的星型查询图。
主要方法总结:
1、将RDF数据存储在基于磁盘的邻接表中。
2、通过对每个实体和类顶点进行编码,将RDF图转换为数据签名图。然后,在数据签名图上提出新索引(VS*-tree),同时维护开销少。
3、为数据的子图查询制定过滤规则签名图,无缝地嵌入到查询算法,以统一的方式用通配符回答精确的SPARQL查询和通配符查询。
方法优点在于:
1、统一的方式支持精确的SPARQL查询和通配符查询;
2、索引树的维护开销低;
RDF数据是表示为SPO(subject, property, object),其中subject是实体或类,以及property表示与一个实体或类相关联的一个属性,而 object是一个实体、一个类或一个文字值。根据RDF标准,实体或类由URI(统一资源标识符)表示。RDF数据可建模为RDF图,定义如下:
定义2.3:RDF图G和查询图具有n个顶点{v1,…,vn},具有n个不同顶点{u1,…,un}的G被称为Q的匹配项,当且仅当满足以下条件:
gStore 的特性:
1、gStore以图数据库存储和检索RDF图谱数据;
2、gStore支持W3C定义的SPARQL 1.1标准,包括含有Union,OPTIONAL,FILTER和聚集函数的查询;gStore支持有效的增删改操作;
3、gStore支持十亿三元组规模的RDF图谱的数据管理任务;
总体框架=离线+在线
离线期间:首先用RDF图G表示RDF数据集,并由其邻接表T存储。然后将每个实体和类顶点编码成位串(称为顶点签名)。根据RDF图结构,将顶点签名链接形成数据签名图,每个顶点对应于RDF图中的一个类或实体顶点,G中所有实体和类的顶点以及它们的边端点是实体或类顶点。
在线期间:通过查询图Q表示SPARQL查询,并将其编码到査询签名图Q*。然后,查找Q相对于G的匹配结果得到候选状态(表示为CL)。最后,检查邻接表T验证每个候选对象。
框架需要解决两个问题:
1、编码技术确保没有无假阴性,即RS⊆CL。
2、确保高效子图匹配算法能够在G上找到Q的匹配。
存储方案:基于图的RDF数据存储方案,使用基于磁盘的邻接表存储RDF图G。(具体方法请查看原文)
编码技术:使用与定义2.3相同的编码方法对查询Q进行编码,通过简单地检查可验证Q和G对应编码之间的匹配位串。
定义4.2、4.3、4.4分别阐述了顶点签名如何形成、数据签名图的组成及何为顶点的标签、数据签名图G和查询签名图Q的匹配条件
索引结构:采用自下而上的策略构建VS树。
1、在G中的所有顶点签名上构建一个VS树,即VS树的每个叶条目对应于G中的一个顶点签名,再根据G的结构连接叶条目。
2、给定S树中的两个叶节点,再引入了两者的超边,(中间详细过程省略)重复上述过程,直到VS树的根。
一个自下而上构建VS-tree的运行如下图。
查询算法:采用自上而下的搜索策略,在VS-tree找到Q在G∗上的匹配项。概要就是先找到需要的简要匹配,然后将汇总匹配推入队列,再从队列中取出一个汇总匹配,并将其扩展到其子状态。对于每个子状态,检査是否是签名图的简要匹配。如果是,则称它为有效的子状态。将所有有效的子状态推入队列。迭代地弹出一些摘要匹配,并在每个步骤中将其扩展到其子状态。重复上述过程,直到到达叶中的顶点,伪代码如下。
余下内容就是VS-tree和VS查询算法的三个局限性及其优化方法和相关实验验证,需要者请自行阅读论文学习不再赘述。