请求的处理方法和装置、电子设备和存储介质与流程

文档序号:26278945发布日期:2021-08-13 19:35阅读:89来源:国知局
请求的处理方法和装置、电子设备和存储介质与流程

本申请涉及数据处理领域,尤其涉及一种请求的处理方法和装置、电子设备和存储介质。



背景技术:

在分布式数据库领域,通常采用非共享式架构,主要包括计算节点和存储节点。存储节点通常会基于开源的mysql(一种关系型数据库管理系统)等数据库二次开发后发展而来,从而实现数据和吞吐的横向扩展。

以mysql为例,当一个客户端的sql(structuredquerylanguage,结构化查询语言)请求到来时,计算节点会进行sql解析和查询优化,从而将sql改写成对应的子查询sql,并下发到相关的存储节点上。存储节点收到拆分后的子查询sql,再次进行sql解析和查询优化,生成执行计划;然后根据生成的执行计划进行数据处理,会对底层的存储引擎进行读写访问。在完成数据处理之后,存储节点将处理后的结果返回给计算节点。计算节点合并所有相关存储节点返回的结果,进行聚合计算后,最终将请求结果返回给客户端。

对于上述请求的处理方式,请求的处理过程繁琐,对于复杂sql,会造成较大的性能损耗。可见,相关技术中的请求的处理方式,存在由于请求的处理过程繁琐导致的性能损耗大的问题。



技术实现要素:

本申请提供了一种请求的处理方法和装置、电子设备和存储介质,以至少解决相关技术中的请求的处理方式存在由于请求的处理过程繁琐导致的性能损耗大的问题。

根据本申请实施例的一个方面,提供了一种请求的处理方法,包括:接收目标计算节点发送的目标请求信息和与所述目标请求信息对应的目标执行计划信息,其中,所述目标请求信息用于请求执行目标数据处理操作;根据所述目标执行计划信息执行所述目标请求信息所请求的所述目标数据处理操作,得到所述目标数据处理操作的处理结果;将所述目标数据处理操作的处理结果发送给所述目标计算节点;。

根据本申请实施例的另一个方面,还提供了一种请求的处理方法,包括:接收目标客户端发送的第一请求信息,其中,所述第一请求信息用于请求执行第一数据处理操作;对所述第一请求信息进行解析和优化,得到第二请求信息和与所述第二请求信息对应的执行计划信息,其中,所述第二请求信息用于请求执行与所述第一数据处理操作关联的第二数据处理操作;向存储节点发送所述第二请求信息和与所述第二请求信息对应的执行计划信息;接收所述存储节点发送的目标数据处理结果,其中,所述目标数据处理结果为所述存储节点根据与所述第二请求信息对应的执行计划信息,执行所述第二请求信息所请求的所述第二数据处理操作之后所得到的处理结果。

根据本申请实施例的又一个方面,还提供了一种请求消息的处理装置,包括:第一接收单元,用于接收目标计算节点发送的目标请求信息和与所述目标请求信息对应的目标执行计划信息,其中,所述目标请求信息用于请求执行目标数据处理操作;第一执行单元,用于根据所述目标执行计划信息执行所述目标请求信息所请求的所述目标数据处理操作,得到所述目标数据处理操作的处理结果;第一发送单元,用于将所述目标数据处理操作的处理结果发送给所述目标计算节点。

根据本申请实施例的又一个方面,还提供了一种请求消息的处理装置,包括:第二接收单元,用于接收目标客户端发送的第一请求信息,其中,所述第一请求信息用于请求执行第一数据处理操作;解析优化单元,用于对所述第一请求信息进行解析和优化,得到第二请求信息和与所述第二请求信息对应的执行计划信息,其中,所述第二请求信息用于请求执行与所述第一数据处理操作关联的第二数据处理操作;第二发送单元,用于向存储节点发送所述第二请求信息和与所述第二请求信息对应的执行计划信息;第三接收单元,用于接收所述存储节点发送的目标数据处理结果,其中,所述目标数据处理结果为所述存储节点根据与所述第二请求信息对应的执行计划信息,执行所述第二请求信息所请求的所述第二数据处理操作之后所得到的处理结果。

根据本申请实施例的又一个方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行上述任一实施例中的方法步骤。

根据本申请实施例的又一个方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的方法步骤。

在本申请实施例中,采用计算节点向存储节点直接下推执行计划信息的方式,接收目标计算节点发送的目标请求信息和与目标请求信息对应的目标执行计划信息,其中,目标请求信息用于请求执行目标数据处理操作;根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作,得到目标数据处理操作的处理结果;将目标数据处理操作的处理结果发送给目标计算节点,由于计算节点向存储节点直接下推执行计划信息,可以缩减存储节点的二次解析和优化过程,从而可以实现简化请求的处理过程的目的,达到了提高存储节点的处理效率、减少数据库性能损耗的技术效果,进而解决了相关技术中的请求的处理方式存在由于请求的处理过程繁琐导致的性能损耗大的问题。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。

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

图1是根据本申请实施例的一种可选的请求的处理方法的硬件环境的示意图;

