一种基于spark的大规模知识图谱语义查询方法与流程

文档序号:11323253阅读:1885来源:国知局
一种基于spark的大规模知识图谱语义查询方法与流程

本发明涉及计算机存储查询技术,具体涉及一种基于spark的大规模知识图谱语义查询方法。



背景技术:

随着语义web的快速发展,语义数据量呈现爆炸性增长,大量的以rdf格式的语义数据被学术界与工业界的研究人员所发布。例如google的知识图谱就有超过6亿个实体和200亿条事实(2012年),wikidata项目也包含了超过2000万千万个page,每个page包含大量的三元组事实,yago和dbpedia也包含了超过亿条记录,开放关联数据(linkedopendata,lod)项目更是发布了超过2700个数据源,包含总共超过1300亿的rdf三元组(2016年)。如何在大规模rdf知识图谱上有效地存储查询是众多研究者面临的棘手问题,而这也一直被认为是制约语义web相关技术发展的瓶颈。

sparql查询语言是w3c标准的rdf查询语言,它由多个查询模式组成,每一个查询模式也是一个三元组,包含了若干变量。传统的基于rdf的存储查询引擎通过构建主谓宾的排列索引取得查询性能的提升,但同时这也会耗用大量的存储空间,并且大部分的这些引擎都是基于单机的,可扩展性较差,仅适合于小规模rdf数据的存储查询,面对当前海量的语义数据,存在计算性能和可扩展性不足等问题。已有的少量分布式处理引擎如hadooprdf,虽然借助于分布式平台部分解决了可扩展性问题,但由于sparql查询的迭代执行特点,其性能仍然收到很大约束,不能满足大规模语义数据查询的实时性要求,因此其实用性收到很大制约,迫切需要一个面对海量语义数据的高性能存储查询引擎来改变这种困境。



技术实现要素:

有鉴于此,本发明提供了一种基于spark的大规模知识图谱语义查询方法。相比其他方法,本发明实现了通过构造合适的索引策略和引入分布式内存的迭代查询优化方法取得了性能的提升,具备很强的实用价值,可以对大规模知识图谱进行有效的查询。

一种基于spark的大规模知识图谱语义查询方法,包括以下步骤:

(1)将数据中的每一个实体和关系分配一个单独的id,构建相应的映射表;然后根据映射表将遍历数据集中的每一个三元组中的实体、关系分别替换成为相应的id,形成新三元组;

(2)在spark上,基于类别对象与关系对象构建分层的子图索引,并将该子图索引存储于hdfs文件中;

(3)将sparql查询所涉及到的操作通过spark操作元语进行翻译;

(4)解析sparql查询语句,根据每个三元组模式的特征分配不同的得分函数,确定sparql查询中每个三元组模式的执行顺序;

(5)根据三元组模式的执行顺序、spark操作元语执行sparql查询与链接,返回最后链接结果;

(6)将返回的最后链接结果通过映射表进行解析,将解析后的结果作为查询执行结果。

步骤(1)中,新三元组中的实体与关系都替换成了自己对应的id,这样不仅可以大大减少分布式存储数据量,还可以有效地提高后期分布式查询join的效率。

所述步骤(2)的具体步骤为:

首先,分别为每一个类别对象和关系对象构建一个索引表,得到类别索引表和关系索引表,且该类别索引表和关系索引表组成第一层索引表;

然后,基于类别索引表、关系索引表的链接操作构建类别-关系索引表和关系-类别索引表,并将该类别-关系索引表和关系-类别索引表组成第二层索引表;

接下来,基于类别-关系索引表和关系-类别索引表的链接操作构建类别-关系-类别表,将其作为第三层索引表;

最后,将第一层索引表、第二层索引表以及第三次索引表以文件的形式存储在hdfs分布式文件系统中,文件名和索引表名称一致。

本发明方法扩展了传统的垂直分区方法,构建基于类别对象和关系对象的分层子图索引,可以以较少的索引存储代价保证索引的高效性,保证查询执行的实时性。

步骤(3)中,将sparql查询操作翻译为spark操作元语,这种操作元语包括:transformation元语和action元语;其中,transformation元语包括:

generate元语:生成一个分布式内存对象;

filter元语:根据查询条件过滤相关数据;

prepartition元语:采用预分区的方法存储索引;以及

join元语:将两个分布式内存对象进行连接操作;

在执行sparql查询的时候会用到以上两种元语。

步骤(4)中,所述根据每个三元组模式的特征分配不同的得分函数的分配原则为:

三元组模式仅包含一个变量,得分为5;

三元组模式包含一个变量且主语和谓语的类型确定,得分为4;

三元组模式包含一个变量且主语和谓语的类型不确定,得分为3;

三元组模式包含两个变量,得分为2。

所述步骤(5)的具体步骤为:

(a)启动spark进程,通过generate元语初始化一个分布式内存抽象块;

(b)判断当前未被选择的查询三元组模式池是否为空,若是,执行步骤(e),若否,执行步骤(c);

