基于Gremlin的并行扩展方法、系统、电子设备及存储介质与流程

文档序号:27038081发布日期:2021-10-24 06:33阅读:273来源:国知局
基于Gremlin的并行扩展方法、系统、电子设备及存储介质与流程
基于gremlin的并行扩展方法、系统、电子设备及存储介质
技术领域
1.本发明属于知识图谱技术领域,尤其涉及一种基于gremlin的并行扩展方法、系统、电子设备及存储介质。


背景技术:

2.近年来,随着互联网和社交网络的快速发展,大规模的图结构数据逐渐增多,例如将知识图谱、社交网络等信息抽象成的图结构数据。相比于传统的大数据处理系统,图系统能更好地利用图的结构信息,对图数据的处理更为高效。随着图结构化数据的增多,如何高效处理大量图结构数据成为研究的热点。市面上现有的使用gremlin作为图数据遍历语言的图数据库产品中,大部分都是直接使用原生的流式处理逻辑,关于图的扩展方面没有进行优化,使得大量数据频繁多次请求,加大了图数据库的开销,使扩展效率低下。


技术实现要素:

3.本技术实施例提供了一种基于gremlin的并行扩展方法、系统、电子设备及存储介质,以至少解决现有图的扩展方法扩展效率低下的问题。
4.第一方面,本技术实施例提供了一种基于gremlin的并行扩展方法,包括:并行扩展预置步骤,在编译器中基于janusgraph图扩展接口,通过gremlin添加一parallel step,并将所述parallel下的全部点信息和边信息添加至一集合中;执行逻辑改写步骤,对所述gremlin中的vertexstep、edgeotherstep和 edgevertexstep进行执行逻辑的改写,所述通过继承所述gremlin中的 abstractstep并重写processnextstart()方法实现;解析拦截替换步骤,在所述 gremlin的解析阶段进行拦截,当解析识别到所述parallel step时,通过改写后的所述执行逻辑进行执行。
5.优选的,所述执行逻辑改写步骤进一步包括:vertexstep改写步骤,通过所述janusgraph中的一并行查询方法进行一条件传入操作,若返回为 vertex.class,则执行multiquery.getentities方法,若返回为edge.class,则执行multiquery.getrelations方法。
6.优选的,所述执行逻辑改写步骤进一步包括:edgeotherstep改写步骤,根据判断本端点的值来判断需要获取的对端点,并将全部所述对端点的id集合作为条件传入entityquery.ids(ids).execute()。
7.优选的,所述执行逻辑改写步骤进一步包括:edgevertexstep改写步骤,根据方向进行判断,若所述方向为in,则获取关系的主体id,若所述方向为 out,则获取关系的客体id。
8.第二方面,本技术实施例提供了一种基于gremlin的并行扩展系统,适用于上述一种基于gremlin的并行扩展方法,包括:并行扩展预置模块,在编译器中基于janusgraph图扩展接口,通过gremlin添加一parallel step,并将所述parallel下的全部点信息和边信息添加至一集合中;执行逻辑改写模块,对所述gremlin中的vertexstep、edgeotherstep和
edgevertexstep进行执行逻辑的改写,所述通过继承所述gremlin中的abstractstep并重写 processnextstart()方法实现;解析拦截替换模块,在所述gremlin的解析阶段进行拦截,当解析识别到所述parallel step时,通过改写后的所述执行逻辑进行执行。
9.在其中一些实施例中,所述执行逻辑改写模块进一步包括:vertexstep 改写单元,通过所述janusgraph中的一并行查询方法进行一条件传入操作,若返回为vertex.class,则执行multiquery.getentities方法,若返回为 edge.class,则执行multiquery.getrelations方法。
10.在其中一些实施例中,所述执行逻辑改写模块进一步包括:edgeotherstep 改写单元,根据判断本端点的值来判断需要获取的对端点,并将全部所述对端点的id集合作为条件传入entityquery.ids(ids).execute()。
11.在其中一些实施例中,所述执行逻辑改写模块进一步包括: edgevertexstep改写单元,根据方向进行判断,若所述方向为in,则获取关系的主体id,若所述方向为out,则获取关系的客体id。
12.第三方面,本技术实施例提供了一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的一种基于gremlin的并行扩展方法。
13.第四方面,本技术实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面所述的一种基于gremlin 的并行扩展方法。
14.本技术可应用于知识图谱技术领域。相比于相关技术,本技术实施例提供的一种基于gremlin的并行扩展方法,通过继承tinkerpop开源代码及一些基础逻辑,结合分布式图数据库引擎(janusgraph),实现了基于gremlin图遍历语言的并行扩展,基于gremlin图遍历语言和janusgraph图数据库引擎,可以做到在进行both,out,in,oute等扩展或取点操作时进行并行扩展,使查询效率更高,更快的得到预想的结果,大大加快了对图数据的查询和扩展。、
附图说明
15.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
16.图1为本发明的基于gremlin的并行扩展方法流程图;
17.图2为图1中步骤s2的分步骤流程图;
18.图3为本发明的基于gremlin的并行扩展系统的框架图;
19.图4为本发明的电子设备的框架图;
20.图5为本技术提供的一具体实施例的示意图;
21.以上图中:
22.1、并行扩展预置模块;2、执行逻辑改写模块;3、解析拦截替换模块; 21、vertexstep改写单元;22、edgeotherstep改写单元;23、edgevertexstep 改写单元;60、总线;61、处理器;62、存储器;63、通信接口。
具体实施方式
23.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。基于本技术提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
24.显而易见地,下面描述中的附图仅仅是本技术的一些示例或实施例,对于本领域的普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图将本技术应用于其他类似情景。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本技术公开的内容相关的本领域的普通技术人员而言,在本技术揭露的技术内容的基础上进行的一些设计,制造或者生产等变更只是常规的技术手段,不应当理解为本技术公开的内容不充分。
25.在本技术中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本技术所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
26.除非另作定义,本技术所涉及的技术术语或者科学术语应当为本技术所属技术领域内具有一般技能的人士所理解的通常意义。本技术所涉及的“一”、“一个”、“一种”、“该”等类似词语并不表示数量限制,可表示单数或复数。本技术所涉及的术语“包括”、“包含”、“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单元)的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
27.本技术实施例以异构图数据库nest为例来说明,nest中包含了四种存储组件,分别是用于图存储的组件、用于倒排索引存储的组件、用于olap存储的组件以及用于历史版本存储的组件,通过组合这四种存储组件,nest可以实现图谱推理、搜索、olap查询、历史版本变更记录及查询等功能,需要说明的是, nest所存储的数据都是有唯一主键的。
28.本技术基于nest分布式图数据库,nest图数据库基于janusgraph将图谱数据存储在hbase之上,图遍历语言为gremlin。hadoop database是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。gremlin是apache tinkerpop 框架下的图遍历语言。gremlin是一种函数式数据流语言,可以使得用户使用简洁的方式表述复杂的属性图(property graph)的遍历或查询。每个gremlin 遍历由一系列步骤(可能存在嵌套)组成,每一步都在数据流(data stream) 上执行一个原子操作。
29.以下,结合附图详细介绍本发明的实施例:
30.图1为本发明的基于gremlin的并行扩展方法流程图,请参见图1,本发明基于gremlin的并行扩展方法包括如下步骤:
31.s1:在编译器中基于janusgraph图扩展接口,通过gremlin添加一parallelstep,并将所述parallel下的全部点信息和边信息添加至一集合中。
32.在具体实施中,本技术实施例基于apache tinkerpop3的开源代码和 janusgraph
的图扩展接口。
33.在具体实施中,首先需要添加一个名为parallel的step,并将parallelstep下的全部element(vetex或者edge)添加到一个集合中供后续实现并行扩展使用。
34.s2:对所述gremlin中的vertexstep、edgeotherstep和edgevertexstep 进行执行逻辑的改写,所述通过继承所述gremlin中的abstractstep并重写 processnextstart()方法实现。
35.在具体实施中,对vertexstep、edgeotherstep、edgevertexstep的原有执行逻辑进行改写实现。可选的,图2为图1中步骤s2的分步骤流程图,请参见图2:
36.s21:对于vertexstep,通过所述janusgraph中的一并行查询方法进行一条件传入操作,若返回为vertex.class,则执行multiquery.getentities方法,若返回为edge.class,则执行multiquery.getrelations方法。
37.在具体实施中,继承abstractstep,重写processnextstart()方法,根据step获取所需全部信息,包括entityids、edgelabels、direction、retur nclass等信息,通过nest根据janusgraph所实现的并行扩展方法multiquery 即janusgraph.query方法,可以通过所设置条件进行并行查询。将entityid、 edgelabel、direction作为条件传入(multiquery.addentityid(entityids). direction(direction).labels(edgelabels)),如果returnclass是vertex. class,则执行multiquery.getentities(),如果returnclass是edge.class,则执行multiquery.getrelations,整理查询结果并返回。
38.s22:对于edgeotherstep,根据判断本端点的值来判断需要获取的对端点,并将全部所述对端点的id集合作为条件传入entityquery.ids(ids).execute ()。
39.在具体实施中,根据判断本端点的值来判断需要获取的对端点,使用对端点的id,使用nest实现的点并行查询方法entityquery(即janusgraph提供的可以根据点id的集合快速查询全部点信息),将全部对端点的id集合(ids) 作为条件传入(entityquery.ids(ids).execute()),整理查询结果并返回。
40.s23:对于edgevertexstep,根据方向进行判断,若所述方向为in,则获取关系的主体id,若所述方向为out,则获取关系的客体id。
41.在具体实施中,根据方向判断并获取实体id,如果方式是in,则获取关系的主体id,如果是out,则获取关系的客体id,查询过程与edgeotherstep 中对点id的集合查询相同,最终整理查询结果并返回。
42.请继续参见图1:
43.s3:在所述gremlin的解析阶段进行拦截,当解析识别到所述parallel s tep时,通过改写后的所述执行逻辑进行执行。
44.在具体实施中,在gremlin解析阶段进行拦截,如果遇到parallel step,则将原有逻辑进行替换为改写后的执行逻辑。
45.在具体实施中,对于改写后的执行逻辑,可在原来语句的bothe、otherv 以及both、out、in、ine、oute、inv、outv前面额外加入parallel(),但pa rallel()不能放在and()或or()子句中。
46.本技术提供一具体实施例进行进一步说明,请参见图5:
47.圆圈代表顶点(即查询语句中的v()),圆圈中的person代表顶点的名称, name和
age为顶点的属性。
48.线代表边(即查询语句中的e()),线上的knows代表边的名称,weight 为边的属性。
49.对于vertexstep的出、入点计算,例如out、in、both、oute、bothe等,可以如下形式进行:
50.1.g.v().out();2.g.v().in(

knows’)
51.对于edgevertexstep,支持边的inv、outv等计算,可以如下形式进行:
52.1.g.v().oute(

knows’).inv();2.g.v().ine().bothv()
53.对于edgeothervertexstep,支持otherv计算,可以如下形式进行:
54.g.v().bothe().otherv()
55.在具体实施中,查询顶点4的边中为knows和created的边。g.v(4).bot he('knows','created')会执行vertexstep的遍历逻辑,改写成g.v(4).paral lel().bothe('knows','created')会执行parallelvertexstep的遍历逻辑(即本技术所修改的并行遍历方式)。
56.在具体实施中,查询顶点2的入边为knows的边的所有点,g.v(2).ine(

k nows’).bothv()会执行edgevertexstep的遍历逻辑,改写成g.v(2).ine(

k nows’).parallel().bothv()会执行paralleledgevertexstep的遍历逻辑(即本技术所修改的并行遍历方式)。
57.在具体实施中,查询顶点4的边中为knows和created的边上其余点。g. v(4).bothe('knows','created').otherv()会执行edgeothervertexstep的遍历逻辑,改写成g.v(4).parallel().bothe('knows','created').parallel(). otherv()会执行paralleledgeothervstep的遍历逻辑(即本技术所修改的并行遍历方式)。
58.需要说明的是,在上述流程中或者附图的流程图中示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
59.本技术实施例提供了一种基于gremlin的并行扩展系统,适用于上述的一种基于gremlin的并行扩展方法。如以下所使用的,术语“单元”、“模块”等可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件、或者软件和硬件的组合的实现也是可能并被构想的。
60.图3为根据本发明的基于gremlin的并行扩展系统的框架图,请参见图3,包括:
61.并行扩展预置模块1:在编译器中基于janusgraph图扩展接口,通过gremlin 添加一parallel step,并将所述parallel下的全部点信息和边信息添加至一集合中。
62.在具体实施中,本技术实施例基于apache tinkerpop3的开源代码和 janusgraph的图扩展接口。
63.在具体实施中,首先需要添加一个名为parallel的step,并将parallel step 下的全部element(vetex或者edge)添加到一个集合中供后续实现并行扩展使用。
64.执行逻辑改写模块2:对所述gremlin中的vertexstep、edgeotherstep和 edgevertexstep进行执行逻辑的改写,所述通过继承所述gremlin中的 abstractstep并重写processnextstart()方法实现。
65.在具体实施中,对vertexstep、edgeotherstep、edgevertexstep的原有执行逻辑进行改写实现。可选的,执行逻辑改写模块2包括:
66.vertexstep改写单元21:对于vertexstep,通过所述janusgraph中的一并行查询方法进行一条件传入操作,若返回为vertex.class,则执行 multiquery.getentities方法,若返回为edge.class,则执行multiquery.getrelations 方法。
67.在具体实施中,继承abstractstep,重写processnextstart()方法,根据step 获取所需全部信息,包括entityids、edgelabels、direction、returnclass等信息,通过nest根据janusgraph所实现的并行扩展方法multiquery即 janusgraph.query方法,可以通过所设置条件进行并行查询。将entityid、 edgelabel、direction作为条件传入 (multiquery.addentityid(entityids).direction(direction).labels(edgelabels)),如果 returnclass是vertex.class,则执行multiquery.getentities(),如果returnclass是 edge.class,则执行multiquery.getrelations,整理查询结果并返回。
68.edgeotherstep改写单元22:对于edgeotherstep,根据判断本端点的值来判断需要获取的对端点,并将全部所述对端点的id集合作为条件传入 entityquery.ids(ids).execute()。
69.在具体实施中,根据判断本端点的值来判断需要获取的对端点,使用对端点的id,使用nest实现的点并行查询方法entityquery(即janusgraph提供的可以根据点id的集合快速查询全部点信息),将全部对端点的id集合(ids)作为条件传入(entityquery.ids(ids).execute()),整理查询结果并返回。
70.edgevertexstep改写单元23:对于edgevertexstep,根据方向进行判断,若所述方向为in,则获取关系的主体id,若所述方向为out,则获取关系的客体id。
71.在具体实施中,根据方向判断并获取实体id,如果方式是in,则获取关系的主体id,如果是out,则获取关系的客体id,查询过程与edgeotherstep中对点id的集合查询相同,最终整理查询结果并返回。
72.解析拦截替换模块3:在所述gremlin的解析阶段进行拦截,当解析识别到所述parallel step时,通过改写后的所述执行逻辑进行执行。
73.在具体实施中,在gremlin解析阶段进行拦截,如果遇到parallel step,则将原有逻辑进行替换为改写后的执行逻辑。
74.在具体实施中,对于改写后的执行逻辑,可在原来语句的bothe、otherv 以及both、out、in、ine、oute、inv、outv前面额外加入parallel(),但parallel() 不能放在and()或or()子句中。
75.本技术提供一具体实施例进行进一步说明,请参见图5:
76.圆圈代表顶点(即查询语句中的v()),圆圈中的person代表顶点的名称, name和age为顶点的属性。
77.线代表边(即查询语句中的e()),线上的knows代表边的名称,weight为边的属性。
78.对于vertexstep的出、入点计算,例如out、in、both、oute、bothe等,可以如下形式进行:
79.1.g.v().out();2.g.v().in(

knows’)
80.对于edgevertexstep,支持边的inv、outv等计算,可以如下形式进行:
81.1.g.v().oute(

knows’).inv();2.g.v().ine().bothv()
82.对于edgeothervertexstep,支持otherv计算,可以如下形式进行:
83.g.v().bothe().otherv()
84.在具体实施中,查询顶点4的边中为knows和created的边。 g.v(4).bothe('knows','created')会执行vertexstep的遍历逻辑,改写成 g.v(4).parallel().bothe('knows','created')会执行parallelvertexstep的遍历逻辑(即本技术所修改的并行遍历方式)。
85.在具体实施中,查询顶点2的入边为knows的边的所有点, g.v(2).ine(

knows’).bothv()会执行edgevertexstep的遍历逻辑,改写成 g.v(2).ine(

knows’).parallel().bothv()会执行paralleledgevertexstep的遍历逻辑 (即本技术所修改的并行遍历方式)。
86.在具体实施中,查询顶点4的边中为knows和created的边上其余点。 g.v(4).bothe('knows','created').otherv()会执行edgeothervertexstep的遍历逻辑,改写成g.v(4).parallel().bothe('knows','created').parallel().otherv()会执行 paralleledgeothervstep的遍历逻辑(即本技术所修改的并行遍历方式)。
87.另外,结合图1描述的一种基于gremlin的并行扩展方法可以由电子设备来实现。图4为本发明的电子设备的框架图。
88.电子设备可以包括处理器61以及存储有计算机程序指令的存储器62。
89.具体地,上述处理器61可以包括中央处理器(cpu),或者特定集成电路(application specific integrated circuit,简称为asic),或者可以被配置成实施本技术实施例的一个或多个集成电路。
90.其中,存储器62可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器62可包括硬盘驱动器(hard disk drive,简称为hdd)、软盘驱动器、固态驱动器(solid state drive,简称为ssd)、闪存、光盘、磁光盘、磁带或通用串行总线(universal serial bus,简称为usb)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器62可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器62可在数据处理装置的内部或外部。在特定实施例中,存储器62是非易失性(non

volatile)存储器。在特定实施例中,存储器62包括只读存储器(read

only memory,简称为rom) 和随机存取存储器(random access memory,简称为ram)。在合适的情况下,该rom可以是掩模编程的rom、可编程rom(programmable read

only memory,简称为prom)、可擦除prom(erasable programmable read

only memory,简称为eprom)、电可擦除prom(electrically erasable programmable read

onlymemory,简称为eeprom)、电可改写rom(electrically alterable read

onlymemory,简称为earom)或闪存(flash)或者两个或更多个以上这些的组合。在合适的情况下,该ram可以是静态随机存取存储器(static random

accessmemory,简称为sram)或动态随机存取存储器(dynamic random access memory,简称为dram),其中,dram可以是快速页模式动态随机存取存储器(fast pagemode dynamic random access memory,简称为fpmdram)、扩展数据输出动态随机存取存储器(extended date out dynamic random access memory,简称为edodram)、同步动态随机存取内存(synchronous dynamic random

accessmemory,简称sdram)等。
91.存储器62可以用来存储或者缓存需要处理和/或通信使用的各种数据文件,以及处理器61所执行的可能的计算机程序指令。
92.处理器61通过读取并执行存储器62中存储的计算机程序指令,以实现上述实施例中的任意一种基于gremlin的并行扩展方法。
93.在其中一些实施例中,电子设备还可包括通信接口63和总线60。其中,如图4所示,处理器61、存储器62、通信接口63通过总线60连接并完成相互间的通信。
94.通信端口63可以实现与其他部件例如:外接设备、图像/数据采集设备、数据库、外部存储以及图像/数据处理工作站等之间进行数据通信。
95.总线60包括硬件、软件或两者,将电子设备的部件彼此耦接在一起。总线60包括但不限于以下至少之一:数据总线(data bus)、地址总线(addressbus)、控制总线(control bus)、扩展总线(expansion bus)、局部总线(localbus)。举例来说而非限制,总线60可包括图形加速接口(accelerated graphicsport,简称为agp)或其他图形总线、增强工业标准架构(extended industrystandard architecture,简称为eisa)总线、前端总线(front side bus,简称为fsb)、超传输(hyper transport,简称为ht)互连、工业标准架构 (industry standard architecture,简称为isa)总线、无线带宽(infiniband) 互连、低引脚数(low pin count,简称为lpc)总线、存储器总线、微信道架构(micro channel architecture,简称为mca)总线、外围组件互连(peripheralcomponent interconnect,简称为pci)总线、pci

express(pci

x)总线、串行高级技术附件(serial advanced technology attachment,简称为sata) 总线、视频电子标准协会局部(video electronics standards associationlocal bus,简称为vlb)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线60可包括一个或多个总线。尽管本技术实施例描述和示出了特定的总线,但本技术考虑任何合适的总线或互连。
96.该电子设备可以执行本技术实施例中的一种基于gremlin的并行扩展方法。
97.另外,结合上述实施例中的一种基于gremlin的并行扩展方法,本技术实施例可提供一种计算机可读存储介质来实现。该计算机可读存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现上述实施例中的任意一种基于gremlin的并行扩展方法。
98.而前述的存储介质包括:u盘、移动硬盘、只读存储器(readonly memory,简称为rom)、随机存取存储器(random access memory,简称为ram)、磁碟或者光盘等各种可以存储程序代码的介质。
99.以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
100.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1