图2是根据本申请实施例的一种可选的分布式数据库系统架构的示意图;

图3是根据本申请实施例的一种可选的请求的处理方法的流程示意图;

图4是根据本申请实施例的一种可选的请求的处理方法的示意图;

图5是根据本申请实施例的另一种可选的请求的处理方法的流程示意图;

图6是根据本申请实施例的一种可选的请求的处理方法的示意图;

图7是根据本申请实施例的又一种可选的请求的处理方法的流程示意图;

图8是根据本申请实施例的一种可选的请求的处理装置的结构框图;

图9是根据本申请实施例的另一种可选的请求的处理装置的结构框图;

图10是根据本申请实施例的一种可选的电子设备的结构框图。

具体实施方式

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

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本申请实施例的一个方面,提供了一种请求的处理方法。可选地,在本实施例中,上述请求的处理方法可以应用于如图1所示的由终端设备102和服务器104所构成的硬件环境中。如图1所示,服务器104通过网络与终端设备102进行连接,可用于为终端或终端上安装的客户端提供服务(如游戏服务、应用服务等),可在服务器上或独立于服务器设置数据库,用于为服务器104提供数据存储服务。

上述网络可以包括但不限于以下至少之一:有线网络,无线网络。上述有线网络可以包括但不限于以下至少之一:广域网,城域网,局域网,上述无线网络可以包括但不限于以下至少之一:wifi(wirelessfidelity,无线保真),蓝牙。终端设备102可以并不限定于为pc、手机、平板电脑等。

本申请实施例的请求的处理方法可以由服务器104执行,也可以由终端设备102执行,还可以是由服务器104和终端设备102共同执行。其中,终端设备102执行本申请实施例的请求的处理方法也可以是由安装在其上的客户端执行的。

上述服务器104可以是分布式数据库中的服务器。如图2所示,分布式数据库可以包含计算节点和存储节点,其中,计算节点可以与客户端进行通信连接。每个计算节点可以与至少一个存储节点进行通信连接,而每个存储节点可以与至少一个计算节点进行连接。

以由存储节点来执行本实施例中的请求的处理方法为例,图3是根据本申请实施例的一种可选的请求的处理方法的流程示意图,如图3所示,该方法的流程可以包括以下步骤:

步骤s302,接收目标计算节点发送的目标请求信息和与目标请求信息对应的目标执行计划信息,其中,目标请求信息用于请求执行目标数据处理操作。

本实施例中的请求的处理方法可以应用于在分布式数据库中处理客户端发送的请求信息的场景,例如,在mysql数据库中处理客户端发送的sql语句的场景。对于其他具有类似数据处理需求的场景,本实施例中的请求的处理方法同样适用。

如图4所示,在相关技术中的分布式数据库中,计算节点可以具备以下功能:sql解析,查询优化,并行执行请求;存储节点可以具备以下功能:sql解析,查询优化,通过对底层的存储引擎进行读写访问来执行处理。

在有请求到来时,计算节点向存储节点发送的是其生成的子请求信息(例如,子查询sql),其上的处理过程和通信方式包含如下几个步骤:

步骤1,计算节点对客户端发送来的sql请求(例如,selectcount(*)fromtbl1)进行词法解析和语法解析,形成抽象语法树;

步骤2,计算节点根据抽象语法树,通过基于规则或代价的优化策略,生成执行效率较优的执行计划;

步骤3,计算节点根据生成的执行计划,将sql改写成对应的子查询sql(例如,sql0:selectcount(*)fromtbl1_0,sql1:selectcount(*)fromtbl1_1),并下发到相关的存储节点上。

对于上述请求的处理方式,存储节点需要对接收到的子请求信息进行二次解析和优化,生成执行计划。

在本实施例中,除了请求信息以外,计算节点还将解析优化后的执行计划信息下推到存储节点。对于目标计算节点,其可以将目标请求信息(可以是子查询sql,例如,selectcount(*)fromtbl1_0)以及与目标请求信息对应的目标执行计划信息发送给目标存储节点,该目标请求信息用于请求该目标存储节点执行目标数据处理操作,例如,目标数据读写操作。

目标存储节点可以接收目标计算节点发送的目标请求信息以及目标执行计划信息。目标请求信息以及目标执行计划信息可以是通过请求消息携带的,即,目标存储节点可以接收目标计算节点发送的第一请求消息,该第一请求消息中携带有上述目标请求信息和目标执行计划信息。

上述目标执行计划信息可以与目标请求信息对应,其可以是目标计算节点由解析并优化其接收到的请求信息(例如,第一请求消息)到生成与其对应的执行计划的过程中所得到的信息,例如,抽象语法树,对抽象语法树进行解析所得到的逻辑计划,生成的执行计划等。

步骤s304,根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作,得到目标数据处理操作的处理结果。

相关技术中,存储节点收到请求信息(例如,拆分后的子查询sql)之后,会再次进行请求信息的解析(例如,sql解析)、查询优化,然后生成执行计划;然后,存储节点根据执行计划进行数据处理,对底层的存储引擎进行读写访问,进行数据处理。

