面向知识图谱的数据管理

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 image-20220429203614224 image-20220429203637448

查询模型-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

image-20220429204318033

SPARQL查询

image-20220429204406427

1.2 现有的关系型数据库系统存储设计

  • 将RDF数据存为数据库表,然后将SPARQL语句重写为SQL查询语句

    image-20220429204959157

说明:这种最直接的方式,将SPARQL翻译成sql语句,但是很多数据集会翻译成上亿个的三元组,并且翻译成的sql语句涉及到多个join语句

解决方案

1.属性表

  • 每个对象类都指向一个不同的表⇒,类似于规范化关系,消除了一些join连接

2 垂直分区表

  • 对于每个属性,构建一个两列表,同时包含主语和宾语,按主语排序

  • 可以使用归并连接(更快的),适合主语-主语连接,但对主语-宾语连接没有帮助

3 详尽的索引

  • 为三列的每个排列创建索引

  • 查询组件成为具有合并-连接要合并的单个关系的范围查询

  • 其空间使用率过高

image-20220429205624041
属性表
  • 聚类属性表(Clustered Property Table):有些实体并没有严格定义属于哪个类别,可以按照是否具有相同或者相似的谓词将其具类成表

  • 属性类表(Property-class Table):根据RDF中的type,将相同type的实体分在同一个属性表,如Person类

image-20220429205743459

image-20220429205800779

优点

1、减少join的次数,简化了查询

2、当数据的结构性更强的时候,更适合用这种关系数据库的方法来存储

缺点

1、会产生大量的空值(NULL),即属性表中的每一个实体不一定在每个属性下面都有值

RDF 不像关系表,同一个type的相同属性很多,但是会存在很多属性空值

2、对于多值属性是复杂的,因为如果一个属性的值是多个的,不满足关系表的唯一范式

二列表

按属性分组:对于每个属性,构建一个两列表,有多少种属性就建立多少张表,每张表有两列,一列是主语(subject),一列是宾语(object),并按主语排序,然后从属性中做join连接

image-20220429210422083

优点

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-20220429214629529

image-20220429214700497 image-20220429214718429

优点

1、每一个triple pattern都被一个范围查询所替代

2、triple pattern之间做自然连接时可以做merge join操作

3、Join的顺序是非常容易的因为加入了索引 id+对应的索引

image-20220429215028097

缺点

空间消耗比较大,数据更新比较麻烦

基于图的方法

核心思想:基于子图匹配的方法来回答SPARQL的查询

  • 我们直接研究RDF子图和SPAQAL查询图

    • 回答SPARQL查询=子图匹配

    • 子图匹配的计算成本是很高的

  • 对每个实体和类顶点使用基于签名的编码来加快匹配

  • 过滤和评估

    • 使用假阳性算法来修剪节点并获得一组候选节点;然后对这些节点进行更详细的评估
  • 我们在数据签名图(有较轻的维护负载)上开发了一个索引(VS∗-tree),以便有效地进行修剪

image-20220429220035073

子图匹配的概念

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

image-20220429220205444

子图匹配的方法:树搜索

树搜索的两种方法:深度搜索(DFS)、宽度搜索(BFS)

BFS搜索方法的两种策略

1、基于边的自然连接(Edge-Join):最开始得到每条边的匹配,然后对某两条边做自然连接(Join)

image-20220429220750273

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

image-20220429221022418

具体的编码以及过滤评估过程见第三讲 面向知识图谱的数据管理-北京大学邹磊教授_哔哩哔哩_bilibili

1.3 分布式系统

RDF数据集越来越大,大量的RDF数据正在增长,超出了在一台机器上运行的RDF数据库系统的能力。

image-20220429221613372

解决方法

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] .

  1. 基于联邦的方法
  • 数据集分布地存储在生产者自己的站点上,其中一些是可以执行SPARQL查询的SPARQL端点;引入了控件站点,为用户提供了一个发出SPARQL查询的公共界面
基于分区的方法

需要根据其方法的具体要求对RDF进行分区和分发数据

image-20220429233935494 image-20220429234350169 image-20220429235219323

基于云的方法

image-20220429234550199 image-20220430143210286 image-20220430143220141 image-20220430143631485

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

gstore:一个分布式的SPARQL查询引擎
image-20220430144830280

分布式的部分评估计算:

image-20220430145122840 image-20220430145823848 image-20220430150107115

分布式系统框架概述

image-20220430150241629 image-20220430150254769 image-20220430150403967 image-20220430150450603

image-20220430150522560

集中式组件概述

image-20220430150714456

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值