(c)在当前未被选择的查询三元组模式池中选择当前得分最高的三元组模式,按照三元组模式的类型选择相应的索引表,并执行翻译操作,得出该三元组模式的查询结果,并将该三元组模式标记为已选择;

(d)将当前查询结果和上一次查询结果进行join操作,并跳转执行步骤(b);

(e)将上一次的链接结果作为最后链接结果返回。

步骤(c)中,所述的三元组模式的类型是指sparql查询的类型。

传统的语义存储查询方法都是针对单机的,无法扩展和应用到目前大规模的语义数据中去;而本发明基于spark的分布式语义查询方法利用了分布式内存优势,同时通过设计合理的索引策略可以有效处理大规模的语义数据,具体优势体现如下:

(1)本发明设计了分层的子图索引方法,大大减少了索引的存储大小,同时保证了查询执行的高效性。

(2)本发明采用了一种基于查询模式选择性的策略优化了查询时的执行策略,可以大大降低中间结果的生成量,同时通过分布式内存的迭代连接大大降低了io操作,有效提高了存储查询处理速度。

(3)本发明采用了spark进行sparql查询的解析优化,提出了sparql查询的翻译解析方法,可以利用分布式内存的优势大大加快语义查询的效率。

附图说明

图1是本发明基于spark的大规模知识图谱语义查询方法的流程图;

图2是本发明分布式迭代查询的流程图。

具体实施方式

为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行详细说明。

如图1所示,本实施例基于基于spark的大规模知识图谱语义查询方法包括以下:

s01,将数据集中的每一个三元组中的实体、关系分别替换成为相应的id,形成新三元组。

本步骤具体为:通过标准的rdf存储查询benchmarklubm来生成大规模的语义数据;然后,部署一个预处理器,分配独特的id给所有实体和关系,构建相应的映射表;最后,根据映射表,将遍历数据集中的每一个三元组中的实体、关系替换为相应的id,得到新三元组;本步骤这样做不仅可以大大减少分布式存储数据量,还可以有效地提高后期分布式查询join的效率。

s02,在spark上,基于类别对象与关系对象构建分层的子图索引,并将该子图索引存储于hdfs文件中。

本步骤具体为:

首先,遍历所有的新三元组数据,得到所有的类别和关系,并为每一个类别、关系构建一个索引表,分别称为类别索引表和关系索引表,且该类别索引表和关系索引表组成第一层索引表;表1所示的是以benchmark数据集lubm为例建立的第一层索引表;

表1

然后,基于类别索引表、关系索引表的链接操作构建类别-关系索引表和关系-类别索引表,并将该类别-关系索引表和关系-类别索引表组成第二层索引表,如表2所示;

表2

接下来,基于类别-关系索引表和关系-类别索引表的链接操作构建类别-关系-类别表,将其作为第三层索引表,如表3所示。

表3

最后,将第一层索引表、第二层索引表以及第三次索引表以文件的形式存储在hdfs分布式文件系统中,文件名和索引表名称一致。

s03,将sparql查询所涉及到的操作通过spark操作元语进行翻译。

本步骤中,设计了几个对应的操作元语,包括:generate(生成一个分布式内存对象)、filter(根据查询条件过滤相关数据)、prepartition(采用预分区的方法存储索引)以及join(将两个分布式内存对象进行连接操作)。

s04,解析sparql查询语句,根据每个三元组模式的特征分配不同的得分函数,以确定sparql查询中每个三元组模式的执行顺序。

本步骤中,采用的是基于贪婪算法的查询算法以确定sparql每个查询模式的执行顺序,具体说来,根据每个查询模式的限制性强度来分配不同的得分函数,如果模式的限制性越强,也就是说这个模式对应的查询结果越小,分配越高的得分,以便这些查询能够优先被处理,这将会大大减少中间结果的生成,提高查询效率。

具体的分配原则为:

查询模式仅包含一个变量,得分为5;

查询模式包含一个变量且主语和谓语的类型确定,得分为4;

查询模式包含一个变量且主语和谓语的类型不确定,得分为3;

查询模式包含两个变量,得分为2。

s05,根据三元组模式的执行顺序、spark操作元语执行sparql查询与链接,返回最后链接结果。

s05的过程如图2所示,具体为:

(a)启动spark进程,通过generate元语初始化一个分布式内存抽象块;

(b)判断当前未被选择的查询三元组模式池是否为空,若是,执行步骤(e),若否,执行步骤(c);

(c)在当前未被选择的查询三元组模式池中选择当前得分最高的三元组模式,按照三元组模式的类型选择相应的filter函数,并执行过滤操作,得出该三元组模式的查询结果,并将该三元组模式标记为已选择;

(d)将当前查询结果和上一次查询结果进行join操作,并跳转执行步骤(b);

(e)将上一次的链接结果作为最后链接结果返回。

s06,将返回的最后链接结果通过映射表进行解析,将解析后的结果作为查询执行结果。

以上所述的具体实施方式对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1