对于上述方式,存储节点需要进行二次解析和优化,对于复杂的请求信息(例如,sql),将带来较大的性能损耗。在本实施例中,根据目标执行信息,目标存储节点可以获取到与该目标请求信息对应的目标执行计划,至少可以部分取消存储节点的二次解析和优化过程,从而提高存储节点的处理效率,进而提高分布式数据库的整体性能。

在得到目标执行计划之后,目标存储节点可以按照目标执行计划对底层的目标存储引擎进行读写访问,从而执行上述目标数据处理操作,得到目标数据处理操作的处理结果。

步骤s306,将目标数据处理操作的处理结果发送给目标计算节点。

在完成数据处理之后,目标存储节点可以将处理后的结果(即,目标数据处理操作的处理结果)返回给目标计算节点。在接收到目标数据处理操作的处理结果之后,目标计算节点可以执行后续的处理过程。

通过上述步骤s302至步骤s306,接收目标计算节点发送的目标请求信息和与目标请求信息对应的目标执行计划信息,其中,目标请求信息用于请求执行目标数据处理操作;根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作,得到目标数据处理操作的处理结果;将目标数据处理操作的处理结果发送给目标计算节点,解决了相关技术中的请求的处理方式存在由于请求的处理过程繁琐导致的性能损耗大的问题,提高了存储节点的处理效率,减少了数据库性能损耗。

作为一种可选的实施例,接收目标计算节点发送的目标请求信息和与目标请求信息对应的目标执行计划信息包括:

s11,接收目标计算节点发送的目标数据包,其中,目标数据包是基于目标通信协议对初始数据包进行压缩得到的数据包,初始数据包中封装有目标请求信息和目标执行计划信息。

计算节点和存储节点的通信方式采用的一般是存储节点自身的数据库协议,比如,mysql协议。为了取消存储节点上不必要的解析和优化过程,需要将计算节点生成的执行计划下推到存储节点,因此,无法依赖现有的mysql协议。可以对现有的mysql协议进行改进,以兼容上述场景。

可选地,在本实施例中,为了提高通讯方式的扩展性和兼容性,以及降低网络带宽,提高节点之间的网络吞吐,可以使用自定义的通信协议,即,目标通信协议。该目标通信协议可以具备较好的压缩能力,通过对网络中传输的数据包进行压缩,从而减少网络传输所需的数据量。

例如,目标通信协议可以是protobuf(protocolbuffers,是一种数据描述语言,用于描述一种轻便高效的结构化数据存储格式)通信协议。protobuf协议具备较好的压缩能力,能够使用压缩后的数据包,提高了节点间网络通信的带宽。

目标计算节点可以基于目标通信协议对待传输给目标存储节点的初始数据包进行压缩,得到目标数据包,并将目标数据包发送给目标存储节点。这里,初始数据包中封装有目标请求信息和目标执行计划信息。目标存储节点在接收到目标压缩包之后,可以对该目标数据包进行一定处理,例如,解压缩等,从中提取出目标请求信息和目标执行计划信息。

通过本实施例,通过基于具有数据压缩能力的通信协议对传输的数据包进行压缩,可以提高节点间网络通信的带宽,降低请求信息的处理延时。

作为一种可选的实施例,在根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作之前,上述方法还包括:

s21,通过目标调度线程从目标连接池的多个执行线程中选取出第一执行线程,其中,第一执行线程为处于空闲状态的执行线程,第一执行线程用于执行目标请求信息。

存储节点上可以包含server层(即,服务层)和存储引擎层。相关技术中,一个连接由server层的一个连接线程来处理(mysql通信协议是一个连接线程只能处理一个请求),通过该连接线程对请求信息进行解析和查询优化,进而生成对应的执行计划,再调用存储引擎对应的工作线程按照执行计划进行对应的数据处理,例如,数据读写。

对于mysql处理请求时针对每一个sql请求对应一个执行线程的方式,当有高并发的请求(即,高并发访问)时,会消耗大量的连接资源,也即,存储节点上大量的cpu(centralprocessingunit,中央处理器)和内存资源。

可选地,在本实施例中,为了提高分布式数据库的整体吞吐性能,存储节点可以使用异步化的连接池管理机制来管理高并发连接,保证在限定的连接内可以处理高并发的请求(例如,sql请求)。可以将server层的连接线程拆分成两种不同类型的线程,即,调度线程和执行线程。对应地,连接池中可以包含一个调度线程和多个执行线程。对于目标存储节点,该目标存储节点的目标连接池中可以包含一个目标调度线程和多个执行线程。

在接收到目标请求信息之后,目标调度线程可以从目标连接池中的多个执行线程中选择一个用于处理该目标请求信息的空闲执行线程,选取出的空闲执行线程为第一执行线程。目标调度线程可以将该目标请求信息分配给第一执行线程,由第一执行线程执行该目标请求信息。

例如,当存储节点收到计算节点下发的protobuf协议请求时,连接池中的调度线程会从连接池中选择空闲的执行线程用于处理当前请求。

通过本实施例,通过使用连接池进行异步管理,增大了业务高峰时可承载的并发量,同时也提升了整体吞吐性能。

