首页> 中国专利> 一种大规模数据集上的关系查询方法

一种大规模数据集上的关系查询方法

摘要

本发明公开了一种大规模数据集上的关系查询方法,属于语义网领域。本方法为:1)计算语义数据有向图G中只包含同一种标签的连通子图;2)合并连通子图,将有向图G划分为若干子图;3)计算合并后的每一子图中最强连通子图C,并计算其二部图;4)将所有子图C的最短路径存储到一路径集合RS中;5)记录划分的每一子图中具有标签非冗余路径的两个点的标签,得到每一子图的标签集合;6)利用标签集合判断有向图G中是否存在符合查询条件的路径;如果有,则返回查询路径结果;否则,在子图之间进行遍历,根据集合RS确定可到达目标节点的子图,然后利用该子图的标签集合返回查询路径结果。本发明支持海量数据的关系查询,并且扩展性强。

著录项

  • 公开/公告号CN102332009A

    专利类型发明专利

  • 公开/公告日2012-01-25

    原文格式PDF

  • 申请/专利权人 北京大学;

    申请/专利号CN201110259125.2

  • 发明设计人 许坤;赵东岩;邹磊;贾爱霞;

    申请日2011-09-02

  • 分类号G06F17/30(20060101);

  • 代理机构北京君尚知识产权代理事务所(普通合伙);

  • 代理人余长江

  • 地址 100871 北京市海淀区颐和园路5号

  • 入库时间 2023-12-18 04:30:08

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-09-04

    授权

    授权

  • 2012-03-14

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20110902

    实质审查的生效

  • 2012-01-25

    公开

    公开

说明书

技术领域

本发明属于数据库技术领域、语义网领域,涉及一种大规模数据集上的带标签限制的关 系查询方法。

背景技术

语义数据是一种表示实体的属性信息以及实体之间语义关系的数据,一般以三元组的集 合形式来表示,三元组的格式为<主体,谓词,客体>。例如:<北京航空航天大学,校长, 怀进鹏>,<怀进鹏,毕业于,吉林大学>,......,<吉林大学,校长,展涛>。

语义数据有一种很重要的用途即语义推断,以上面的三元组为例,我们可以推断出北京 航空航天大学到展涛的一种关系,在传统的关系查询方法中,往往使用2-hop之类的方法对 路径进行索引,不过随着图的规模不断增长,该类方法的索引计算量也随之剧增,相应的计 算时间也急剧加大,可见传统的关系查询方法已经不能满足日益增长的实体关系查询的要求。

发明内容

本发明的目的在于提出了一种大规模数据集上的关系查询方法,用以支持海量数据的关 系查询,并且很好地支持了扩展性。

本发明的技术方案为:

一种大规模数据集上的关系查询方法,其步骤为:

1)提供或建立语义数据图的语义数据有向图;

2)针对语义数据有向图中每一种标签,计算只包含同一种标签的连通子图;

3)对步骤2)得到的连通子图进行合并,将所述语义数据有向图划分为若干子图;

4)计算步骤3)合并后的每一子图中最强连通子图C,并计算其二部图,得到进入C的 边界点集合S1和从C出去的边界点集合S2

5)对于每一最强连通子图C,利用基于标签的最短路径搜索方法计算S1中每个点到S2中每个点的最短路径,将所有最强连通子图的所述最短路径存储到一路径集合RS中;

6)记录步骤3)划分的每一子图中具有标签非冗余路径的两个点的标签,得到每一子图 的标签集合;

7)利用所述标签集合判断语义数据有向图中是否存在符合查询条件的路径;如果有,则 返回查询路径结果;否则,在子图之间进行遍历,根据所述路径集合RS确定可到达 目标节点的子图,然后利用该子图的标签集合返回查询路径结果。

进一步的,对步骤2)得到的连通子图进行合并的方法为:针对每一个连通子图,首先 计算其E(p)/C(p)的值,其中E(p)代表连通子图中边的数目,C(p)代表连通子图中的连通区域 数目;然后选择E(p)/C(p)值最大的两个连通子图进行合并,其中合并后的子图中包含的标签 数要小于设定的最大标签数,子图中的节点数要小于设定的最大节点数。

进一步的,如果查询条件中的路径标签是当前子图的标签集集合,则判定语义数据有向 图中存在符合查询条件的路径。

