文章目录
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图
![image-20220429203551783](https://i-blog.csdnimg.cn/blog_migrate/141c34ac60f28aacac89e1b67a0f624d.png)
![image-20220429203614224](https://i-blog.csdnimg.cn/blog_migrate/c38201c88faf5295e18a2424b403f79b.png)
![image-20220429203637448](https://i-blog.csdnimg.cn/blog_migrate/e705ba66dcebe20a532bbabb95127d3d.png)
查询模型-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查询
![image-20220429204406427](https://i-blog.csdnimg.cn/blog_migrate/12d29b62188543f7921cbcfbf2fa4b80.png)
1.2 现有的关系型数据库系统存储设计
-
将RDF数据存为数据库表,然后将SPARQL语句重写为SQL查询语句
说明:这种最直接的方式,将SPARQL翻译成sql语句,但是很多数据集会翻译成上亿个的三元组,并且翻译成的sql语句涉及到多个join语句
解决方案
1.属性表
- 每个对象类都指向一个不同的表⇒,类似于规范化关系,消除了一些join连接
2 垂直分区表
-
对于每个属性,构建一个两列表,同时包含主语和宾语,按主语排序
-
可以使用归并连接(更快的),适合主语-主语连接,但对主语-宾语连接没有帮助
3 详尽的索引
-
为三列的每个排列创建索引
-
查询组件成为具有合并-连接要合并的单个关系的范围查询
-
其空间使用率过高
![image-20220429205624041](https://i-blog.csdnimg.cn/blog_migrate/ee483e1e4ce5fb4d4c9773cd6acc9cbb.png)
属性表
-
聚类属性表(Clustered Property Table):有些实体并没有严格定义属于哪个类别,可以按照是否具有相同或者相似的谓词将其具类成表
-
属性类表(Property-class Table):根据RDF中的type,将相同type的实体分在同一个属性表,如Person类
![image-20220429205743459](https://i-blog.csdnimg.cn/blog_migrate/30f498ae8e42af53d632916e597e1d13.png)
优点
1、减少join的次数,简化了查询
2、当数据的结构性更强的时候,更适合用这种关系数据库的方法来存储
缺点
1、会产生大量的空值(NULL),即属性表中的每一个实体不一定在每个属性下面都有值
RDF 不像关系表,同一个type的相同属性很多,但是会存在很多属性空值
2、对于多值属性是复杂的,因为如果一个属性的值是多个的,不满足关系表的唯一范式
二列表
按属性分组:对于每个属性,构建一个两列表,有多少种属性就建立多少张表,每张表有两列,一列是主语(subject),一列是宾语(object),并按主语排序,然后从属性中做join连接
![image-20220429210422083](https://i-blog.csdnimg.cn/blog_migrate/72ec62251d1589e1ab10782a157a2fe9.png)
优点
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
![image-20220429214700497](https://i-blog.csdnimg.cn/blog_migrate/6c764e59361eac0268675803974312c5.png)
![image-20220429214718429](https://i-blog.csdnimg.cn/blog_migrate/cb575d9246bbec89b4bdc57a0833d105.png)
优点
1、每一个triple pattern都被一个范围查询所替代
2、triple pattern之间做自然连接时可以做merge join操作
3、Join的顺序是非常容易的因为加入了索引 id+对应的索引
![image-20220429215028097](https://i-blog.csdnimg.cn/blog_migrate/c2594a70c928841da0a8d13323c97be6.png)
缺点
空间消耗比较大,数据更新比较麻烦
基于图的方法
核心思想:基于子图匹配的方法来回答SPARQL的查询
-
我们直接研究RDF子图和SPAQAL查询图
-
回答SPARQL查询=子图匹配
-
子图匹配的计算成本是很高的
-
-
对每个实体和类顶点使用基于签名的编码来加快匹配
-
过滤和评估
- 使用假阳性算法来修剪节点并获得一组候选节点;然后对这些节点进行更详细的评估
-
我们在数据签名图(有较轻的维护负载)上开发了一个索引(VS∗-tree),以便有效地进行修剪
![image-20220429220035073](https://i-blog.csdnimg.cn/blog_migrate/6f2f1aeac7456125fdeaaceb4948ae90.png)
子图匹配的概念:
给一个查询图q和一个比较大的图Q,找到q在Q中所匹配的位置,即存在一对一的方式,得到一个图匹配(Subgraph Isomorphism)
![image-20220429220205444](https://i-blog.csdnimg.cn/blog_migrate/2a7763b8b0c4f8a68ad1dba3e36ba204.png)
子图匹配的方法:树搜索
树搜索的两种方法:深度搜索(DFS)、宽度搜索(BFS)
BFS搜索方法的两种策略
1、基于边的自然连接(Edge-Join):最开始得到每条边的匹配,然后对某两条边做自然连接(Join)
![image-20220429220750273](https://i-blog.csdnimg.cn/blog_migrate/9039b089d804129e9994c5346384e69e.png)
2、基于节点的自然连接(Vertex-Join):最开始得到一个节点的点表,假设在上一步已经得到子图的一部分,得到边表,如果点表有一个点能加到边表的匹配结果中来时,则说明该节点是子图的那一部分的节点的邻居
![image-20220429221022418](https://i-blog.csdnimg.cn/blog_migrate/d85d648b664109166f9f038faac4d979.png)
具体的编码以及过滤评估过程见第三讲 面向知识图谱的数据管理-北京大学邹磊教授_哔哩哔哩_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进行分区和分发数据
![image-20220429233935494](https://i-blog.csdnimg.cn/blog_migrate/c1bdd8974c1d7bcb37dd0cf34335d670.png)
![image-20220429234350169](https://i-blog.csdnimg.cn/blog_migrate/a45560e5a34f8c6716115da5a8476429.png)
![image-20220429235219323](https://i-blog.csdnimg.cn/blog_migrate/ad6ca8a41667dbcc932ac02d750c0423.png)
基于云的方法
![image-20220429234550199](https://i-blog.csdnimg.cn/blog_migrate/4319c70e08911b858e7a7236fd8ae4a9.png)
![image-20220430143210286](https://i-blog.csdnimg.cn/blog_migrate/a758d54c4e1f38cdac0b823f58a830a8.png)
![image-20220430143220141](https://i-blog.csdnimg.cn/blog_migrate/5d8fe722491fb953380fa2bd349bad6d.png)
![image-20220430143631485](https://i-blog.csdnimg.cn/blog_migrate/8878e3a035dc463809e9efab4b67405d.png)
说明:这两个三元组的source完全相同,并且来源只有一个的时候,才能合并子查询
gstore:一个分布式的SPARQL查询引擎
![image-20220430144830280](https://i-blog.csdnimg.cn/blog_migrate/2eea49c1f739a8d274d2608b3413c5cb.png)
分布式的部分评估计算:
![image-20220430145122840](https://i-blog.csdnimg.cn/blog_migrate/35c85a1ebacfdb898e0cd75c7953213b.png)
![image-20220430145823848](https://i-blog.csdnimg.cn/blog_migrate/ec72fba5045561204f4cad02bb024bc9.png)
![image-20220430150107115](https://i-blog.csdnimg.cn/blog_migrate/b4b3a23f38a72813e7ac375f1d0c83b6.png)
分布式系统框架概述
![image-20220430150241629](https://i-blog.csdnimg.cn/blog_migrate/f45eeec0577b210d1e67ef6cdb90638a.png)
![image-20220430150254769](https://i-blog.csdnimg.cn/blog_migrate/1abaaed134f2b1163103798e348b5597.png)
![image-20220430150403967](https://i-blog.csdnimg.cn/blog_migrate/8d5f7548cc65f288dd59bcd402cc9754.png)
![image-20220430150450603](https://i-blog.csdnimg.cn/blog_migrate/2f74c5f290af5b73e1217ba7d41acef4.png)