作为一种可选的实施例,在根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作的过程中,上述方法还包括:

s31,在第一执行线程由于将目标请求信息转给目标存储引擎中的工作线程进行处理而处于等待状态的情况下,将第一执行线程挂起,其中,挂起后的第一执行线程处于空闲状态,工作线程用于执行目标请求信息所请求的目标数据处理操作。

在处理目标请求信息的过程中,在得到该目标请求信息的目标执行计划之后,第一执行线程可以执行该目标执行计划,生成获取数据的方法方案,并交由存储引擎层(即,目标存储引擎)继续处理。

在将目标请求信息转给目标存储引擎中的工作线程进行处理之后,该第一执行线程处于等待状态。如果第一执行线程被该目标请求信息独占,即,该第一执行线程只有在目标请求信息处理完成之后,才会再次处于空闲状态,那么,在目标请求信息的处理过程较长时,第一执行线程可能会处于等待状态一定时间,从而浪费该执行线程的资源。

为了提高执行线程使用的合理性,可以通过分时复用的方式进行执行线程的复用。如果第一执行线程由于将目标请求信息转给目标存储引擎中的工作线程进行处理而处于等待状态,目标调度线程可以将该第一执行线程挂起。被挂起的执行线程处于空闲状态,从而可以用于处理其他的请求。

通过本实施例,在执行线程处于等待时,将该执行线程挂起,从而可以使用该执行线程处理其他的请求,可以增大可承载的并发量,提高分布式数据库整体的吞吐性能。

作为一种可选的实施例,在将第一执行线程挂起之后,上述方法还包括:

s41,在工作线程执行完目标请求信息所请求的目标数据处理操作之后,通过目标调度线程从多个执行线程中选取出第二执行线程,其中,第二执行线程为处于空闲状态的执行线程;

s42,通过第二执行线程执行目标处理操作,其中,目标处理操作为除了目标数据处理操作以外,执行目标请求信息所需的处理操作。

目标存储引擎中的工作线程在执行完目标请求信息所请求的目标数据处理操作(例如,数据读写操作)之后,可以将目标请求信息转给server层的执行线程继续进行后续处理(即,目标处理操作),例如,将目标数据处理操作缓存到缓存中等。

如果第一执行线程处于空闲状态,目标调度线程可以直接选取出第一执行线程,由该第一执行线程继续执行该目标请求信息的后续处理。如果第一执行线程处于非空闲状态,也可以等待第一执行线程处于空闲状态之后,再由第一执行线程继续执行该目标请求信息的后续处理。

可选地,在本实施例中,为了提高请求的处理效率,等当前请求在存储引擎层处理完成之后,调度线程可以从连接池中再选择一个空闲的执行线程继续处理该请求。例如,对于目标请求信息,目标调度线程可以目标连接池选取出空闲的一个执行线程,即,第二执行线程,由该第二执行线程继续目标请求信息后续的处理(例如,目标处理操作)。例如,拿到对应保存的状态信息之后,除了第一执行线程以外的其他执行线程也能够继续执行后续的处理。

通过本实施例,在存储引擎层执行完数据读写操作之后,重新从连接池中选取执行线程继续执行后续的处理,可以提高执行线程的利用效率,提高分布式数据库的吞吐性能。

作为一种可选的实施例,目标执行计划信息包括与目标请求信息对应的目标抽象语法树。对应地,在本实施例中,根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作,得到目标数据处理操作的处理结果包括:

s51,对目标抽象语法树进行解析和优化,得到目标执行计划;

s52,按照目标执行计划执行目标请求信息所请求的目标数据处理操作,得到目标数据处理操作的处理结果。

目标存储节点可以对目标抽象语法树进行解析和优化,例如,可以对目标抽象语法树进行解析,得到目标逻辑计划,该目标逻辑计划包含了目标请求信息的数据处理逻辑及顺序。这里,逻辑处理顺序是指目标请求信息应该如何执行,每一个关键字、子句部分在什么时刻执行。目标存储节点可以基于规则和/或基于代价对目标逻辑计划进行优化,从而生成执行效率较优的目标执行计划。

在得到目标执行计划之后,目标存储节点可以按照目标执行计划执行目标请求信息所请求的目标数据处理操作,从而得到目标数据处理操作的处理结果。这里,生成目标执行计划可以是由上述第一执行线程所执行的,而按照目标执行计划执行目标请求信息所请求的目标数据处理操作可以是由第一执行线程和目标存储引擎中的工作线程共同执行的。

需要说明的是,目标计算节点也可以将目标请求信息的执行计划直接下推给目标存储节点,目标存储节点直接基于下推目标请求信息的执行计划执行目标数据处理操作,例如,直接根据执行计划,对存储引擎进行数据读取和写入操作。考虑到在进行执行计划优化时需要根据数据分布、数据量等计算代价,由存储节点执行根据目标抽象语法树生成目标执行计划具有更高的准确性。

通过本实施例,通过计算节点向存储节点下推请求信息的抽象语法树,可以提高执行计划生成的准确性。