进一步的,采用2-hop方法对步骤3)划分的每一子图建立索引,记录每一子图中具有 标签非冗余路径的两个点的标签。

进一步的,所述语义数据有向图的建立方法为:

1)将语义数据图中的实体抽象成点,将实体之间的关系抽象成有向边;

2)将同一种关系对应的边抽象成一个标签;其中,标签代表边的种类,点与点之间的路 径长度为该路径上标签的种类数。

进一步的,所述基于标签的最短路径搜索方法为dijkstra算法。

本发明实施提出了一种基于标签的分图方法,包括:

利用标签的数目与图的连通区域数目的比值来确定子图结合的顺序。

利用设定的查询子图标签总数和查询子图中点的数目来约束查询子图的大小。

本发明实施提出了一种将带有标签的有向图转变成带有标签的二部图的方法,包括:

确定该图的最强连通分支;

找到每个连通分支内的两类边界点,并利用基于标签的最短路径搜索方法确定该二部 图。

本发明实施提出了一种基于分层的查询方法,包括:

利用分图方法的特性,采用提前计算加上临时搜索的方法来查询关系。

与现有技术相比,本发明的积极效果为:

本发明首次提出了以标签作为主要考虑因素的分图方法,并且用实验证明了该方法的优 越性,而且首次提出了将图分块的想法进行关系查询,并改进了dijkstra算法以适应于现在的 问题,支持海量数据的关系查询,并且很好地支持了扩展性。

附图说明

图1为该发明的总体方法流程图。

图2为抽象出的有向图。

图3为划分最强连通子图的示例图。

图4为合并子图的示例图。

图5为将带有标签的有向图转化为带有标签的二部图的示例图。

具体实施方式

本发明实例是基于实体关系查询的功能。

发明的总体方法流程图如图1所示:

在实例中,抽象有向图的方法包括:

步骤101:将语义数据图中的实体抽象成点,将实体之间的关系抽象成有向边。

步骤102:将同一种关系对应的边抽象成一个标签。

图2就是一个已经被抽象了的有向图,其中标签代表边的种类,在这里,我们定义点与 点之间的路径长度为该路径上标签的种类数。如图2所示,从点1到点5存在两条路径,分 别为p1(1,2,5)、p2(1,2,3,4,5),两条路径的标签集合分别为{a,b}和{a},则根据我们以上的定义, p1的长度为2,p2的长度为1。

在实施例中,基于标签的分图方法包括:

步骤201:分别针对每一种标签去计算只包含该标签的连通子图。

为了提高查询的性能,我们需要减少IO的次数和在查询阶段所做的遍历,所以我们将语 义数据有向图分块,而传统的分图方法基本上都只考虑图的结构,比如说“min-cut”是一个经 常用来衡量分图好坏的标准,而这里的关系查询主要考虑的是标签,所以我们发明了一种以 标签作为主要考虑因素的分图方法。

以图2为例,我们针对标签a、b、c、d、e、f六种标签都计算一下图2的连通子图,可 得到如图3所示的分块。

步骤202:根据规则选择合适的子图进行合并。

为了合并子图,我们提出一个启发式的算法,针对每一个子图,首先计算相应的E(p)/C(p), 其中E(p)代表子图p中边的数目,C(p)代表子图中的连通区域数目,接着我们选择E(p)/C(p) 值最大的两个子图进行合并,但是合并后的子图要满足两个要求,即合并后的子图中包含的 标签数要小于设定的最大标签数,子图中的节点数也要小于设定的最大节点数。

图4就是合并图3的一个例子:

我们通过计算,得到每个初始子图的E(p)/C(p)值,发现含有标签a的子图该值最大并且 为7,含有标签b的子图该比值次大并且为2,根据我们的启发式规则,将这两个子图合并在 一起。

利用上述的算法可以将一个有向图分为若干个子图。如图2所示,P1、P2和P3就是分成 的三个子图。

在实施例中,将带有标签的有向图转化为带有标签的二部图的方法包括:

步骤301:计算有向图中每一子图的最强连通子图。

在计算带标签有向图的最强连通子图时,忽略边上的标签,只需考虑连通性。

在有向图G中,如果任意两个不同的顶点可达,则称该有向图是强连通的,有向图的极 大强连通子图称为G的强连通分支。如图5所示,图5是图2的P1子图,根据定义,虚线框 内的子图即C1是一个强连通分支。

