买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种基于Spark Streaming的流式RDF数据多关键词并行搜索方法_福州大学_201810227329.X 

申请/专利权人:福州大学

申请日:2018-03-20

公开(公告)日:2021-11-02

公开(公告)号:CN108509543B

主分类号:G06F16/27(20190101)

分类号:G06F16/27(20190101);G06F16/28(20190101);G06F16/2458(20190101);G06F16/2453(20190101);G06F40/30(20200101)

优先权:

专利状态码:有效-授权

法律状态:2021.11.02#授权;2018.10.09#实质审查的生效;2018.09.07#公开

摘要:本发明涉及一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,首先将输入的关键词映射到RDF本体图上的类顶点或属性边,构建RDF本体类‑属性二维模型,通过类之间的关系进行剪枝、去重、连接操作,构建对应的本体查询子图;提出一种相关性评价函数,从结构紧密度和内容关联度两个方面对本体查询子图评分、排序;根据本体查询子图的优先级,评分高的先进行搜索,利用MapReduce计算框架并行搜索RDF数据图上匹配的实例三元组,按本体查询子图连接关系进行连接得到前Top‑k的结果。本发明不仅避免了在大量数据图顶点上迭代搜索顶点间连接路径,还提高了查询的精确度,进而提高搜索效率。

主权项:1.一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,其特征在于包括以下步骤:步骤S1:根据基于Redis的分布式存储方案,将用户输入的关键词映射到RDF本体图上的类顶点或属性边,构建RDF本体类-属性二维模型,通过类之间的关系进行剪枝、去重、连接操作,构建对应的本体查询子图;步骤S2:构建相关性评价函数,从结构紧密度和内容关联度两个方面对本体查询子图评分、排序;步骤S3:根据本体查询子图的优先级,按照评分高至低的顺序依次利用MapReduce计算框架并行搜索当前本体查询子图上匹配的实例三元组,并按当前本体查询子图的连接关系进行连接得到当前结果子图,直至得到前Top-k个结果子图;步骤S4:将步骤S3得到的Top-k的结果子图进行编码反转得到原始数据,并返还给用户;步骤S1中,所述基于Redis的分布式存储方案具体为:采用Redis内存数据库集群作为数据存储的媒介,将RDF本体信息和大规模的RDF实例数据进行预处理,分门别类地存储在Redis内存数据库集群的Set集合中;所述数据预处理包括采用哈希算法对数据进行哈希编码压缩;所述Redis内存数据库集群中包括本体存储数据、实例存储数据、哈希映射关系、以及历史数据,其各自的存储方案如下:所述本体存储数据的存储方案为:在表Rdf_ontology中存储RDF本体类信息,以键值对的形式存储,其中键为类名,值为类的编号;在表SubPropertyOf中存储属性及其父属性的信息,以键值对的形式存储,其中键为属性,值为属性的父属性;在表SubClassOf中存储类及其父类的信息,以键值对的形式存储,其中键为类名,值为该类的父类;在表C_C_Property中存储属性以及属性连接的类对,其中键为属性,值为属性对应的类对构成的集合;在表Subject_Class中存储主语为同一类的模式三元组集合,其中键为主语所属的类的名称,值为属性和宾语所属类的组合;在表Object_Class中存储宾语为同一类的模式三元组集合,其中键为宾语所属的类的名称,值为属性和主语所属类的组合;所述实例存储数据的存储方案为:在表Literal_Triple中存储标签对应的数据属性和实例的集合,以键值对的形式存储,其中键为标签,值为数据属性和实例;在表Instance_Class中存储实例与实例所属类的映射关系,以键值对的形式存储,其中键为实例,值为实例对应的类;在表SC_OP_OC中存储包含对象属性的模式三元组对应的实例三元组,以键值对的形式存储,其中键为实例三元组的主语,值为实例三元组的宾语;在表OC_OP_SC中存储表SC_OP_OC的反转备份,以键值对的形式存储,其中键为实例三元组的宾语,值为实例三元组的主语;所述历史数据的存储方案为:在表His_Class_Graph中存储历史记录中搜索过的查询子图,其中键为Rdf_Ontology表中下标,下标按降序连接,值为本体查询子图;所述哈希映射关系的存储方案为:表Prefix_Hash中存储Hash的形式存储前缀及其哈希值的信息,以键值对的形式存储,其中键为前缀,值为哈希值;在表Hash_Prefix中存储Hash的形式存储Prefix_Hash的反转备份,以键值对的形式存储,其中键为哈希值,值为前缀;在表Conflict中存储Set形式存储发生冲突的前缀,其中值为冲突的前缀字符串;步骤S1中构建对应的本体查询子图具体包括以下步骤:步骤S11:构建关联类图:对于用户输入的每一个关键词,首先根据表C_C_Property判断该关键词是否映射为属性,若为属性,则存储至属性集合中;如不为属性,则通过Rdf_Ontology、C_C_Property、Instance_Class、Literal_Triple四表确定该关键词映射的本体实例类,并将其存储到类的集合中;根据该关键词所属的类,将与其相关联的类连接起来,得到该类对应的关联类图,并将其放入关联类图的集合中;步骤S12:将关联类图的集合、属性集合、以及类的集合作为本体查询子图的输入,依次通过剪枝和融合两个过程生成本体查询子图。