根据本申请实施例的另一个方面,还提供了一种请求的处理方法。可选地,在本实施例中,上述请求的处理方法可以应用于如图1所示的由终端设备102和服务器104所构成的硬件环境中,已经进行过说明的,在此不做赘述。

以由计算节点来执行本实施例中的请求的处理方法为例,图5是根据本申请实施例的另一种可选的请求的处理方法的流程示意图,如图5所示,该方法的流程可以包括以下步骤:

s502,接收目标客户端发送的第一请求信息,其中,第一请求信息用于请求执行第一数据处理操作。

本实施例中的请求的处理方法可以应用于在与前述类似的分布式数据库中处理客户端发送的请求信息的场景,已经进行过描述的,在此不做赘述。可选地,本实施例中的请求的处理方法可以是由计算节点执行的。

目标计算节点可以接收目标客户端发送的第一请求信息,该第一请求信息用于请求执行第一数据处理操作,例如,数据读写操作。第一请求信息可以是sql请求,例如,selectcount(*)fromtbl1。该第一请求信息可以是通过请求消息携带的,即,目标计算节点可以接收目标客户端发送的第二请求消息,该第二请求消息中携带有上述第一请求信息。

s504,对第一请求信息进行解析和优化,得到第二请求信息和与第二请求信息对应的执行计划信息,其中,第二请求信息用于请求执行与第一数据处理操作关联的第二数据处理操作。

目标计算节点可以对第一请求信息进行解析和优化(例如,sql解析和查询优化)。对第一请求信息执行的解析可以包括但不限于:解析和语法解析,解析的结果可以是第一请求信息的抽象语法树。

根据第一请求信息的抽象语法树,目标计算节点可以通过基于规则或代价的优化策略,生成执行效率较优的执行计划,并根据生成的执行计划,将第一请求信息写成对应的子请求信息,即,第二请求信息。第二请求信息可以是第一请求信息的子请求信息,用于请求执行与第一数据处理操作关联的第二数据处理操作,例如,第一数据处理操作的子操作。

在将第一请求信息改写成第二请求信息的过程中,目标计算节点可以获取到与第二请求信息对应的执行计划信息,例如,与第二请求信息对应的抽象语法树,与第二请求信息对应的执行计划。

该第二请求信息的数量可以为一个或多个。每个第二请求信息可以对应于一个存储节点,用于请求该存储节点执行上述第二数据处理操作。在第二请求信息为多个时,不同的第二请求信息所对应的存储节点是不同的,不同的第二请求信息所请求执行的第二数据处理操作可以是不同的。

需要说明的是,第一请求信息可以用于请求对目标逻辑表执行第一数据处理操作,而第二请求信息可以用于请求对目标逻辑表的物理子表执行第二数据处理操作。由于不同的存储节点上存储的该目标逻辑表的物理子表是不同的,因此,不同的第二请求信息所请求执行的第二数据处理操作也是不同的。

s506,向存储节点发送第二请求信息和与第二请求信息对应的执行计划信息。

目标计算节点可以向存储节点发送第二请求信息和与第二请求信息对应的执行计划信息。在第二请求信息为多个时,目标计算节点可以分别将各个第二请求信息以及与各个第二请求信息对应的执行计划信息发送给对应的存储节点。

第二请求信息和与第二请求信息对应的执行计划信息可以是通过请求消息的方式发送的,即,目标计算节点可以向存储节点发送第三请求消息,该第三请求消息中携带有第二请求信息和与第二请求信息对应的执行计划信息。

需要说明的是,第二请求信息可以为上述实施例中的目标请求信息,与第二请求信息对应的执行计划信息可以为上述实施例中的目标执行计划信息,而第二数据处理操作可以为上述实施例中的目标数据处理操作。对应地,存储节点可以为上述实施例中的目标存储节点,第三请求消息可以为上述实施例中的第一请求消息。

s508,接收存储节点发送的目标数据处理结果,其中,目标数据处理结果为存储节点根据与第二请求信息对应的执行计划信息,执行第二请求信息所请求的第二数据处理操作之后所得到的处理结果。

在接收到第二请求信息和与第二请求信息对应的执行计划信息之后,存储节点可以采用与前述类似的方式得到第二数据处理操作的处理结果,即,目标数据处理结果,并将目标数据处理结果发送给目标计算节点。

目标计算节点可以接收存储节点发送的上述目标数据处理结果。在存储节点为多个时,目标计算节点可以接收到多个目标数据处理结果。对于接收到的目标数据处理结果,目标计算节点可以在合并所有相关存储节点返回的目标数据处理结果、进行聚合计算之后,将最终的请求结果返回给目标客户端。

通过上述步骤s502至步骤s508,接收目标客户端发送的第一请求信息,其中,第一请求信息用于请求执行第一数据处理操作;对第一请求信息进行解析和优化,得到第二请求信息和与第二请求信息对应的执行计划信息,其中,第二请求信息用于请求执行与第一数据处理操作关联的第二数据处理操作;向存储节点发送第二请求信息和与第二请求信息对应的执行计划信息;接收存储节点发送的目标数据处理结果,其中,目标数据处理结果为存储节点根据与第二请求信息对应的执行计划信息,执行第二请求信息所请求的第二数据处理操作之后所得到的处理结果,解决了相关技术中的请求的处理方式存在由于请求的处理过程繁琐导致的性能损耗大的问题,提高了存储节点的处理效率,减少了数据库性能损耗。