步骤302:针对步骤301中得到的最强连通子图计算相应的二部图,其中两类端点分别 是进入该子图的边界点和离开该子图的边界点。

以图5为例,C1是已经被识别出来的强连通分支,针对C1,首先识别出两类端点,一 类是进入C1的边界点,如2、3,标记为S1,一类是从C1出去的边界点,如3、4,标记为 S2,接着利用基于标签的最短路径搜索方法计算S1中的每个点到S2中每个点的最短路径,最 短路径搜索方法会在步骤4中进行介绍,如图2所示,点2到点3的最短路径只包含标签{a}。

在实施例中,基于标签的最短路径搜索方法包括:

步骤401:将语义数据有向图中路径的长度定义为组成该路径的标签种数。

步骤402:利用dijkstra算法计算二部图中两类点两两之间标签数目最少的路径。

根据我们对路径的定义,使用dijkstra算法,我们可以保证,在遇到标签冗余的路径之前 已经获得所有标签非冗余的路径,以图1为例,我们计算从点1到点6之间的标签非冗余的 路径。

根据dijkstra算法(迪克斯特拉算法),我们可以得到如下的结果:

表1

  Heap H   Path Set RS   Step1[{a},(1,2),2]   [{a},(1,2),2]   Step2[{a},(1,2,3),3];[{ac},(1,2,5),5]   [{a},(1,2,3),3]   Step3[{a},(1,2,3,4),4];[{ac},(1,2,5),5]   [{a},(1,2,3,4),4]   Step4[{a},(1,2,3,4,5),5];[{ac},(1,2,3,4,5),5]   [{a},(1,2,3,4,5),5]   Step5[{a},(1,2,3,4,5,6),6]   [{a},(1,2,3,4,5,6),6]

在dijkstra算法里,有两个变量,第一个是算法过程当中的一个优先级队列H,一个是用 来存储最后结果的路径集合RS。在后期搜索过程中需要遍历图,所以如果我们提前计算出穿 越这个图所需要满足的标签,就可以确定是否可以穿越该子图。

在算法执行的第一步,我们首先设置源点为点1,然后我们将点1的邻居节点放入优先级 队列,但由于这个图是有向图,所以我们只将点2放入优先级队列,这里存放边信息的结构 为一个三元组,形式为[L(p),p,d],其中L(p)代表路径的标签,p代表路径,d代表当前节点, 所以第一步以后,队列中只有[{a},(1,2),2]一个三元组,在算法的第二步,我们从优先级队列 中提取出队首元素,并判断已经有的结果集里面,是否存在从源点s到当前节点d的一条路 径,该路径已经将队首元素的标签覆盖,如果能找到就继续提取队首元素,否则,就将队首 元素放入结果集,并考虑结果集里面还没有被访问过的节点。所以在算法的第四步里,并没 有将[{ac},(1,2,3,4,5),5]放入最后的结果集里。

在实施例中,使用2-hop方法建立索引的方法包括:

步骤501:根据E Cohen的论文“Reachability and distance queries via 2-hop labels”中所提 到的2-hop方法建立索引,记录划分后的每一连通子图中具有标签非冗余路径的两个点的标 签;最终得到每一子图的标签集合,用于后续查询。

在实施例中,基于分层的查询方法包括:

步骤601:根据分图结果确定查询点所在的子图。

以图2为例,给定一个关系查询的实例LCR(1,18,’ac’,G),该查询的意思是,在有向图G 中,点1到点18是否存在一条路径,该路径的标签是{ac}的子集。

分层算法首先利用分图结果确定点1和点18分别所在的子图,如果是同一个子图,就利 用已经建立的2-hop索引判断是否存在一条符合要求的路径,如果存在符合要求的路径,则 返回答案,即判断路径标签是否是给定标签集的子集,如果是则符合要求,反之则不然。如 果在同一个子图但是找不到满足要求的路径或者不在同一个子图,则进入步骤602。

步骤602:在子图之间进行遍历,如果遍历到了目标节点所在的子图,就判断可以在该子 图中到达目标节点。

以图3为例,点1在子图P1中,点18在子图P2中,由于点1和点18在不同的子图,首 先判断点1是否可以在{ac}的约束下到达P1的边界点,在这里P1的边界点是点5、8、9,经 过判断,发现点5和点8均可以到达,由于点5和点18在同一个子图,于是利用子图P2的 索引判断,发现可以找到这样一条路径,于是返回答案。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号