文章目录
1.RDF和语义网络
-
RDF(资源描述框架)是一种用于对有关web资源信息进行概念性建模的语言
-
语义网络的构建模块
-
促进信息交换
-
搜索引擎可以检索更多相关的信息
-
促进数据集成(混合)
-
-
机器可理解
- 理解网络上的信息和它们之间的相互关系
1.1 RDF简介
- 任何的东西都是唯一命名的资源
- 命名空间可以限定名称的范围
- 可以定义资源的属性
- 可以定义与其他资源的关系
- 资源可以由不同的人/组提供,并且可以位于语义网中的任何位置
RDF 数据模型
三元组:主语 谓词(属性) 宾语(s,p,o)
主语:被描述的实体(URI或者空白节点)
谓词:实体的特征(URI)
宾语:特征的值(URI,空结点,或文字)
-
(s,p,o)∈(U∪B)×U×(U∪B∪L)
-
RDF三元组的集合被称之为RDF图



查询模型-SPARQL协议和RDF查询语言
给定U(URI集),L(文字集)和V(变量集),递归定义一个SPARQL表达式:
- 一个原子三元组模式,这是一个元素(U∪V)×(U∪V)×(U∪V∪L)I
- ?x hasName “Abraham Lincoln”
- P FILTER R,其中P是一个图模式表达式和R是一个内置的SPARQL条件(例如,类似于SQL谓词)
- ?x price ?p FILTER(?p < 30)
- P1 AND/OPT/UNION P2, where P1 and P2 are graph
SPARQL查询

1.2 现有的关系型数据库系统存储设计
-
将RDF数据存为数据库表,然后将SPARQL语句重写为SQL查询语句
说明:这种最直接的方式,将SPARQL翻译成sql语句,但是很多数据集会翻译成上亿个的三元组,并且翻译成的sql语句涉及到多个join语句
解决方案
1.属性表
- 每个对象类都指向一个不同的表⇒,类似于规范化关系,消除了一些join连接
2 垂直分区表
-
对于每个属性,构建一个两列表,同时包含主语和宾语,按主语排序
-
可以使用归并连接(更快的),适合主语-主语连接,但对主语-宾语连接没有帮助
3 详尽的索引
-
为三列的每个排列创建索引
-
查询组件成为具有合并-连接要合并的单个关系的范围查询
-
其空间使用率过高

属性表
-
聚类属性表(Clustered Property Table):有些实体并没有严格定义属于哪个类别,可以按照是否具有相同或者相似的谓词将其具类成表
-
属性类表(Property-class Table):根据RDF中的type,将相同type的实体分在同一个属性表,如Person类

优点
1、减少join的次数,简化了查询
2、当数据的结构性更强的时候,更适合用这种关系数据库的方法来存储
缺点
1、会产生大量的空值(NULL),即属性表中的每一个实体不一定在每个属性下面都有值
RDF 不像关系表,同一个type的相同属性很多,但是会存在很多属性空值
2、对于多值属性是复杂的,因为如果一个属性的值是多个的,不满足关系表的唯一范式
二列表
按属性分组:对于每个属性,构建一个两列表,有多少种属性就建立多少张表,每张表有两列,一列是主语(subject),一列是宾语(object),并按主语排序,然后从属性中做join连接

优点
1、支持多值属性的表的建立
2、不会存在空值(NULL)
3、对主体与主体(subject-subject)的join连接操作友好
4、没有聚类(clustering)
5、只读取所需要的属性,减少了输入输出操作
缺点
1、对客体与客体(object-object)、主体与客体(subject-object)的join连接是不友好的
2、没有做排序,插入代价比较大
全索引
对SPO三列表中的所有主语(subject)、谓词(property)、宾语(object)的排列组合进行一个排序。使用映射表将字符串映射成一个ID,对ID的所有可能的排列组合进行排序,节省存储空间;三元组按字典序在一个聚类B+树中建立索引。SPO三列表的所有排序为:SPO,SOP,PSO,POS,OPS,OSP


优点
1、每一个triple pattern都被一个范围查询所替代
2、triple pattern之间做自然连接时可以做merge join操作
3、Join的顺序是非常容易的因为加入了索引 id+对应的索引

缺点
空间消耗比较大,数据更新比较麻烦
基于图的方法
核心思想:基于子图匹配的方法来回答SPARQL的查询
-
我们直接研究RDF子图和SPAQAL查询图
-
回答SPARQL查询=子图匹配
-
子图匹配的计算成本是很高的
-
-
对每个实体和类顶点使用基于签名的编码来加快匹配
-
过滤和评估
- 使用假阳性算法来修剪节点并获得一组候选节点;然后对这些节点进行更详细的评估
-
我们在数据签名图(有较轻的维护负载)上开发了一个索引(VS∗-tree),以便有效地进行修剪

子图匹配的概念:
给一个查询图q和一个比较大的图Q,找到q在Q中所匹配的位置,即存在一对一的方式,得到一个图匹配(Subgraph Isomorphism)

子图匹配的方法:树搜索
树搜索的两种方法:深度搜索(DFS)、宽度搜索(BFS)
BFS搜索方法的两种策略
1、基于边的自然连接(Edge-Join):最开始得到每条边的匹配,然后对某两条边做自然连接(Join)

2、基于节点的自然连接(Vertex-Join):最开始得到一个节点的点表,假设在上一步已经得到子图的一部分,得到边表,如果点表有一个点能加到边表的匹配结果中来时,则说明该节点是子图的那一部分的节点的邻居

具体的编码以及过滤评估过程见第三讲 面向知识图谱的数据管理-北京大学邹磊教授_哔哩哔哩_bilibili
1.3 分布式系统
RDF数据集越来越大,大量的RDF数据正在增长,超出了在一台机器上运行的RDF数据库系统的能力。
解决方法
1.基于分区的方法
-
(脱机)将一个RDF图划分为驻留在每个站点中的多个片段
-
(在线)将一个查询图分解成几个子查询,这样每个子查询都可以在一个站点上得到本地回答,然后聚合结果
-
典型系统:GraphPartition
2.基于云的方法
-
在云平台中存储和访问RDF三元组(如HDFS、HBase、spark)
-
典型系统:SHARD [Rohloffff and Schantz, 2010] ,HadoopRDF [Husain et al., 2011] , EAGRE [Zhang et al., 2013] and JenaHBase [Khadilkar et al., 2012] .
- 基于联邦的方法
- 数据集分布地存储在生产者自己的站点上,其中一些是可以执行SPARQL查询的SPARQL端点;引入了控件站点,为用户提供了一个发出SPARQL查询的公共界面
基于分区的方法
需要根据其方法的具体要求对RDF进行分区和分发数据



基于云的方法




说明:这两个三元组的source完全相同,并且来源只有一个的时候,才能合并子查询
gstore:一个分布式的SPARQL查询引擎

分布式的部分评估计算:



分布式系统框架概述