作为一种可选的实施例,对第一请求信息进行解析和优化,得到第二请求信息和与第二请求信息对应的执行计划信息包括:

s61,对第一请求信息进行解析和优化,得到第二请求信息和与第二请求信息对应的抽象语法树,其中,与第二请求信息对应的执行计划信息为与第二请求信息对应的抽象语法树。

与前述实施例中类似的,与第二请求信息对应的执行计划信息可以是与第二请求信息对应的抽象语法树。对应地,目标计算节点可以对第一请求信息进行解析和优化,得到第二请求信息和与第二请求信息对应的抽象语法树。

通过本实施例,通过计算节点向存储节点下推请求信息的抽象语法树,可以提高执行计划生成的准确性。

作为一种可选的实施例,向存储节点发送第二请求信息和与第二请求信息对应的执行计划信息包括:

s71,基于目标通信协议对第一数据包进行压缩,得到第二数据包,其中,第一数据包中封装有第二请求信息和与第二请求信息对应的执行计划信息;

s72,向存储节点发送第二数据包。

与前述实施例中类似的,目标计算节点向存储节点发送的可以是基于目标通信协议压缩后的数据包,已经进行过描述的,在此不做赘述。

目标计算节点可以首先将第二请求信息和与第二请求信息对应的执行计划信息封装到第一数据包(可以是前述初始数据包),然后基于目标通信协议(例如,protobuf通信协议)对第一数据包进行压缩,得到第二数据包(可以是前述目标数据包),并向存储节点发送该第二数据包。

通过本实施例,通过基于具有数据压缩能力的通信协议对传输的数据包进行压缩,可以提高节点间网络通信的带宽,降低请求信息的处理延时。

下面结合可选示例对本申请实施例中的请求的处理方法进行解释说明。在可选本示例中提供的是一种高性能的分布式数据库通信方案,该分布式数据库为mysql数据库。

在本可选示例中,计算节点和存储节点之间使用自定义的通讯协议,即,自定的protobuf通信协议,包括sql请求信息和解析优化后的执行计划;存储节点使用异步化的连接池管理机制,保证在限定的连接内可以处理高并发的sql请求。

如图6所示,本可选示例中的请求的处理方法的流程可以包括以下步骤:

步骤s602,计算节点对客户端发送来的sql请求进行sql解析和查询优化,将sql请求改写成对应的子查询sql。

计算节点可以首先对客户端发送来的sql请求进行词法解析和语法解析,形成抽象语法树;然后,根据抽象语法树,通过基于规则或代价的优化策略,生成执行效率较优的执行计划;最后,根据生成的执行计划,将sql改写成对应的子查询sql。

步骤s604,计算节点将子查询sql的请求信息以及执行计划信息下推给存储节点。

计算节点和存储节点之间使用自定义的通讯协议(如图7所示,可以是自定义的protobuf协议)替代传统协议,以降低sql查询延时。自定义的通信协议中除了需要保持sql的请求信息以外,还需要包含执行计划信息。例如,计算节点向存储节点发送的子查询sql的请求信息以及执行计划信息可以是:selectcount(*)fromtbl1_0withplan0,selectcount(*)fromtbl1_1withplan1。

步骤s606,在收到子查询sql的请求信息以及执行计划信息之后,存储节点直接根据执行计划,对存储引擎进行数据读取和写入操作,并向计算节点返回处理后的结果。

当存储节点收到protobuf协议内容时,不用再进行sql解析和优化过程,直接根据执行计划,对存储引擎进行数据读取和写入操作,并在完成数据处理之后,将处理后的结果返回给计算节点。

此外,为了保证在限定的连接内可以处理高并发的sql请求,存储节点使用异步化的连接池管理机制。如图7所示,连接池管理模块中包含1个调度线程和多个执行线程。当存储节点收到计算节点下发的protobuf协议请求时,连接池中的调度线程会从连接池中选择空闲的执行线程用于处理当前请求。如果处理过程较长,该执行线程处于等待中,调度线程可以将该执行线程挂起,用于处理其他的请求。等当前请求处理完成之后,调度线程可以再选择一个空闲执行线程继续处理该请求。

关于上述执行线程处于等待中,假设有一个sql语句,在存储引擎的执行过程有可能是在数据读写,这里是底层的存储引擎的访问。而执行线程是server层的线程,在把命令转发为更底层的读写操作(例如,数据访问、改写计算等),执行线程需要等待更底层的处理完成之后才能够再次被调用。

步骤s608,计算节点合并所有相关存储节点返回的结果、并进行聚合计算之后,将最终的请求结果返回给客户端。

通过本示例,计算节点使用自定义的通信协议,将解析优化后的执行计划下推到存储节点,取消存储节点的二次解析和优化(即,去掉存储节点上不必要的解析和优化过程),降低sql请求响应延时;存储节点使用连接池管理高并发连接,降低存储节点在高并发下的连接损耗,提高分布式数据库的整体吞吐性能。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom(read-onlymemory,只读存储器)/ram(randomaccessmemory,随机存取存储器)、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。

