掌桥专利:专业的专利平台
掌桥专利
首页

一种Janusgraph客户端遍历方法及相关组件

文献发布时间:2023-06-19 10:05:17


一种Janusgraph客户端遍历方法及相关组件

技术领域

本申请涉及计算机软件技术领域,特别涉及一种Janusgraph客户端遍历方法、装置、设备及一种可读存储介质。

背景技术

Janusgraph是一个高度可扩展的分布式图数据库,专门用于存储和查询包含数千亿个分布在多机群集中的极点和边缘的图形。

目前,当Janusgraph客户端(包含用户程序以及连接Janusgraph Gremlin Server的中间件)通过Janusgraph-driver这一中间件连接远程Janusgraph Gremlin Server(Gremlin Server为Janusgraph的一种部署端)请求获取图数据库时,若查询结果较大,Janusgraph Gremlin Server会将该消息分成多个frame(在Janusgraph的实现中的一个应用层概念,多个frame构成一个消息)发送到客户端,以防止消息过大导致序列化超时,最后一个frame含有消息结束标志。Janusgraph-driver收到多个frame后重新组装该消息,当最后一个frame到达后,该消息组装完毕,并通知应用程序数据可用。

而在Janusgraph-driver等待多个frame到达并组装的过程中,应用程序(指业务程序,例如使用图数据库做关系分析等)对应的线程(客户端请求获取图数据库的查询结果的线程)将一直处于阻塞状态,导致应用程序线程等待时间较长,系统整体数据处理速度慢,用户体验差。

因此,如何缩短线程阻塞时间,缩短应用程序线程等待时间,提升系统整体数据处理速度,是本领域技术人员急需解决的问题。

发明内容

本申请的目的是提供Janusgraph客户端遍历方法,该方法可以缩短线程阻塞时间,缩短应用程序线程等待时间,提升系统整体数据处理速度;本申请的另一目的是提供Janusgraph客户端遍历装置、设备及一种可读存储介质。

为解决上述技术问题,本申请提供一种Janusgraph客户端遍历方法,包括:

Janusgraph客户端接收到图数据库查询请求后,生成RemoteStep异步任务,并向远程Janusgraph Gremlin Server提交查询任务;

若接收到反馈的查询结果帧,将所述查询结果帧添加至预先引入的阻塞队列中;

唤醒用户线程遍历所述阻塞队列中的查询结果帧进行数据处理。

可选地,在所述唤醒用户线程遍历所述阻塞队列中的查询结果帧进行数据处理之前,还包括:

判断所述阻塞队列中的帧数量是否达到触发值;

若达到,执行所述唤醒用户线程遍历所述阻塞队列中的查询结果帧进行数据处理的步骤;

若未达到,执行所述若接收到反馈的查询结果帧,将所述查询结果帧添加至预先引入的阻塞队列中的步骤。

可选地,在所述接收到反馈的查询结果帧之后,还包括:

判断所述查询结果帧是否为结束帧;

若是,结束查询结果帧的接收线程。

可选地,所述Janusgraph客户端遍历方法,其特征在于,还包括:

若所述查询结果帧为结束帧,生成消息接收完成的提示信息。

本申请还提供了一种Janusgraph客户端遍历装置,该装置包括:

任务提交单元,用于Janusgraph客户端接收到图数据库查询请求后,生成RemoteStep异步任务,并向远程Janusgraph Gremlin Server提交查询任务;

队列添加单元,用于若接收到反馈的查询结果帧,将所述查询结果帧添加至预先引入的阻塞队列中;

处理唤醒单元,用于唤醒用户线程遍历所述阻塞队列中的查询结果帧进行数据处理。

可选地,所述Janusgraph客户端遍历装置还包括:触发判断单元;

所述触发判断单元,用于在所述唤醒用户线程遍历所述阻塞队列中的查询结果帧进行数据处理之前,判断所述阻塞队列中的帧数量是否达到触发值;若达到,触发所述处理唤醒单元;若未达到,触发所述队列添加单元。

可选地,所述Janusgraph客户端遍历装置还包括:结束判断单元,用于在所述接收到反馈的查询结果帧之后,判断所述查询结果帧是否为结束帧;若是,结束查询结果帧的接收线程。

可选地,所述Janusgraph客户端遍历装置还包括:提示单元,用于在所述查询结果帧为结束帧时,生成消息接收完成的提示信息。

