发布信息

面向图计算的拓扑查询结构、查询方法、电子设备及介质

作者:admin      2022-07-30 07:10:32     253



计算;推算;计数设备的制造及其应用技术1.本发明涉及计算机软件技术领域,具体涉及面向图计算的拓扑查询结构、查询方法、电子设备及介质。背景技术:2.在现有的分布式的图查询技术中,对于多圈层路径的查询,比如:先进行nodescanbyindex操作查找某些节点,然后对其结果进行若干次expandall操作。常用的做法有两种:一种是向存储层下发节点查询任务,获得结果集后在计算层进行过滤操作,再将过滤结果下发的存储层作为expand的输入,由存储进行expand操作并向上层返回结果。这带来了较大的网络开销,导致效率底下。第二种做法则是将过滤操作直接下沉到存储层,由存储层在多圈层遍历的同时进行过滤,并最终将结果返回。这种方式避免了大量的网络开销,但同样存在一些不足:1.存储层完成了图查询的大部分任务,而计算层资源被浪费掉。这在高并发场景下尤其明显,在存储层进行图遍历的过程中,计算层由于没有获得数据而处于空闲状态,而存储层由于查询任务过多产生了极大的负载。2.当存在一些涉及计算的过滤时(如对边的若干属性求加权平均值),存储层需要针对属性值进行字节流反序列化,在经过一系列的计算和过滤后,再将查询结果序列化后返回计算层,计算层在反序列后才能进行后续的拓扑构建操作,这样频繁的序列化和反序列化也会产生很多的时延。技术实现要素:3.针对上述问题,本发明提供一种面向图计算的拓扑查询结构、查询方法、电子设备及介质,目的在于利用存储层具备一定过滤能力和批处理能力的前提下,将复杂过滤和图计算以及图拓扑构建的工作交由计算层,通过算子分片与流水线技术,增大节点间与节点内的并发度,充分利用分布式资源,以降低在多圈层遍历过程中的查询时延。4.本发明通过下述技术方案实现:5.一种面向图计算的拓扑查询结构,包括:6.存储层,用于进行多圈层路径的遍历,每完成一个圈层的遍历,就返回该圈层需进行计算和过滤的节点集合以及边集合;7.计算层,至少包含一个计算节点,计算节点用于基于查询条件计算和过滤所述存储层返回的节点集合以及边集合,通过流水线处理的方式与所述存储层并行工作;8.图拓扑构建模块,设置在其中一个计算节点中,接收经过所述计算节点的计算和过滤后符合查询条件的节点集合以及边集合,并将符合查询条件的节点集合以及边集合进行组合构建成符合查询条件的图。9.作为优化,所述计算节点包括:10.getdata算子:用于获取所述存储层遍历圈层得到的节点集合以及节点集合中的节点对应的边集合,并将所述节点集合与边集合反序列化,同时将该次遍历圈层的节点集合中的起始节点进行过滤,将符合过滤条件的起始节点放入待处理节点队列,并将该起始节点放入图拓扑构建模块中,对于不符合过滤条件的起始节点,进行删除,对于非起始节点的节点和所有的边数据都在getdata算子内存储并保持,供计算层中的后续的算子获得属性数据;11.getedge算子:从待处理节点队列中获取节点集合中的节点,从所述getdata算子中获取边集合的边,并输出获取的节点集合中的节点对应的边至edgefilter算子;12.edgefilter算子:至少包括一个,用于对节点对应的边进行预处理并进行边过滤,将符合查询条件的节点对应的边传入第一getnode算子,对不符合查询条件的节点对应的边传入待丢弃边队列,输出过滤后的边给第一getnode算子;13.第一getnode算子:数量与所述edgefilter算子匹配,用于获取过滤后的边对应的目的节点,并对该过滤后的边对应的目的节点进行预处理并进行目的节点过滤,将符合查询条件的目的节点放入待处理节点队列和图拓扑构建模块,并将有目的节点对应的边输入至所述图拓扑构件模块中;14.待处理节点队列,用于存放符合过滤条件的节点,数据来源包括getdata算子获得的符合过滤条件的起始节点以及第一getnode算子获得的符合过滤条件的节点。15.待丢弃边队列,用于存放通过edgefilter算子过滤后得到的不符合边过滤条件的边的集合,用以删除冗余路径;16.待处理边队列,用于存放暂时未找到目的节点的边的集合,且所述存储层每遍历一次圈层,重新判断所述待处理边列队的边是否有找到目的节点,若所述存储层的遍历结束时,将所述待处理边队列内的边定义为冗余路径并加入到待丢弃边队列中。17.作为优化,所述第一getnode算子中,当存储层数据为分批次返回节点集合与边集合时,若获取不到过滤后的边对应的目的节点,则将该过滤后的边传入到待处理边队列中。18.作为优化,还包括第二getnode算子,用于在所述存储层每完成一次圈层的遍历,重新判断所述待处理边列队的边是否有找到目的节点,具体过程为:19.所述存储层每完成一圈层的遍历,返回新的节点集合,第二getnode算子遍历所述待处理边列队中的边,同时,判断所述待处理边列队中的边是否在新的节点集合中有对应的目的节点,若是,将该目的节点进行预处理并进行目的节点过滤,将符合查询条件的目的节点输出至待处理节点队列和图拓扑构建模块中,并将有目的节点对应的入边输入至所述图拓扑构件模块中。否则,该边继续保存在所述待处理边队列中。20.作为优化,若所述计算节点有多个,多个所述计算节点包括一个主计算节点和若干从计算节点,所述主计算节点中设置有图拓展构建模块,所述从计算节点中的符合查询条件的节点和边输出值所述主计算节点中的图拓展构建模块。21.作为优化,若所述edgefilter算子有多个,所述edgefilter算子一一对应所述第一getnode算子,且多个edgefilter算子同时工作。22.本发明还公开了一种面向图计算的拓扑查询方法,包括如下步骤:23.s1、遍历多圈层路径,每完成一个圈层的遍历,返回该圈层需进行计算和过滤的节点集合以及边集合;24.s2、基于查询条件计算和过滤所述节点集合以及边集合;25.s3、接收经过步骤s2计算和过滤后符合查询条件的节点集合以及边集合,并将符合查询条件的节点集合以及边集合进行组合构建成符合查询条件的图。26.作为优化,步骤s2的具体步骤为:27.s2.1、通过getdata算子将所述节点集合与边集合反序列化,同时将该次遍历圈层的起始节点进行过滤,将符合过滤条件的起始节点放入待处理节点队列,同时,将该起始节点放入图拓扑构建模块中;28.s2.2、通过getedge算子从待处理节点队列中获取节点集合中的节点,从所述getdata算子中获取边集合的边,并输出获取的节点集合中的节点对应的边至edgefilter算子;29.s2.3、通过edgefilter算子对边集合中的边进行预处理并进行边过滤,将符合查询条件的节点对应的边传入第一getnode算子,对不符合查询条件的节点对应的边传入待丢弃边队列,输出过滤后的边给第一getnode算子;30.s2.4、通过第一getnode算子获取过滤后的边对应的目的节点,并对该过滤后的边对应的目的节点进行预处理并进行目的节点过滤,将符合查询条件的目的节点放入待处理节点队列和图拓扑构建模块,并将有目的节点对应的边输入至所述图拓扑构件模块中。31.本发明还公开了一种电子设备,包括至少一个处理器,以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的一种面向图计算的拓扑查询方法。32.本发明还公开了一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述的一种面向图计算的拓扑查询方法。33.本发明与现有技术相比,具有如下的优点和有益效果:34.1.本发明提出了一种面向图计算的拓扑查询方法,避免了存储层与计算层负载不均的状况,提高了资源利用率,减少了查询时延。35.2.本发明采用选择性算子下沉的策略,减少计算层与存储层网络通信开销的同时,在高并发场景下能够极大的减轻存储层的检索压力。36.3.本发明采用基于负载的流水线与算子分片技术,动态分配计算资源,提高并发度并避免线程切换带来的代价。37.4.本发明同时针对分布式场景提出了一套执行方案,具备可扩展性。附图说明38.为了更清楚地说明本发明示例性实施方式的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。在附图中:39.图1为本发明所示的一种面向图计算的拓扑查询结构的结构示意图;40.图2为图1中主计算节点的结构示意图;41.图3为若干节点形成的路径示意图。具体实施方式42.为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。43.实施例144.在介绍本发明技术方案之前,先介绍一下圈层的概念。45.如图3所示,根据输入的查询条件获得了a、b两个起始节点,则a、b属于第0圈层,cde属于1圈层,fg属于2圈层,同时g属于3圈层。存储层将从起始节点开始,依次遍历当前节点的直接相邻节点,称之为完成了一圈层的遍历,然后再以直接相邻节点作为当前节点,递归进行遍历,终止条件为:圈层数满足查询条件(如查询要求获取三圈层内的所有节点,则遍历第3圈层结束后终止)。以上图为例,存储层第一次返回ab,第二次返回cde,第三次返回fg,第四次返回g。46.如图1所示,本发明公开了一种面向图计算的拓扑查询结构,包括:47.存储层,用于进行多圈层路径的遍历,每完成一个圈层的遍历,就返回该圈层需进行计算和过滤的节点集合以及边集合。48.存储层返回的节点和边的属性可以不是全量的,仅将计算层进行计算和过滤的必须属性值返回即可,以减少网络负载。本发明中,存储层的数据不必一次返回,而采用每完成一个圈层的遍历就返回该圈层的节点和边的方式,即存储层采用一边遍历一边返回的方式将数据(节点集合以及边集合)以圈层为单位构建分组发送到计算层。49.计算层,至少包括一个计算节点,所述计算节点用于基于查询条件计算和过滤所述存储层返回的节点集合以及边集合,通过流水线处理的方式与所述存储层并行工作;计算节点的算子采用流水线技术对分组数据进行处理;50.图拓扑构建模块,设置在其中一个计算节点中,接收经过所述计算节点的计算和过滤后符合查询条件的节点集合以及边集合,并将符合查询条件的节点集合以及边集合进行组合构建成符合查询条件的图。51.若所述计算节点有多个,多个所述计算节点包括一个主计算节点和若干计算节点,所述计算节点中设置有图拓展构建模块,所述从计算节点中的符合查询条件的节点和边输出值所述主计算节点中的图拓展构建模块。52.本实施例中,主计算节点和从计算节点均包括:53.getdata算子:用于获取所述存储层遍历圈层得到的节点集合以及节点集合中的节点对应的边集合,并将所述节点集合与边集合反序列化,同时将该次遍历圈层的节点集合中的起始节点进行过滤,将符合过滤条件的起始节点放入待处理节点队列,并将该起始节点放入图拓扑构建模块中,对于不符合过滤条件的起始节点,进行删除,对于节点集合中的未过滤的非起始节点的节点和所有的边数据都在getdata算子内存储并保持,供计算层中的计算节点的后续的算子获得属性数据。54.这里的节点集合中的节点包括遍历圈层的起始节点以及与该起始节点相邻的相邻节点。55.getedge算子:从待处理节点队列中获取节点集合中的节点,从所述getdata算子中获取边集合的边,并输出获取的节点集合中的节点对应的边至edgefilter算子;getedge算子的输入是节点id,输出是对应的节点的边id,将输出推给edgefilter算子。56.edgefilter算子:至少包括一个,用于对节点对应的边进行预处理并进行边过滤,将符合查询条件的节点对应的边传入第一getnode算子,对不符合查询条件的节点对应的边传入待丢弃边队列,输出过滤后的边给第一getnode算子。57.这里的对节点对应的边进行预处理,是指即对边的属性值做类型转换,因为底层存储引擎对属性值的存储均采用string类型,而后续过滤时要涉及计算,因此要将属性值转换为int或float。58.而此处的查询条件即过滤条件,例如,设置边的过滤条件为边的属性a》5,则所有属性a的值大于5的边就是符合条件的。59.a是指边的属性,例如:将甲及其好友们抽象为节点,关系“好友”抽象为节点之间的边,边存在属性“亲密度”。如进行一次图查询:查询甲的所有好友中亲密度》5的所有人。60.亲密度》5就是此次查询对边的过滤条件,在进行edgefilter时,亲密度》5的边就是符合查询条件的边,会传入第一getnode算子。61.第一getnode算子:数量与所述edgefilter算子匹配,用于获取过滤后的边对应的目的节点,并对该过滤后的边对应的目的节点进行预处理并进行目的节点过滤,将符合查询条件的目的节点放入待处理节点队列和图拓扑构建模块,并将有目的节点对应的边(即上述过滤后的边)输入至所述图拓扑构件模块中。62.每个边的数据结构中包含了该边所指向节点的nodeid,根据该id在getdata算子中进行查找即可查找到目的节点。(edgefilter算子将边传入第一getnode算子,但边中只包含了该边指向节点的nodeid(相当于指向该节点的一个指针),节点的属性信息仍在第一getdata算子中),63.至于对目的节点进行预处理并进行目的节点过滤的具体过程为:预处理阶段将节点属性进行类型转换,过滤阶段即根据用户传入的过滤条件进行过滤。64.若所述edgefilter算子有多个,所述edgefilter算子一一对应所述第一getnode算子,且多个edgefilter算子同时工作。65.所述第一getnode算子中,当存储层数据为分批次返回节点集合与边集合时,若获取不到过滤后的边集合中的边对应的目的节点,则将该无目的节点对应的过滤后的边传入到待处理边队列中。66.本实施例中,还包括第二getnode算子,用于在所述存储层每完成一次圈层的遍历,重新判断所述待处理边列队的边是否有找到目的节点的具体过程为:67.所述存储层每完成一圈层的遍历,返回新的节点集合,第二getnode算子遍历所述待处理边列队中的边,同时,判断所述待处理边列队中的边是否在新的节点集合中有对应的目的节点,若是,将该目的节点进行预处理并进行目的节点过滤,将符合查询条件的目的节点输出至待处理节点队列和图拓扑构建模块中,并将有目的节点对应的入边输入至所述图拓扑构件模块中。否则,该边继续保存在所述待处理边队列中。68.待处理节点队列,用于存放符合过滤条件的节点,包括getdata算子获得的符合过滤条件的起始节点以及第一getnode算子、第二getnode算子获得的符合过滤条件的节点。69.待丢弃边队列,用于存放通过edgefilter算子过滤后得到的不符合边过滤条件的边的集合,用以删除冗余路径。70.待处理边队列,用于存放暂时未找到目的节点的边的集合,且所述存储层每遍历一次圈层,重新判断所述待处理边列队的边是否有找到目的节点,若所述存储层的遍历结束时,将所述待处理边队列内的边定义为冗余路径并加入到待丢弃边队列中。71.图拓扑构建模块,接收经过所述第一getnode算子的计算和过滤后符合查询条件的节点集合以及边集合,并将符合查询条件的节点集合以及边集合进行组合构建成符合查询条件的图。将符合条件的点和边将传入该模块,由该模块负责图的构建。采用写管道的方式,以避免一个节点连接多条出边时产生写冲突。72.例如,如需要查询节点a到节点b中间节点数目小于3的所有路径,对中间节点和边的过滤条件都涉及浮点数运算。假设流水线最大数目为2,当前计算层内只有一个计算节点,查询流程如下:73.1.存储层获得节点a以及a的所有出边,将这些数据返回计算层,并继续下一圈层的遍历。74.2.计算节点的getdata算子获得这些数据(节点a以及a的所有出边)并反序列化,对节点a进行过滤,发现a符合过滤条件,于是将节点a写入待处理节点队列。75.3.getedge从待处理节点队列拿到节点a,在getdata算子返回的边集中获取节点a的出边。下发第1、2条边时,构建新流水线。此后,由于流水线数目已达到上限,因此选择等待数最少的流水线下发。此外,起始节点a由getedge算子发送到图拓扑构建模块。76.4.edgefilter算子获取一条边进行预处理并进行边过滤,如符合条件,传递给第一getnode算子,否则放入待丢弃边队列77.5.第一getnode算子获得过滤后的边的目的节点,并对该过滤后的边对应的目的节点进行预处理并进行目的节点过滤,如符合条件,将该目的节点传递给待处理节点队列,并将该边以及目的节点发送到图拓扑构建模块。若目的节点可能还未从存储层返回,则将该边放入待处理边队列。78.6.另由一个getnode算子(第二getnode算子)来处理待处理边队列中的内容,每次存储层返回新的数据时,该算子会遍历待处理边队列,获得边的目的节点,进行预处理并进行边过滤,如符合条件,传递给待处理节点队列,并发送到拓扑构建模块。79.7.存储层发送结束信号后,待处理边队列中仍存留的边与待丢弃边队列中的边所在的路径需要被丢弃。采用递归方式删除掉这些路径的数据。80.如图2所示,为计算节点的执行架构。81.1)存储层发送数据给getdata算子(可以是分批次,也可以是一次性全返回),getdata对数据进行反序列化,并将起始节点写入待处理节点队列。82.2)getedge算子从待处理节点队列中拉取节点,获取节点的出边后:83.若当前流水线数目小于限额,则新建一条edgefilter算子到getnode算子的流水线,将出边下发。84.若当前流水线数目已经达到最大值,则选择一条待处理边最少的流水线,下发出边排队等待。85.3)edgefilter算子与getnode算子采用流水线方式执行,符合条件的边和点传入图拓扑构建模块。86.4)getnode获得的节点写入待处理节点队列,重复2)。87.实施例288.本发明还公开了一种面向图计算的拓扑查询方法,包括如下步骤:89.s1、遍历多圈层路径,每完成一个圈层的遍历,返回该圈层需进行计算和过滤的节点集合以及边集合;90.s2、基于查询条件计算和过滤所述节点集合以及边集合;91.s3、接收经过步骤s2计算和过滤后符合查询条件的节点集合以及边集合,并将符合查询条件的节点集合以及边集合进行组合构建成符合查询条件的图。92.本实施例中,步骤s2的具体步骤为:93.s2.1、通过getdata算子将所述节点集合与边集合反序列化,同时将该次遍历圈层的起始节点进行过滤,将符合过滤条件的起始节点放入待处理节点队列,并将该起始节点放入图拓扑构建模块中,对于不符合过滤条件的起始节点,进行删除,对于非起始节点和所有的边数据都在算子内存储并保持,供后续算子获得属性数据;94.s2.2、通过getedge算子从待处理节点队列中获取节点集合中的节点,从所述getdata算子中获取边集合的边,并输出获取的节点集合中的节点对应的边id以及边集合中的边至edgefilter算子;95.s2.3、通过edgefilter算子对边集合中的边进行预处理并进行边过滤,将符合查询条件的边集合中的边传入第一getnode算子,对不符合查询条件的边集合中的边传入待丢弃边队列,输出节点集合中的节点对应的边id以及过滤后的边集合中的边;96.s2.4、通过第一getnode算子获取过滤后的边集合中的边对应的目的节点,并对节点集合中的节点进行预处理并进行节点过滤,将符合查询条件的节点集合中的节点放入待处理节点队列和图拓扑构建模块,并将有目的节点对应的边集合中的边输入至所述图拓扑构件模块中。97.实施例398.本发明还公开了一种电子设备,包括至少一个处理器,以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上述的一种面向图计算的拓扑查询方法。99.实施例4100.本发明还公开了一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述的一种面向图计算的拓扑查询方法。101.本发明采用基于值域的算子分片技术,构建多条流水线同时处理反序列化后的数据,处理完成后的节点和边除了作为输入进行圈层扩展,同时也会汇聚到图拓扑构建模块进行拓扑构建。采用边过滤边构建的方式,降低查询处理时延。若节点数目巨大使得一台计算节点的资源负载严重,可以考虑增加计算节点,由一台主计算节点负载控制查询计划并生成最终图拓扑。需要做出的改动如下:102.a)对算子进行分片,通过对数据的基数估计,分配多台计算节点负责接受和处理存储层返回的数据。例如,预估圈层遍历的起始节点有10000个,则可以通过算子分片的方式,向两台计算节点分配查询任务,每台节点负责5000个起始节点及其后续的多圈层扩展。103.b)一次查询计划中仅主计算节点的图拓扑构建模块发挥作用,每台计算节点在获取存储层数据后,进行流水线处理,将过滤后的节点和边传到主节点,由主节点负责拓扑构建。104.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。105.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。106.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。107.本领域普通技术人员可以理解实现上述事实和方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,涉及的程序或者所述的程序可以存储于一计算机所可读取存储介质中,该程序在执行时,包括如下步骤:此时引出相应的方法步骤,所述的存储介质可以是rom/ram、磁碟、光盘等等。108.以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。









图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,发布内容不收取任何费用也不接任何广告!




免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

相关内容 查看全部