根据本申请实施例的又一个方面,还提供了一种用于实施上述请求的处理方法的请求的处理装置。图8是根据本申请实施例的一种可选的请求的处理装置的结构框图,如图8所示,该装置可以包括:

第一接收单元802,用于接收目标计算节点发送的目标请求信息和与所述目标请求信息对应的目标执行计划信息,其中,所述目标请求信息用于请求执行目标数据处理操作;

第一执行单元804,与第一接收单元802相连,用于根据所述目标执行计划信息执行所述目标请求信息所请求的所述目标数据处理操作,得到所述目标数据处理操作的处理结果;

第一发送单元806,与执行单元804相连,用于将所述目标数据处理操作的处理结果发送给所述目标计算节点。

需要说明的是,该实施例中的第一接收单元802可以用于执行上述步骤s302,该实施例中的第一执行单元804可以用于执行上述步骤s304,该实施例中的第一发送单元806可以用于执行上述步骤s306。

通过上述模块,接收目标计算节点发送的目标请求信息和与目标请求信息对应的目标执行计划信息,其中,目标请求信息用于请求执行目标数据处理操作;根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作,得到目标数据处理操作的处理结果;将目标数据处理操作的处理结果发送给目标计算节点,解决了相关技术中的请求的处理方式存在由于请求的处理过程繁琐导致的性能损耗大的问题,提高了存储节点的处理效率,减少了数据库性能损耗。

作为一种可选的实施例,第一接收单元802包括:

接收模块,用于接收目标计算节点发送的目标数据包,其中,目标数据包是基于目标通信协议对初始数据包进行压缩得到的数据包,初始数据包中封装有目标请求信息和目标执行计划信息。

作为一种可选的实施例,上述装置还包括:

第一选取单元,用于在根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作之前,通过目标调度线程从目标连接池的多个执行线程中选取出第一执行线程,其中,第一执行线程为处于空闲状态的执行线程,第一执行线程用于执行目标请求信息。

作为一种可选的实施例,上述装置还包括:

挂起单元,用于在根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作的过程中,在第一执行线程由于将目标请求信息转给目标存储引擎中的工作线程进行处理而处于等待状态的情况下,将第一执行线程挂起,其中,挂起后的第一执行线程处于空闲状态,工作线程用于执行目标请求信息所请求的目标数据处理操作。

作为一种可选的实施例,上述装置还包括:

第二选取单元,用于在将第一执行线程挂起之后,在工作线程执行完目标请求信息所请求的目标数据处理操作之后,通过目标调度线程从多个执行线程中选取出第二执行线程,其中,第二执行线程为处于空闲状态的执行线程;

第二执行单元,用于通过第二执行线程执行目标处理操作,其中,目标处理操作为除了目标数据处理操作以外,执行目标请求信息所需的处理操作。

作为一种可选的实施例,目标执行计划信息包括与目标请求信息对应的目标抽象语法树。可选地,在本实施例中,第一执行单元804包括:

第一解析优化模块,用于对目标抽象语法树进行解析和优化,得到目标执行计划;

执行模块,用于按照目标执行计划执行目标请求信息所请求的目标数据处理操作,得到目标数据处理操作的处理结果。

根据本申请实施例的又一个方面,还提供了一种用于实施上述请求的处理方法的请求的处理装置。图9是根据本申请实施例的另一种可选的请求的处理装置的结构框图,如图9所示,该装置可以包括:

第二接收单元902,用于接收目标客户端发送的第一请求信息,其中,第一请求信息用于请求执行第一数据处理操作;

解析优化单元904,与第二接收单元902相连,用于对第一请求信息进行解析和优化,得到第二请求信息和与第二请求信息对应的执行计划信息,其中,第二请求信息用于请求执行与第一数据处理操作关联的第二数据处理操作;

第二发送单元906,与解析优化单元904相连,用于向存储节点发送第二请求信息和与第二请求信息对应的执行计划信息;

第三接收单元908,与第二发送单元906相连,用于接收存储节点发送的目标数据处理结果,其中,目标数据处理结果为存储节点根据与第二请求信息对应的执行计划信息,执行第二请求信息所请求的第二数据处理操作之后所得到的处理结果。

需要说明的是,该实施例中的第二接收单元902可以用于执行上述步骤s502,该实施例中的解析优化单元904可以用于执行上述步骤s504,该实施例中的第二发送单元906可以用于执行上述步骤s506,该实施例中的第三接收单元908可以用于执行上述步骤s508。

通过上述模块,接收目标客户端发送的第一请求信息,其中,第一请求信息用于请求执行第一数据处理操作;对第一请求信息进行解析和优化,得到第二请求信息和与第二请求信息对应的执行计划信息,其中,第二请求信息用于请求执行与第一数据处理操作关联的第二数据处理操作;向存储节点发送第二请求信息和与第二请求信息对应的执行计划信息;接收存储节点发送的目标数据处理结果,其中,目标数据处理结果为存储节点根据与第二请求信息对应的执行计划信息,执行第二请求信息所请求的第二数据处理操作之后所得到的处理结果,解决了相关技术中的请求的处理方式存在由于请求的处理过程繁琐导致的性能损耗大的问题,提高了存储节点的处理效率,减少了数据库性能损耗。