本申请还提供了一种Janusgraph客户端遍历设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现所述的Janusgraph客户端遍历方法的步骤。

本申请还提供了一种可读存储介质,所述可读存储介质上存储有程序,所述程序被处理器执行时实现所述的Janusgraph客户端遍历方法的步骤。

本申请所提供的Janusgraph客户端遍历方法中,取消使用join并引入阻塞队列,当客户端从Janusgraph Gremlin Server获取到查询结果帧后,不在等待该消息的所有帧到达,直接向上流动,把该结果帧信息放入到阻塞队列中,把原来以消息作为基本单位的批处理,变成以帧作为基本单位的批处理,使得客户端不必等待消息的最后一个frame到达便可以向应用程序线程发出通知,应用程序线程可以提前遍历并处理结果集,加快了数据处理速度,也有助于提升用户体验。

本申请还提供了一种Janusgraph客户端遍历装置、设备及一种可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为一种传统方式下的Janusgraph客户端遍历流程示意图;

图2为本申请实施例提供的一种Janusgraph客户端遍历方法的流程图;

图3为本申请实施例提供的一种Janusgraph客户端遍历流程示意图;

图4为本申请实施例提供的一种Janusgraph客户端遍历装置的结构框图;

图5为本申请实施例提供的一种Janusgraph客户端遍历设备的结构示意图。

具体实施方式

本申请的核心是提供Janusgraph客户端遍历方法,该方法可以缩短线程阻塞时间,缩短应用程序线程等待时间,提升系统整体数据处理速度;本申请的另一核心是提供Janusgraph客户端遍历装置、设备及一种可读存储介质。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

目前,传统方式下的Janusgraph客户端遍历流程示意图如图1所示,实现流程如下:

1、客户端将一个Gremlin Server查询抽象为一个RemoteStep单步,在RemoteStep里新建一个异步任务1,应用程序线程等待异步任务1完成。

2、在异步任务1中建立异步嵌套任务2,异步任务2的主要作用是把一些控制参数封装进消息内,如ARGS_BATCH_SIZE、ARGS_SCRIPT_EVAL_TIMEOUT等。

3、在异步任务2中建立嵌套异步任务3,异步任务3主要是选择连接并进行消息写入。实际上,由于当前Gremlin Server可以部署为一个集群,Janusgraph Gremlin Server会有多个,客户端对每个Janusgraph Gremlin Server都会维持一个连接,每一个连接都会有一个等待队列,用来存放即将要发送的数据。异步任务3的主要功能就是选择等待队列中数据较少的一个连接,并把任务附加到该连接的队列上。

在异步任务3中,首先向远程Janusgraph Gremlin Server提交查询任务,并从远程Janusgraph Gremlin Server中接收多个frame,组装成完整的消息。其中最后一个frame的事件标志位表明消息结束,其余frame的事件标志位表明消息尚未结束。在异步任务3等待Janusgraph Gremlin Server发送frame并组装的过程中,应用程序线程被阻塞。

异步任务3中,从所有frame组装完成消息后,标记异步任务3已完成,控制流向上流动,直至异步任务2完成,标记异步任务2已完成,控制流向上流动,直至异步任务1完成,同时把应用程序线程从阻塞状态变为就绪状态,等待cpu调度。

该种方式下在线程从异步任务1执行到异步任务2,再执行到异步任务3后,在异步任务3中将所有反馈结果信息接收完成后,再控制流向上流动,直至异步任务2完成,异步任务1完成后,应用程序线程才会从阻塞状态变为就绪状态,客户端接收到反馈的查询结果,线程阻塞时间较长相应地客户端等待时间也较长,应用程序响应慢,用户体验差。为避免上述情况,本申请中提出了一种Janusgraph客户端遍历方法,使得客户端不必等待消息的最后一个frame到达,在客户端收到查询结果帧后,便可以向应用程序线程发出通知,使得应用程序线程可以提前遍历并处理结果集,可以有效提升响应速度。

请参考图2,图2为本实施例提供的一种Janusgraph客户端遍历方法的流程图,该方法主要包括以下步骤:

步骤s110、Janusgraph客户端接收到图数据库查询请求后,生成RemoteStep异步任务,并向远程Janusgraph Gremlin Server提交查询任务;

Janusgraph客户端接收到图数据库查询请求后,生成RemoteStep异步任务,并向远程Janusgraph Gremlin Server提交查询任务的具体执行过程可以参照相关技术的介绍,本实施例中对此不做限定,具体可以包括以下步骤:

(1)客户端将一个Gremlin Server查询抽象为一个RemoteStep单步,在RemoteStep里新建一个异步任务1,应用程序线程等待异步任务1完成。

(2)在异步任务1中建立异步嵌套任务2,异步任务2的主要作用是把一些控制参数封装进消息内,如ARGS_BATCH_SIZE、ARGS_SCRIPT_EVAL_TIMEOUT等。

(3)在异步任务2中建立嵌套异步任务3,异步任务3主要是选择连接并进行消息写入。在异步任务3中,首先向远程Janusgraph Gremlin Server提交查询任务。

本实施例中仅以上述实现步骤为例进行介绍,其它实现方式下均可参照本实施例的介绍,在此不再赘述。

步骤s120、若接收到反馈的查询结果帧,将查询结果帧添加至预先引入的阻塞队列中;

在异步任务3中,从远程Janusgraph Gremlin Server中接收frame(查询结果帧),本实施例中无需等待接收到所有的frame,并将接收到的所有frame组装为完整的查询结果消息再启动后续的应用程序线程,为了加快应用程序线程响应时间,本实施例在RemoteStep步骤中取消使用join,即当前用户线程不在等待RemoteStep中的异步任务完成;并引入阻塞队列,当Client从Janusgraph Gremlin Server获取消息的一个frame后,不再等待该消息的所有frame到达,直接向上流动,把该frame的信息放入到阻塞队列中,这样用户线程不必等待消息完全到达,就可以开始遍历处理响应数据,加快了数据处理速度。

步骤s130、唤醒用户线程遍历阻塞队列中的查询结果帧进行数据处理。

当Client从Janusgraph Gremlin Server获取消息的一个frame后,不再等待该消息的所有frame到达,直接向上流动,把该frame的信息放入到阻塞队列中。

若阻塞队列内没有数据时,用户线程阻塞;一旦阻塞队列中添加有某消息的部分查询结果数据帧后,不等待该消息剩余数据帧到达,如图3所示,控制流立刻向上流动,唤醒用户线程进行数据处理,该种方式下仅在阻塞队列中没有数据的时候才进行线程阻塞,相比传统方法大大加快了数据的处理速度。这样,这样在队列上形成生产者-消费者模式,用户线程是消费者,RemoteStep的异步任务所在线程作为生产者,把原来以消息(包括所有查询结果)作为基本单位的批处理,变成以frame作为基本单位的批处理,这样用户线程不必等待消息完全到达,就可以开始遍历处理响应数据,加快了数据处理速度。使得底层收到较大的消息时,不再等待该消息完整到达便可以进行遍历处理,有助于减少内存消耗的同时提升响应速度。

需要说明的是,在唤醒用户线程根据部分消息(一部分查询结果帧)进行数据处理的过程可以参照传统方法中根据整个消息进行数据处理的过程,主要区别在于处理对象为整个消息还是部分消息,在此不再赘述。

基于上述介绍,本实施例提供的Janusgraph客户端遍历方法中,取消使用join并引入阻塞队列,当客户端从Janusgraph Gremlin Server获取到查询结果帧后,不在等待该消息的所有帧到达,直接向上流动,把该结果帧信息放入到阻塞队列中,把原来以消息作为基本单位的批处理,变成以帧作为基本单位的批处理,使得客户端不必等待消息的最后一个frame到达便可以向应用程序线程发出通知,应用程序线程可以提前遍历并处理结果集,加快了数据处理速度,也有助于提升用户体验。

上述实施例中提供了一种在阻塞队列中存在查询结果帧即触发用户线程对其进行数据处理的方法,而在一些应用线程下,存在一些数据处理的最低限制,为保障该些应用下的正常数据处理,在唤醒用户线程遍历阻塞队列中的查询结果帧进行数据处理之前,可以进一步执行以下步骤:

(1)判断阻塞队列中的帧数量是否达到触发值;

(2)若达到,执行唤醒用户线程遍历阻塞队列中的查询结果帧进行数据处理的步骤;

(3)若未达到,执行若接收到反馈的查询结果帧,将查询结果帧添加至预先引入的阻塞队列中的步骤。