全文数据:一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法技术领域[0001]本发明涉及海量RDF数据流式检索技术领域,特别是一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法。背景技术[0002]随着大数据的到来,Hadoop等分布式处理平台在进行批量处理的时候具有明显的优势,但是面对流式数据的实时处理却表现出了许多不足,流式数据实时处理平台的出现弥补了分布式批量处理平台在实时处理方面的不足。流式数据实时搜索成为当前一个新的研究热点。互联网上产生各种各样的流式数据,由于数据的异构性,RDF被广泛用于在数据流中提供统一的元数据表示,RDF动态数据流在语义网络社区中引起了相当大的兴趣。为了响应这种不断增长的需求,不少学者研究并提出自己的RDF流式处理架构,其中比较著名的是D.F.Barbieri等提出了C-SPARQL和D.LeP等提出了CQELS,类似SPARQL的查询语言和操作语义,通过在数据流管理系统中定义窗口化技术来实现连续查询。BorthakurD等人基于Hadoop和Hbase提出了一种流式数据的实时搜索算法。另有文献将数据实时写入Nosql数据库中,并且利用三级缓存策略实现了一种流式数据的搜索方法。另有文献结合多级缓存机制提出了一种多源数据缓存的写入方法,该方法具有较高的实时性。蒋晨晨等人基于Storm提出了一种新的实时搜索框架,并且重新设计了分组算子、过滤算子等功能,解决了传统流式查询系统不能满足用户实时查询的不足。然而上述的研究都是针对形式化查询语句的,关于流式数据关键词实时搜索的研究少之又少,研究流式数据的关键词实时搜索方案具有非凡的意义。[0003]RDF关键字搜索的主要目标是如何匹配RDF数据以获得与用户输入关键字相关联的结果。由于普通用户对RDF数据的结构和内容不一定了解,并且不同的用户对同一事物的描述可能存在差异,这就导致了在RDF数据搜索的过程中可能返回空或者少量的结果,而关键字搜索是一种从RDF数据图中检索信息的有效方法,用户无需熟悉任何标准的查询语言结构和底层数据模式,就可以快速高效地检索数据。同时,通过分布式并行方法解决海量RDF数据查询的问题,这已成为学术界和工业界的普遍共识。对于大规模RDF数据的批量搜索,以HDFS和MapReduce为核心的Hadoop在理论上和实践中均取得了显著的成功。但是在实时大数据方面,Hadoop却显得无能为力,存在一定的局限性。为了应对流式大数据实时性、多变性、无限性,推出并应用了越来越多的流式处理系统,其中较为典型的是Storm流式处理框架和构建在Spark上处理Stream数据的SparkStreaming框架。因此,如何研究和实现大规模流式RDF数据的实时多关键字搜索算法成为了一个非常有意义的研究课题。发明内容[0004]有鉴于此,本发明的目的是提出一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,不仅避免了在大量数据图顶点上迭代搜索顶点间连接路径,还提高了查询的精确度,进而提高搜索效率。[0005]本发明采用以下方案实现:一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,包括以下步骤:[0006]步骤SI:根据基于Redis的分布式存储方案,将用户输入的关键词映射到RDF本体图上的类顶点或属性边,构建RDF本体类-属性二维模型,通过类之间的关系进行剪枝、去重、连接操作,构建对应的本体查询子图;[0007]步骤S2:构建相关性评价函数,从结构紧密度和内容关联度两个方面对本体查询子图评分、排序;[0008]步骤S3:根据本体查询子图的优先级,按照评分高至低的顺序依次利用MapReduce计算框架并行搜索当前本体查询子图上匹配的实例三元组,并按当前本体查询子图的连接关系进行连接得到当前结果子图,直至得到前Top-k个结果子图;[0009]步骤S4:将步骤S3得到的Top-k的结果子图进行编码反转得到原始数据,并返还给用户。[0010]本发明采用上述算法可以避免在大量数据图顶点上迭代搜索顶点间连接路径,提高了查询的精确度,进而提高了搜索效率。[0011]进一步地,步骤Sl中,所述基于Redis的分布式存储方案具体为:采用Redis内存数据库集群作为数据存储的媒介,将RDF本体信息和大规模的RDF实例数据进行预处理,分门别类地存储在Redis内存数据库集群的Set集合中;所述数据预处理包括采用哈希算法对数据进行哈希编码压缩;[0012]所述Redis内存数据库集群中包括本体存储数据、实例存储数据、哈希映射关系、以及历史数据,其各自的存储方案如下:[0013]所述本体存储数据的存储方案为:在表Rdf_ont〇logy中存储RDF本体类信息,以键值对的形式存储,其中键为类名,值为类的编号;在表SubPropertyOf中存储属性及其父属性的信息,以键值对的形式存储,其中键为属性,值为属性的父属性;在表SubClassOf中存储类及其父类的信息,以键值对的形式存储,其中键为类名,值为该类的父类;在表C_C_Property中存储属性以及属性连接的类对,其中键为属性,值为属性对应的类对构成的集合;在表Subject_Class中存储主语为同一类的模式三元组集合,其中键为主语所属的类的名称,值为属性和宾语所属类的组合;在表〇bject_Class中存储宾语为同一类的模式三元组集合,其中键为宾语所属的类的名称,值为属性和主语所属类的组合;[0014]所述实例存储数据的存储方案为:在表Literal_Triple中存储标签对应的数据属性和实例的集合,以键值对的形式存储,其中键为标签,值为数据属性和实例;在表InstanCe_ClasS中存储实例与实例所属类的映射关系,以键值对的形式存储,其中键为实例,值为实例对应的类;在表SC_0P_0C中存储包含对象属性的模式三元组对应的实例三元组,以键值对的形式存储,其中键为实例三元组的主语,值为实例三元组的宾语;在表〇C_0P_SC中存储表SC_0P_0C的反转备份,以键值对的形式存储,其中键为实例三元组的宾语,值为实例三元组的主语;[00Ί5]所述历史数据的存储方案为:在表His_Class_Graph中存储历史记录中搜索过的查询子图,其中键为Rdf_0ntology表中下标,下标按降序连接,值为本体查询子图;[0016]所述哈希映射关系的存储方案为:表PrefixJlash中存储Hash的形式存储前缀及其哈希值的信息,以键值对的形式存储,其中键为前缀,值为哈希值;在表Hash_PrefiX中存储Hash的形式存储PrefixJlash的反转备份,以键值对的形式存储,其中键为哈希值,值为前缀;在表ConfIict中存储Set形式存储发生冲突的前缀,其中值为冲突的前缀字符串。[0017]RDF本体表Rdf_0ntoIogy存储RDF本体类信息,存储到List列表中。SubPropertyOf表存储本体中的属性及其父属性的信息,以键值对的形式存储,其中键key为属性,值value为属性对应的所有父属性;C_C_Property表存储本体中的属性连接的一系列类对;Subject_ClaSS存储类及其父类的信息,以键值对的形式存储,其中键(key为类名,值value为类对应的所有父类。在已知关键词对应的实例类或关联属性时,从本体表中获取与查询关键词具有语义关联的类或属性,用以快速构建本体查询子图集。RDF本体信息是RDF数据图的浓缩摘要图,数据规模是很小的,通常是确定且极少变化的,只需解析一次,就可以直接复用解析完的结果。Instance_Class和1^〖6抑1_1'1^口16两张表,记录实例或文本与类或属性之间的对应关系,已知查询关键词通过key-value的方式直接获取该关键词对应的实例类或关联属性。考虑到流式数据的动态性,对搜索过的本体查询子图其实是可以记录下来的,因此在前述的存储方案的基础之上,增加了对历史数据的存储。为解决数据量占用内存过大的问题,采用了哈希压缩方法。[0018]进一步地,步骤Sl中构建对应的本体查询子图具体包括以下步骤:[0019]步骤Sll:构建关联类图:对于用户输入的每一个关键词,首先根据表C_C_Property判断该关键词是否映射为属性,若为属性,则存储至属性集合中;如不为属性,则通过Rdf_0ntology、C_C_Property、Instance_Class、Literal_Triple四表确定该关键词映射的本体实例类,并将其存储到类的集合中;根据该关键词所属的类,将与其相关联的类连接起来,得到该类对应的关联类图,并将其放入关联类图的集合中;[0020]步骤S12:将关联类图的集合、属性集合、以及类的集合作为本体查询子图的输入,依次通过剪枝和融合两个过程生成本体查询子图。[0021]由于Redis采用的key-value的存储形式,在查询的时间复杂度是01,所以对于每个关键词均可以快速定位到其匹配的类,同时考虑一个关键词可能会映射到多个类,多个关键词匹配到的类会有重复的现象,那么需要去除重复的本体实例类。[0022]进一步地,所述步骤S2中的相关性评价函数为:[0024]Ien®sk为结构紧密度评分,pageRanksGsk为内容关联度评分,·’其中,Gsk为一个本体查询子图,disCl.Cj为表示两个实例类节点cdPu在本体查询子图上的距离,α为调节参数。[0025]进一步地,所述步骤S4中,将步骤S3得到的Top-k的结果子图进行编码反转得到原始数据具体包括以下步骤:[0026]步骤S41:获取Top-k结果子图中包含的不同哈希值;[0027]步骤S42:从表Hash_Prefix中获取每个哈希值对应的前缀字符串;[0028]步骤S43:将Top-k结果子图中所有哈希值格式的前缀替换成对应的步骤S42中的字符串格式的前缀;[0029]步骤S44:输出编码反转后的Top-k结果子图集。[0030]在得到Top-k结果子图之后,由于Top-k结果子图是哈希编码压缩的形式,对得到的Top-k结果子图进行编码反转得到原始数据,返回给用户。MPSASR算法中数据哈希编码压缩HashBolt阶段是一个无损的压缩过程,编码反转ResultReverse阶段能够很容易地进行哈希值的反转操作。编码反转GtesultReverse阶段实时接收传输过来的Top-k结果子图,并且借助SparkStream流式处理框架实时对Top-k结果子图中哈希值格式的前缀进行编码反转,将其转换成字符串格式的前缀,由于在数据哈希编码压缩HashBolt阶段没有对冲突前缀进行哈希编码压缩,而是保持字符串的格式不变,因此Top-k结果子图中的冲突前缀本身就是字符串格式的,不用对其进行编码反转操作。同时,哈希映射信息中存储了前缀字符串及其对应哈希值的相关信息,结合哈希映射信息可以快速完整地将编码压缩后的数据恢复到原始的数据。[0031]进一步地,所述步骤S3中的利用MapReduce计算框架并行搜索当前本体查询子图上匹配的实例三元组,并按当前本体查询子图的连接关系进行连接得到当前结果子图具体包括以下步骤:[0032]步骤S31:Map阶段:针对当前构建好的本体查询子图中的每个模式三元组,并行搜索表SC_0P_0C或表0C_0P_SC中与该模式三元组匹配的实例三元组,并将得到的实例三元组传给步骤S32的Reduce阶段;[0033]步骤S32:Reduce阶段:接收步骤S31的Map阶段传送来的实例三元组,根据本体查询子图中已有的连接关系对该实例三元组进行连接,得到当前结果子图。[0034]与现有技术相比,本发明有以下有益效果:[0035]1、本发明减少了搜索过程中读取数据和搜索结果的时间,提高了搜索效率。[0036]2、本发明通过哈希压缩方法减少了海量数据的存储空间,支持流式数据的存储。[0037]3、本发明减少了MapReduce的任务数,结合Spark迭代搜索本体查询子图。[0038]4、本发明的设计完全基于内存的搜索方案,实现高效的实时查询。附图说明[0039]图1为本发明方法流程示意图。具体实施方式[0040]下面结合附图及实施例对本发明做进一步说明。[0041]如图1所示,本实施例提供了一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,包括以下步骤:[0042]步骤SI:根据基于Redis的分布式存储方案,将用户输入的关键词映射到RDF本体图上的类顶点或属性边,构建RDF本体类-属性二维模型,通过类之间的关系进行剪枝、去重、连接操作,构建对应的本体查询子图;[0043]步骤S2:构建相关性评价函数,从结构紧密度和内容关联度两个方面对本体查询子图评分、排序;[0044]步骤S3:根据本体查询子图的优先级,按照评分高至低的顺序依次利用MapReduce计算框架并行搜索当前本体查询子图上匹配的实例三元组,并按当前本体查询子图的连接关系进行连接得到当前结果子图,直至得到前Top-k个结果子图;[0045]步骤S4:将步骤S3得到的Top-k的结果子图进行编码反转得到原始数据,并返还给用户。[0046]本发明采用上述算法可以避免在大量数据图顶点上迭代搜索顶点间连接路径,提高了查询的精确度,进而提高了搜索效率。[0047]为了更好地对本实施例进行说明,设给定关键词查询Q={qi,q2,...,qi,...,qrn},RDF数据图G,返回Top-k查询结果。以下给出本实施例中RDF关键词搜索的相关定义。[0048]定义1:RDF三元组。设RDF三元组可表示为t〈s,p,〇,其中S表示t的主语,P表示t的谓语,〇表示t的宾语。seIB,peIB,〇eIBL,1是URI顶点的集合,B是空白顶点集合,L是文本顶点集合。[0049]定义2:^^图。设6={^山,...山,...,^}表示1«^图。一个^^图可由一组^^三元组定义。一个RDF图表示为一个有向标记图,每个三元组ti的主语Si和宾语〇i作为RDF图顶点,谓语Pl是由主语指向宾语的一条有向标记边。[0050]定义3:关联类图,记GS1。设GS1=IT1,T2...Tn}表示关联类图,在给定的一关键词所属的类Ci,将与其相关联的类连接起来,即将Ti加入到GSi集合中,其中Si=Ci或者Oi=Ci〇[0051]定义4:类图剪枝。多个关键词构建成多个GS,在所有的GS中,仅出现一次的模式三元组〈SbPbOi〉就是松散挂起的节点,将其删除不会对本发明的查询结果图产生影响。[0052]定义5:类图融合去重。多个关键词构建成多个GS,在所有的GS中,出现多次模式三元组SS1J1,0i则为关系紧密的节点,去掉重复的三元组,保留一份,形成新的图关联类图。[0053]定义6:本体查询子图。多个GS进行融合后,进行三元组连接操作,形成本体查询子图集Gsk。[0054]定义7:三元组连接。在构建本体查询子图或者结果子图的时候,对于匹配的模式三元组或者实例三元组要进行三元组连接操作,其中任意两个三元组通过主语、宾语或者其他三元组连接起来。三元组连接的形式化表示:对于模式三元组或者实例三元组集合Set=IT1,T2,···,Ti,···,TJ,给定TiSi,Pi,Oi和TjSj,Pj,0」),其中,如果Si=Sj#0j或者或者,则称Ti与Tj相邻,可以进行三元组连接。[0055]定义8:查询结果,记为R。已知RDF数据图G和关键词查询Q,查询结果是一组包含所有查询关键词的三元组构成的连通子图,其中任意两个三元组通过主语、宾语或者其他三元组连接起来。设R={tl,t2,...,tk,...,tr},其中i,和tj,则有。两个三元组集合中元素不完全相同,则认为是不同的查询结果。[0056]定义9:BKDRHash算法:是一种简单有效的字符串哈希算法,能够将任意长度的字符串通过散列计算,变换成固定长度的整形数值,该值称为散列值,即哈希值。该算法得到的哈希值占用的存储空间比对应的字符串小,虽然不同的字符串散列计算后得到哈希值有可能相同,但是这种冲突发生的概率很低,字符串散列计算所耗费的时间很短,并且要得到哈希值为同一个数值的多个不同字符串在计算上是不可能的,因此可以利用该算法的哈希值来检验数据的完整性。[0057]在本实施例中,步骤Sl中,所述基于Redis的分布式存储方案具体为:采用Redis内存数据库集群作为数据存储的媒介,将RDF本体信息和大规模的RDF实例数据进行预处理,分门别类地存储在Redis内存数据库集群的Set集合中;所述数据预处理包括采用哈希算法对数据进行哈希编码压缩;[0058]所述Redis内存数据库集群中包括本体存储数据、实例存储数据、哈希映射关系、以及历史数据,其各自的存储方案如下:[0059]所述本体存储数据的存储方案为:在表Rdf_ont〇logy中存储RDF本体类信息,以键值对的形式存储,其中键为类名,值为类的编号;在表SubPropertyOf中存储属性及其父属性的信息,以键值对的形式存储,其中键为属性,值为属性的父属性;在表SubClassOf中存储类及其父类的信息,以键值对的形式存储,其中键为类名,值为该类的父类;在表C_C_Property中存储属性以及属性连接的类对,其中键为属性,值为属性对应的类对构成的集合;在表Subject_Class中存储主语为同一类的模式三元组集合,其中键为主语所属的类的名称,值为属性和宾语所属类的组合;在表〇bject_Class中存储宾语为同一类的模式三元组集合,其中键为宾语所属的类的名称,值为属性和主语所属类的组合;[0060]所述实例存储数据的存储方案为:在表Literal_Triple中存储标签对应的数据属性和实例的集合,以键值对的形式存储,其中键为标签,值为数据属性和实例;在表InstanCe_ClasS中存储实例与实例所属类的映射关系,以键值对的形式存储,其中键为实例,值为实例对应的类;在表SC_0P_0C中存储包含对象属性的模式三元组对应的实例三元组,以键值对的形式存储,其中键为实例三元组的主语,值为实例三元组的宾语;在表〇C_0P_SC中存储表SC_0P_0C的反转备份,以键值对的形式存储,其中键为实例三元组的宾语,值为实例三元组的主语;[0061]所述历史数据的存储方案为:在表His_Class_Graph中存储历史记录中搜索过的查询子图,其中键为Rdf_0ntology表中下标,下标按降序连接,值为本体查询子图;[0062]所述哈希映射关系的存储方案为:表PrefixJlash中存储Hash的形式存储前缀及其哈希值的信息,以键值对的形式存储,其中键为前缀,值为哈希值;在表Hash_PrefiX中存储Hash的形式存储PrefixJlash的反转备份,以键值对的形式存储,其中键为哈希值,值为前缀;在表ConfIict中存储Set形式存储发生冲突的前缀,其中值为冲突的前缀字符串。[0063]MPSASR算法利用Redis内存数据库集群作为数据存储的媒介,集群中Redis内存数据库的个数可以根据需求动态增减。由于Redis中对Set集合的添加、删除和查找的复杂度都是〇1,本实施例将RDF本体信息和大规模的RDF实例数据进行预处理,分门别类地存储在Redis内存数据库集群的Set集合中。具体的存储方案如表1所示。[0064]表1存储方案[0067]表2实例数据的存储方案[0069]表3历史数据的存储方案[0072]表4哈希映射信息的存储方案[0074]RDF本体表Rdf_0ntology存储RDF本体类信息,存储到List列表中。SubPropertyOf表存储本体中的属性及其父属性的信息,以键值对的形式存储,其中键key为属性,值value为属性对应的所有父属性;C_C_Property表存储本体中的属性连接的一系列类对;Subject_ClaSS存储类及其父类的信息,以键值对的形式存储,其中键(key为类名,值value为类对应的所有父类。在已知关键词对应的实例类或关联属性时,从本体表中获取与查询关键词具有语义关联的类或属性,用以快速构建本体查询子图集。RDF本体信息是RDF数据图的浓缩摘要图,数据规模是很小的,通常是确定且极少变化的,只需解析一次,就可以直接复用解析完的结果。[0075]Instance_Class和Literal_Triple两张表,记录实例或文本与类或属性之间的对应关系,已知查询关键词通过key-value的方式直接获取该关键词对应的实例类或关联属性。具体Redis数据库设计及存储内容说明如表1、表2所示。考虑到流式数据的动态性,对搜索过的本体查询子图其实是可以记录下来的,因此在前述存储方案的基础之上,增加了对历史数据的存储,如表3所示。为解决数据量占用内存过大的问题,采用了哈希压缩方法,与之对应的哈希映射信息表存储如表4所示。[0076]在本实施例中,步骤Sl中构建对应的本体查询子图具体包括以下步骤:[0077]步骤Sll:构建关联类图:关联类图是构建本体查询子图的基础,针对于每个关键词,其对应的类均可以生成自己的关联类图。用户输入的多个关键词,可能是类、属性、实例或文本。对于用户输入的每一个关键词,首先根据表C_C_Property判断该关键词是否映射为属性,若为属性,则存储至属性集合中;如不为属性,则通过Rdf_0ntoIogy、C_C_Property、Instance_Class、Literal_Triple四表确定该关键词映射的本体实例类,并将其存储到类的集合中;根据该关键词所属的类,将与其相关联的类连接起来,得到该类对应的关联类图,并将其放入关联类图的集合中;[0078]步骤S12:将关联类图的集合、属性集合、以及类的集合作为本体查询子图的输入,依次通过剪枝和融合两个过程生成本体查询子图。[0079]对于一个类生成的关联类图包含的模式三元组会很多,因为里面会掺杂着多余的模式三元组,为了去掉不会对查询结果起作用的边,所以要对关联类图进行剪枝操作。根据定义4,在关联类图中,如果一条路径中s、p、o只有一个可以映射为查询关键词对应的类或属性,可以认为该路径不会对查询结果起作用,就可以将其剪枝,最终得到剪枝后的关联类图GSSet。[0080]融合的目的就是为了将剪枝后的关联类图连接起来。属于父子关系的关联类图应该分开,与其他关联类图做融合。在一个需要融合的关联类图集中,迭代判断两个关联类图是否存在公共边,根据公共边将两个关联类图融合成一个关联类图,以此得到一个或多个最终关联类图。融合过程的输入是经过剪枝后的GSSet。[0081]由于Redis采用的key-value的存储形式,在查询的时间复杂度是01,所以对于每个关键词均可以快速定位到其匹配的类,同时考虑一个关键词可能会映射到多个类,多个关键词匹配到的类会有重复的现象,那么需要去除重复的本体实例类。给定任意一个类,通过定义3进行关联都可以生成该类对应的关联类图。[0082]在本实施例中,所述步骤S2中的相关性评价函数为:输入查询Q={qi,q2,...,qi,...,qm},对应RDF本体实例类C={C1,C2,...,Ci,...,cm},假定Q对应的一个本体查询子图Gsk={gl,g2,——gn},其中gkec。:[0083]SEGsk=a*lenGsk+l-α*pageRanksGsk;[0084]IenGsk为结构紧密度评分pageRanksGsk为内容关联度评分^其中,Gsk为一个本体查询子图,disCl.Cj为表示两个实例类节点cdPu在本体查询子图上的距离,α为调节参数。在本实施例中,α=〇.5表示两者的影响程度一样。disCl,Cj表示实例类节点^和Cj在本体查询子图上距离,若实例类Ci和Cj不可达,距离为disCi,Cj=+°°lengthGsk等于本体查询子图上两两实例类顶点间距离求和,求和距离越短,则1LengthGsk值越大说明内容联系越紧密。PageRank算法是Google提出的一种评价网页等级权重)的一种计算模型,本实施例引用PageRank算法来计算本体查询子图中各个类节点的权重,以评估本体查询子图的内容相关性,pageRanksGsk表示本体查询子图上各个类的pageRank值之和,当pageRanksGsk值越大的时候,说明Gsk的内容相关性越高。RDF数据图上的一个RDF实例顶点可映射到RDF本体图上的一个实例类,在RDF数据图上关系越紧密的实例顶点对应的本体实例类间的关系也越紧密。结果评分值越高。[0085]在本实施例中,所述步骤S4中,将步骤S3得到的Top-k的结果子图进行编码反转得到原始数据具体包括以下步骤:[0086]步骤S41:获取Top-k结果子图中包含的不同哈希值;[0087]步骤S42:从表Hash_Prefix中获取每个哈希值对应的前缀字符串;[0088]步骤S43:将Top-k结果子图中所有哈希值格式的前缀替换成对应的步骤S42中的字符串格式的前缀;[0089]步骤S44:输出编码反转后的Top-k结果子图集。[0090]在得到Top-k结果子图之后,由于Top-k结果子图是哈希编码压缩的形式,对得到的Top-k结果子图进行编码反转得到原始数据,返回给用户。MPSASR算法中数据哈希编码压缩HashBolt阶段是一个无损的压缩过程,编码反转ResultReverse阶段能够很容易地进行哈希值的反转操作。编码反转GtesultReverse阶段实时接收传输过来的Top-k结果子图,并且借助SparkStream流式处理框架实时对Top-k结果子图中哈希值格式的前缀进行编码反转,将其转换成字符串格式的前缀,由于在数据哈希编码压缩HashBolt阶段没有对冲突前缀进行哈希编码压缩,而是保持字符串的格式不变,因此Top-k结果子图中的冲突前缀本身就是字符串格式的,不用对其进行编码反转操作。同时,哈希映射信息中存储了前缀字符串及其对应哈希值的相关信息,结合哈希映射信息可以快速完整地将编码压缩后的数据恢复到原始的数据。[0091]在本实施例中,所述步骤S3中的利用MapReduce计算框架并行搜索当前本体查询子图上匹配的实例三元组,并按当前本体查询子图的连接关系进行连接得到当前结果子图具体包括以下步骤:[0092]步骤S31:Map阶段:针对当前构建好的本体查询子图中的每个模式三元组,并行搜索表SC_0P_0C或表0C_0P_SC中与该模式三元组匹配的实例三元组,并将得到的实例三元组传给步骤S32的Reduce阶段;[0093]步骤S32:Reduce阶段:接收步骤S31的Map阶段传送来的实例三元组,根据本体查询子图中已有的连接关系对该实例三元组进行连接,得到当前结果子图。[0094]特别的,在本实施例中,由于MPSASR算法的数据是实时流入的,在处理的时候对不同的数据流需要做不同的处理,SparkStreaming框架的批处理引擎SparkCore将数据流处理为许多短小的批处理数据,也就是SparkSteaming对数据流按照batchsize如2秒分成离散流数据DStream,每一段数据都会转变为Spark中的弹性分布式数据集RDD,将经过RDD处理后的数据存储至Redis分布式数据库中。具体存储结构如上文的存储方案中所述。[0095]通过分析RDF数据文件结构的特点,可以发现RDF数集中很多的类和属性、实例和文本都存在相同的前缀。Redis内存数据库对整形数值做了大量的内存优化,为了减少RDF数据的存储空间并且充分利用Redis对整形数值的优化功能,这里通过使用定义9中的BKDRHash算法对共同的前缀进行散列计算并转换为整形数值,该哈希算法可以保证数据均衡地散列在哈希列表中,并且发生冲突的概率非常低,同时拥有高效的散列速度。通过对数据进行哈希编码压缩不仅可以对RDF数据的前缀进行编码压缩,缩短前缀的长度进而减少内存空间的消耗,而且还能进一步提高RDF数据搜索匹配的速度。为了保证哈希编码压缩执行的效率,本实施例使用SparkStreaming流式处理框架对RDF数据进行实时哈希编码压缩,将大规模的RDF数据以数据流的形式批量流入SparkCore模块中,并且数据流以5X104个三元组s的平均速度从数据预处理JenaSpout阶段流到数据哈希编码压缩HashBolt阶段。数据哈希映射信息的存储方案如表4,数据哈希编码压缩的具体过程如下:[0096]Stepl:获取RDF三元组或关键词集合)中包含的不同前缀;[0097]Step2:遍历获取到的前缀,查看Conflict中是否存在当前访问的前缀,如果存在,则该前缀为冲突前缀,不对该前缀进行哈希编码,保持字符串的格式不变,跳到Step7,否则跳到Step3;[0098]Step3:查看表Prefix_Hash中是否存在以当前访问的前缀为key的记录,如果存在,则跳到Step7,否则跳到Step4;[00"]Step4:利用BKDRHash算法散列计算生成当前访问前缀对应的哈希值,查看Hash_Prefix中是否存在以该哈希值为key的记录,如果存在,贝Ij当前访问的前缀为冲突前缀,跳到Step5,否则跳到Step6;[0100]step5:当前访问的前缀保持字符串的格式不变,并且将其加入ConfIict中,跳到Step7;[0101]Step6:将(当前访问的前缀,哈希值键值对加入Prefix_Hash,(哈希值,当前访问的前缀键值对加入Hash_Prefix,跳到Step7;[0102]Step7:判断所有的前缀是否遍历处理完成,如果遍历处理完成,跳到steps,否则跳到Step2;[0103]StepS:当全部的前缀都遍历处理完成后,RDF三元组中出现在Conflict中的冲突前缀保持字符串的格式不变,并且将其他的前缀替换成对应的哈希值,跳到St印9;[0104]Step9:输出哈希编码压缩后的RDF三元组,跳到SteplO;[0105]SteplO:算法结束。[0106]上文中的RDF三元组包括实例三元组和模式三元组,虽然BKDRHash算法发生冲突的概率极低,但在本实施例中仍然考虑了冲突发生情况下的解决方案。[0107]以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。

权利要求:1.一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,其特征在于包括以下步骤:步骤SI:根据基于Redis的分布式存储方案,将用户输入的关键词映射到RDF本体图上的类顶点或属性边,构建RDF本体类-属性二维模型,通过类之间的关系进行剪枝、去重、连接操作,构建对应的本体查询子图;步骤S2:构建相关性评价函数,从结构紧密度和内容关联度两个方面对本体查询子图评分、排序;步骤S3:根据本体查询子图的优先级,按照评分高至低的顺序依次利用MapReduce计算框架并行搜索当前本体查询子图上匹配的实例三元组,并按当前本体查询子图的连接关系进行连接得到当前结果子图,直至得到前Top-k个结果子图;步骤S4:将步骤S3得到的Top-k的结果子图进行编码反转得到原始数据,并返还给用户。2.根据权利要求1所述的一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,其特征在于:步骤Sl中,所述基于Redis的分布式存储方案具体为:采用Redis内存数据库集群作为数据存储的媒介,将RDF本体信息和大规模的RDF实例数据进行预处理,分门别类地存储在Redis内存数据库集群的Set集合中;所述数据预处理包括采用哈希算法对数据进行哈希编码压缩;所述Redis内存数据库集群中包括本体存储数据、实例存储数据、哈希映射关系、以及历史数据,其各自的存储方案如下:所述本体存储数据的存储方案为:在表Rdf_ont〇logy中存储RDF本体类信息,以键值对的形式存储,其中键为类名,值为类的编号;在表SubPropertyOf中存储属性及其父属性的信息,以键值对的形式存储,其中键为属性,值为属性的父属性;在表SubClassOf中存储类及其父类的信息,以键值对的形式存储,其中键为类名,值为该类的父类;在表C_C_Property中存储属性以及属性连接的类对,其中键为属性,值为属性对应的类对构成的集合;在表Subject_Class中存储主语为同一类的模式三元组集合,其中键为主语所属的类的名称,值为属性和宾语所属类的组合;在表Object_Class中存储宾语为同一类的模式三元组集合,其中键为宾语所属的类的名称,值为属性和主语所属类的组合;所述实例存储数据的存储方案为:在表Literal_Triple中存储标签对应的数据属性和实例的集合,以键值对的形式存储,其中键为标签,值为数据属性和实例;在表Instance_Class中存储实例与实例所属类的映射关系,以键值对的形式存储,其中键为实例,值为实例对应的类;在表SC_0P_0C中存储包含对象属性的模式三元组对应的实例三元组,以键值对的形式存储,其中键为实例三元组的主语,值为实例三元组的宾语;在表0C_0P_SC中存储表SC_0P_0C的反转备份,以键值对的形式存储,其中键为实例三元组的宾语,值为实例三元组的主语;所述历史数据的存储方案为:在表His_Class_Graph中存储历史记录中搜索过的查询子图,其中键为Rdf_0ntology表中下标,下标按降序连接,值为本体查询子图;所述哈希映射关系的存储方案为:表PrefixJlash中存储Hash的形式存储前缀及其哈希值的信息,以键值对的形式存储,其中键为前缀,值为哈希值;在表Hash_PrefiX中存储Hash的形式存储PrefixJlash的反转备份,以键值对的形式存储,其中键为哈希值,值为前缀;在表ConfIict中存储Set形式存储发生冲突的前缀,其中值为冲突的前缀字符串。3.根据权利要求2所述的一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,其特征在于:步骤Sl中构建对应的本体查询子图具体包括以下步骤:步骤SI1:构建关联类图:对于用户输入的每一个关键词,首先根据表C_C_Pr〇perty判断该关键词是否映射为属性,若为属性,则存储至属性集合中;如不为属性,则通过Rdf_Ontology、C_C_Property、Instance_Class、Literal_Triple四表确定该关键词映射的本体实例类,并将其存储到类的集合中;根据该关键词所属的类,将与其相关联的类连接起来,得到该类对应的关联类图,并将其放入关联类图的集合中;步骤S12:将关联类图的集合、属性集合、以及类的集合作为本体查询子图的输入,依次通过剪枝和融合两个过程生成本体查询子图。4.根据权利要求1所述的一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,其特征在于:所述步骤S2中的相关性评价函数为:SEGsk=a*lenGsk+I-a^pageRanksGsk;IenGsk为结构紧密度评分:pageRanksGsk为内容关联度评分,’其中,Gsk为一个本体查询子图,disCi.Cj为表示两个实例类节点Ci和Cj在本体查询子图上的距离,α为调节参数。5.根据权利要求2所述的一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,其特征在于:所述步骤S4中,将步骤S3得到的Top-k的结果子图进行编码反转得到原始数据具体包括以下步骤:步骤S41:获取Top-k结果子图中包含的不同哈希值;步骤S42:从表Hash_Prefix中获取每个哈希值对应的前缀字符串;步骤S43:将Top-k结果子图中所有哈希值格式的前缀替换成对应的步骤S42中的字符串格式的如缀;步骤S44:输出编码反转后的Top-k结果子图集。6.根据权利要求2所述的一种基于SparkStreaming的流式RDF数据多关键词并行搜索方法,其特征在于:所述步骤S3中的利用MapReduce计算框架并行搜索当前本体查询子图上匹配的实例三元组,并按当前本体查询子图的连接关系进行连接得到当前结果子图具体包括以下步骤:步骤S31:Map阶段:针对当前构建好的本体查询子图中的每个模式三元组,并行搜索表SC_0P_0C或表0C_0P_SC中与该模式三元组匹配的实例三元组,并将得到的实例三元组传给步骤S32的Reduce阶段;步骤S32:Reduce阶段:接收步骤S31的Map阶段传送来的实例三元组,根据本体查询子图中已有的连接关系对该实例三元组进行连接,得到当前结果子图。

百度查询: 福州大学 一种基于Spark Streaming的流式RDF数据多关键词并行搜索方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。