作为一种可选的实施例,解析优化单元包括:

第二解析优化模块,用于对第一请求信息进行解析和优化,得到第二请求信息和与第二请求信息对应的抽象语法树,其中,与第二请求信息对应的执行计划信息为与第二请求信息对应的抽象语法树。

作为一种可选的实施例,第二发送单元包括:

压缩模块,用于基于目标通信协议对第一数据包进行压缩,得到第二数据包,其中,第一数据包中封装有第二请求信息和与第二请求信息对应的执行计划信息;

发送模块,用于向存储节点发送第二数据包。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。

根据本申请实施例的又一个方面,还提供了一种用于实施上述请求的处理方法的电子设备,该电子设备可以是服务器、终端、或者其组合。

图10是根据本申请实施例的一种可选的电子设备的结构框图,如图10所示,包括处理器1002、通信接口1004、存储器1006和通信总线1008,其中,处理器1002、通信接口1004和存储器1006通过通信总线1008完成相互间的通信,其中,

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

处理器1002,用于执行存储器1006上所存放的计算机程序时,实现如下步骤:

接收目标计算节点发送的目标请求信息和与目标请求信息对应的目标执行计划信息,其中,目标请求信息用于请求执行目标数据处理操作;

根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作,得到目标数据处理操作的处理结果;

将目标数据处理操作的处理结果发送给目标计算节点。

可选地,处理器1002,用于执行存储器1006上所存放的计算机程序时,实现如下步骤:

接收目标客户端发送的第一请求信息,其中,第一请求信息用于请求执行第一数据处理操作;

对第一请求信息进行解析和优化,得到第二请求信息和与第二请求信息对应的执行计划信息,其中,第二请求信息用于请求执行与第一数据处理操作关联的第二数据处理操作;

向存储节点发送第二请求信息和与第二请求信息对应的执行计划信息;

接收存储节点发送的目标数据处理结果,其中,目标数据处理结果为存储节点根据与第二请求信息对应的执行计划信息,执行第二请求信息所请求的第二数据处理操作之后所得到的处理结果。

可选地,在本实施例中,上述的通信总线可以是pci(peripheralcomponentinterconnect,外设部件互连标准)总线、或eisa(extendedindustrystandardarchitecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括ram,也可以包括非易失性存储器(non-volatilememory),例如,至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。

作为一种示例,上述存储器1006中可以但不限于包括上述请求的处理装置中的第一接收单元802、第一执行单元804以及第一发送单元806。此外,还可以包括但不限于上述请求的处理装置中的其他模块单元,本示例中不再赘述。

作为另一种示例,上述存储器1006中可以但不限于包括上述请求的处理装置中的第二接收单元902、解析优化单元904、第二发送单元906以及第三接收单元908。此外,还可以包括但不限于上述请求的处理装置中的其他模块单元,本示例中不再赘述。

上述处理器可以是通用处理器,可以包含但不限于:cpu、np(networkprocessor,网络处理器)等;还可以是dsp(digitalsignalprocessing,数字信号处理器)、asic(applicationspecificintegratedcircuit,专用集成电路)、fpga(field-programmablegatearray,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

本领域普通技术人员可以理解,图10所示的结构仅为示意,实施上述请求的处理方法的设备也可以是终端设备,该终端设备可以是智能手机(如android手机、ios手机等)、平板电脑、掌上电脑以及移动互联网设备(mobileinternetdevices,mid)、pad等终端设备。图10其并不对上述电子设备的结构造成限定。例如,电子设备还可包括比图10中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图10所示的不同的配置。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、rom、ram、磁盘或光盘等。

根据本申请实施例的又一个方面,还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行本申请实施例中上述任一项请求的处理方法的程序代码。

可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:

接收目标计算节点发送的目标请求信息和与目标请求信息对应的目标执行计划信息,其中,目标请求信息用于请求执行目标数据处理操作;

根据目标执行计划信息执行目标请求信息所请求的目标数据处理操作,得到目标数据处理操作的处理结果;

将目标数据处理操作的处理结果发送给目标计算节点。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:

接收目标客户端发送的第一请求信息,其中,第一请求信息用于请求执行第一数据处理操作;

对第一请求信息进行解析和优化,得到第二请求信息和与第二请求信息对应的执行计划信息,其中,第二请求信息用于请求执行与第一数据处理操作关联的第二数据处理操作;

向存储节点发送第二请求信息和与第二请求信息对应的执行计划信息;

接收存储节点发送的目标数据处理结果,其中,目标数据处理结果为存储节点根据与第二请求信息对应的执行计划信息,执行第二请求信息所请求的第二数据处理操作之后所得到的处理结果。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例中对此不再赘述。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、rom、ram、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例中所提供的方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以至少两个单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1