本实施例中引入了数据帧的触发值,比如2个数据帧或者3个数据帧等,在阻塞队列中存储的数据帧的数量达到该触发值后再触发用户应用程序线程的处理,比如在阻塞队列中的数据帧达到2个后触发应用程序的处理,该种设置方法可以满足不同应用的数据处理要求,同时保障高效的数据处理速度。而其中,触发值的具体数值设定本实施例中不做限定,可以根据实际使用需要进行相应设定,在此不再赘述。

进一步地,基于上述实施例,在接收到反馈的查询结果帧之后,可以进一步执行以下步骤:

(1)判断查询结果帧是否为结束帧;

结束帧的判定可以根据帧中的事件标志位来判定,也可以从其他方便来判定,本实施例中对此不做限定。

(2)若是,结束查询结果帧的接收线程。

若查询结果帧非结束帧,则需要继续查询结果帧的接收线程,以便接收后续的查询结果,本实施例中对于该种情况下的处理方式不做限定,可以参照相关技术的介绍;若查询结果帧为结束帧,为了提升遍历速度,可以触发结束查询结果帧的接收线程,以提升应用的线程的流转速度,加速后续处理进程。

为了进一步提升线程流转的规范性,若查询结果帧为结束帧,可以进一步执行生成消息接收完成的提示信息的步骤,以实现线程间切换的有效区分。

当然,也可以不执行上述步骤,本实施例中对此不做限定。

请参考图4,图4为本实施例提供的Janusgraph客户端遍历装置的结构框图;该装置主要包括:任务提交单元110、队列添加单元120以及处理唤醒单元130。本实施例提供的Janusgraph客户端遍历装置可与上述Janusgraph客户端遍历方法相互对照。

其中,任务提交单元110主要用于Janusgraph客户端接收到图数据库查询请求后,生成RemoteStep异步任务,并向远程Janusgraph Gremlin Server提交查询任务;

队列添加单元120主要用于若接收到反馈的查询结果帧,将查询结果帧添加至预先引入的阻塞队列中;

处理唤醒单元130主要用于唤醒用户线程遍历阻塞队列中的查询结果帧进行数据处理。

可选地,Janusgraph客户端遍历装置还包括:触发判断单元;触发判断单元主要用于在唤醒用户线程遍历阻塞队列中的查询结果帧进行数据处理之前,判断阻塞队列中的帧数量是否达到触发值;若达到,触发处理唤醒单元;若未达到,触发队列添加单元。

可选地,Janusgraph客户端遍历装置还包括:结束判断单元,用于在接收到反馈的查询结果帧之后,判断查询结果帧是否为结束帧;若是,结束查询结果帧的接收线程。

可选地,Janusgraph客户端遍历装置还包括:提示单元,用于在查询结果帧为结束帧时,生成消息接收完成的提示信息。

本实施例提供一种Janusgraph客户端遍历设备,主要包括:存储器以及处理器。

其中,存储器用于存储程序;

处理器用于执行程序时实现如上述实施例介绍的Janusgraph客户端遍历方法的步骤,具体可参照上述Janusgraph客户端遍历方法的介绍。

请参考图5,为本实施例提供的Janusgraph客户端遍历设备的结构示意图,该Janusgraph客户端遍历设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)322(例如,一个或一个以上处理器)和存储器332,存储器332存储有一个或一个以上的计算机应用程序342或数据344。其中,存储器332可以是短暂存储或持久存储。存储在存储器332的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对数据处理设备中的一系列指令操作。更进一步地,中央处理器322可以设置为与存储器332通信,在Janusgraph客户端遍历设备301上执行存储介质330中的一系列指令操作。

Janusgraph客户端遍历设备301还可以包括一个或一个以上电源326,一个或一个以上有线或无线网络接口350,一个或一个以上输入输出接口358,和/或,一个或一个以上操作系统341,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。

上面图1所描述的Janusgraph客户端遍历方法中的步骤可以由本实施例介绍的Janusgraph客户端遍历设备的结构实现。

本实施例公开一种可读存储介质,其上存储有程序,程序被处理器执行时实现如上述实施例介绍的Janusgraph客户端遍历方法的步骤,具体可参照上述实施例中对Janusgraph客户端遍历方法的介绍。

该可读存储介质具体可以为U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可存储程序代码的可读存储介质。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的Janusgraph客户端遍历方法、装置、设备及可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

相关技术
  • 一种Janusgraph客户端遍历方法及相关组件
  • 一种客户端服务器间数据转换方法及相关组件
技术分类

06120112410159