SQL查询命令处理方法、装置、设备及可读存储介质与流程

文档序号:20838881发布日期:2020-05-22 17:14阅读:162来源:国知局
SQL查询命令处理方法、装置、设备及可读存储介质与流程

本发明涉及数据处理技术领域,尤其涉及一种sql查询命令处理方法、装置、设备及可读存储介质。



背景技术:

查询引擎impala是cloudera在受到google的dremel启发下开发的实时交互sql大数据查询工具,查询引擎impala中负责执行sql查询命令的集群节点称为impalad节点。常用的sql查询命令处理是依次将sql查询命令派发至各个impalad节点进行处理,当前一个impalad节点无法处理时,再派发至后一个impalad节点,这种方式,会导致部分impalad节点负载过重,导致整个impala集群宕机,进而影响响应sql查询命令的速度。



技术实现要素:

本发明的主要目的在于提供一种sql查询命令处理方法、装置、设备及可读存储介质,旨在保证查询引擎各节点的负载均衡,从而提升查询引擎的性能,进而提高响应sql查询命令的速度。

为实现上述目的,本发明提供一种sql查询命令处理方法,所述方法包括以下步骤:

在接收到sql查询命令时,确定所述sql查询命令对应的执行计划的资源消耗;

将所述sql查询命令对应的执行计划的资源消耗,与预设阈值进行比对;

若所述sql查询命令对应的执行计划的资源消耗小于预设阈值,则确定查询引擎集群中各节点的任务承载能力;

根据所述各节点的所述任务承载能力,从所述各节点中确定执行所述sql查询命令的目标节点,并将所述sql查询命令分配至所述目标节点。

可选地,所述确定所述sql查询命令对应的执行计划的资源消耗的步骤包括:

查找所述待执行查询命令对应的执行计划,并对所述执行计划进行解析,以获取所述执行计划的参数;

根据所述执行计划的参数,查找所述执行计划的资源消耗。

可选地,所述确定查询引擎集群中各节点的任务承载能力的步骤包括:

获取查询引擎集群中各节点等待被执行的sql查询命令数;

根据所述各节点等待被执行的sql查询命令数,确定所述各节点的任务承载能力。

可选地,所述根据所述各节点等待被执行的sql查询命令数,确定所述各节点的任务承载能力的步骤包括:

计算查询引擎集群执行单个sql查询命令的平均时间;

根据查询引擎集群执行单个sql查询命令的所述平均时间,以及,所述各节点等待被执行的sql查询命令数,计算所述各节点的预等待时间;

根据所述各节点的预等待时间,确定所述各节点的任务承载能力。

可选地,所述计算查询引擎集群执行单个sql查询命令的平均时间的步骤包括:

选取当前之前待计算的各预设时间段,其中,每个预设时间段的时长相同;

获取查询引擎集群在每个预设时间段内完成的sql查询命令总数;

根据查询引擎集群在每个预设时间段内完成的所述sql查询命令总数,计算查询引擎集群在每个预设时间段内的单个sql查询命令完成时间;

计算所述单个sql查询命令完成时间的均值,作为查询引擎集群执行单个sql查询命令的平均时间。

可选地,所述根据所述各节点的所述任务承载能力,从所述各节点中确定执行所述sql查询命令的目标节点的步骤包括:

对所述各节点的所述任务承载能力按大小进行排序;

选取任务承载能力最大的节点,作为执行所述sql查询命令的目标节点。

可选地,所述确定查询引擎集群中各节点的任务承载能力的步骤之前,包括:

判断所述sql查询命令是否属于可信sql查询命令;

若是,则执行步骤:确定查询引擎集群中各节点的任务承载能力。

此外,为实现上述目的,本发明还提供一种sql查询命令处理装置,所述sql查询命令处理装置包括:

资源消耗确定模块,用于在接收到sql查询命令时,确定所述sql查询命令对应的执行计划的资源消耗;

比对模块,用于将所述sql查询命令对应的执行计划的资源消耗,与预设阈值进行比对;

任务承载能力确定模块,用于若所述sql查询命令对应的执行计划的资源消耗小于预设阈值,则确定查询引擎集群中各节点的任务承载能力;

目标节点确定模块,用于根据所述各节点的所述任务承载能力,从所述各节点中确定执行所述sql查询命令的目标节点,并将所述sql查询命令分配至所述目标节点。

此外,为实现上述目的,本发明还提供一种sql查询命令处理设备,所述sql查询命令处理设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行的sql查询命令处理程序,其中所述sql查询命令处理程序被所述处理器执行时,实现如上述的sql查询命令处理方法的步骤。

此外,为实现上述目的,本发明还提供一种可读存储介质,所述可读存储介质上存储有sql查询命令处理程序,其中所述sql查询命令处理程序被处理器执行时,实现如上述的sql查询命令处理方法的步骤。

本发明提供一种sql查询命令处理方法、装置、设备及可读存储介质,本发明在接收到sql查询命令时,确定所述sql查询命令对应的执行计划的资源消耗;将所述sql查询命令对应的执行计划的资源消耗,与预设阈值进行比对;若所述sql查询命令对应的执行计划的资源消耗小于预设阈值,则确定查询引擎集群中各节点的任务承载能力;根据所述各节点的所述任务承载能力,从所述各节点中确定执行所述sql查询命令的目标节点,并将所述sql查询命令分配至所述目标节点。本发明通过上述方式,能够合理利用查询引擎集群中的各节点,从而保证查询引擎各节点的负载均衡,提升查询引擎的性能,进而提高响应sql查询命令的速度。

附图说明

图1为本发明各实施例涉及的sql查询命令处理设备的硬件结构示意图;

图2为本发明sql查询命令处理方法第一实施例的流程示意图;

图3为本发明sql查询命令处理装置第一实施例的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例涉及的sql查询命令处理方法主要应用于sql查询命令处理设备,该sql查询命令处理设备可以是由多个加密机组成的加密机集群。

参照图1,图1为本发明实施例方案中涉及的sql查询命令处理设备的硬件结构示意图。本发明实施例中,sql查询命令处理设备可以包括处理器1001(例如中央处理器centralprocessingunit、cpu),通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信;用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard);网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口);存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatilememory),例如磁盘存储器,存储器1005可选的还可以是独立于前述处理器1001的存储装置。本领域技术人员可以理解,图1中示出的硬件结构并不构成对本发明的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

继续参照图1,图1中作为一种可读存储介质的存储器1005可以包括操作系统、网络通信模块以及sql查询命令处理程序。在图1中,网络通信模块主要用于连接服务器,与服务器进行数据通信;而处理器1001可以调用存储器1005中存储的sql查询命令处理程序,并执行本发明实施例提供的sql查询命令处理方法。

本发明实施例提供了一种sql查询命令处理方法。

参照图2,图2为本发明sql查询命令处理方法第一实施例的流程示意图。

本实施例中,该sql查询命令处理方法由sql查询命令处理设备实现,该sql查询命令处理方法包括以下步骤:

步骤s10,在接收到sql查询命令时,确定所述sql查询命令对应的执行计划的资源消耗;

步骤s20,将所述sql查询命令对应的执行计划的资源消耗,与预设阈值进行比对;

步骤s30,若所述sql查询命令对应的执行计划的资源消耗小于预设阈值,则确定查询引擎集群中各节点的任务承载能力;

步骤s40,根据所述各节点的所述任务承载能力,从所述各节点中确定执行所述sql查询命令的目标节点,并将所述sql查询命令分配至所述目标节点。

本实施例的sql查询命令处理设备可以是服务器等具有数据处理功能的设备,sql查询命令处理设备上承载有中间件middleware,该中间件middleware部署于查询端和查询引擎impala之间。本实施例中间件middleware通过对sql查询命令进行分析,结合查询引擎impala集群中各impalad节点的任务承载能力,来确定sql查询命令由哪个impalad节点来执行,能够合理利用查询引擎impala集群中的各impalad节点,从而保证查询引擎impala的负载均衡,提升查询引擎impala的性能,进而提高响应sql查询命令的速度。

以下详细介绍本发明实现sql查询命令处理的具体步骤:

步骤s10,在接收到sql查询命令时,确定所述sql查询命令对应的执行计划的资源消耗;

首先,中间件middleware在接收到用户通过查询端触发的sql查询命令时,对sql查询命令对应的执行计划进行解析,确定该执行计划的资源消耗。作为一种实施方式,所述确定所述sql查询命令对应的执行计划的资源消耗的步骤包括:

a1,查找所述待执行查询命令对应的执行计划,并对所述执行计划进行解析,以获取所述执行计划的参数;

a2,根据所述执行计划的参数,查找所述执行计划的资源消耗。

即,在查询引擎impala中,预先为每一种sql查询命令匹配有相应的执行计划,且依据每一执行计划的参数预定义了执行每一执行计划所需的资源消耗,由此,可以先查找sql查询命令对应的执行计划,然后对sql查询命令对应的执行计划进行解析,获取sql查询命令对应的执行计划的参数,再根据该执行计划的参数查找为该执行计划预定义的资源消耗。

步骤s20,将所述sql查询命令对应的执行计划的资源消耗,与预设阈值进行比对;

考虑到执行计划资源消耗过大的sql查询命令提交至查询引擎后,会增加查询引擎的负载,影响其他正在执行的sql查询命令,因此,将sql查询命令对应的执行计划的资源消耗,与预设阈值进行比对,如果sql查询命令对应的执行计划的资源消耗大于预设阈值,则进行拦截,并返回优化sql查询命令的提示信息,供用户对sql查询命令进行优化。

步骤s30,若所述sql查询命令对应的执行计划的资源消耗小于预设阈值,则确定查询引擎集群中各节点的任务承载能力;

如果sql查询命令对应的执行计划的资源消耗小于预设阈值,则确定查询引擎impala集群中各impalad节点的任务承载能力。作为一种实施方式,所述确定查询引擎集群中各节点的任务承载能力的步骤包括:

b1,获取查询引擎集群中各节点等待被执行的sql查询命令数;

b2,根据所述各节点等待被执行的sql查询命令数,确定所述各节点的任务承载能力。

即,查询引擎impala集群中各impalad节点的任务承载能力,由各impalad节点当前等待被执行的sql查询命令数决定,可以获取各impalad节点等待被执行的sql查询命令数,然后根据各impalad节点等待被执行的sql查询命令数,确定各impalad节点的任务承载能力。其中,作为一种实施方式,b2包括:

b20,计算查询引擎集群执行单个sql查询命令的平均时间;

b21,根据查询引擎集群执行单个sql查询命令的所述平均时间,以及,所述各节点等待被执行的sql查询命令数,计算所述各节点的预等待时间;

b22,根据所述各节点的预等待时间,确定所述各节点的任务承载能力。

具体地,首先计算查询引擎impala集群执行单个sql查询命令的平均时间,然后根据执行单个任务的平均时间和各impalad节点当前等待被执行的sql查询命令数,计算各impalad节点的预等待时间,从而根据各impalad节点的预等待时间,确定各impalad节点的任务承载能力,即,预等待时间越小的impalad节点,其任务承载能力越大。

其中,作为一种实施方式,b20包括:

b200,选取当前之前待计算的各预设时间段,其中,每个预设时间段的时长相同;

b201,获取查询引擎集群在每个预设时间段内完成的sql查询命令总数;

b202,根据查询引擎集群在每个预设时间段内完成的所述sql查询命令总数,计算查询引擎集群在每个预设时间段内的单个sql查询命令完成时间;

b203,计算所述单个sql查询命令完成时间的均值,作为查询引擎集群执行单个sql查询命令的平均时间。

即,中间件middleware可以获取查询引擎impala集群当前之前已完成的sql查询命令数,为了减少计算量,不必基于查询引擎impala集群当前之前所有已完成的sql查询命令数,来计算查询引擎impala集群执行单个sql查询命令的平均时间,可以选取当前之前n个预设时间段(每个预设时间段时长相同)作为待计算的各预设时间段,n≥2。针对待计算的各预设时间段中的任意一个预设时间段ti,获取查询引擎impala集群在ti内完成的sql查询命令总数m,计算ti与m的比值,得到查询引擎impala集群在ti内的单个sql查询命令完成时间ti,然后计算t1、t2…ti的均值,得到查询引擎impala集群执行单个sql查询命令的平均时间。

步骤s40,根据所述各节点的所述任务承载能力,从所述各节点中确定执行所述sql查询命令的目标节点,并将所述sql查询命令分配至所述目标节点。

在确定各impalad节点的任务承载能力之后,从各impalad节点中确定执行所述sql查询命令的目标节点。作为一种实施方式,所述根据所述各节点的所述任务承载能力,从所述各节点中确定执行所述sql查询命令的目标节点的步骤包括:

c1,对所述各节点的所述任务承载能力按大小进行排序;

c2,选取任务承载能力最大的节点,作为执行所述sql查询命令的目标节点。

即,对各impalad节点的任务承载能力按大小进行排序,选取任务承载能力最大的impalad节点作为执行sql查询命令的目标节点,将sql查询命令的目标节点分配至目标节点。

在更多的实施中,也可以将各impalad节点的任务承载能力与预设承载能力阈值进行比对,将任务承载能力大于预设承载能力阈值的impalad节点作为待选集合,从该待选集合中任意选取一个impalad节点,作为执行sql查询命令的目标节点。

通过上述方式,可以使得各impalad节点均摊执行任务,即使同时或在短时间内接收到大量sql查询命令,也可以进行合理分配,实现并发处理,保证查询引擎impala的负载均衡。

在更多的实施中,中间件middleware还对查询引擎impala进行实时监控,若监控到查询引擎impala重启或短暂不可用时,将此时接收到的sql查询命令放入缓存队列,在监控到查询引擎impala正常运行时,再进行分析处理。此外,因查询引擎impala重启或短暂不可用,导致正在执行的sql查询命令出现报错的情况,则在监控到查询引擎impala正常运行时,重新将出现报错情况的sql查询命令提交至查询引擎impala,从而提升了查询引擎impala的容错性。

本实施例提供一种sql查询命令处理方法,在接收到sql查询命令时,确定所述sql查询命令对应的执行计划的资源消耗;将所述sql查询命令对应的执行计划的资源消耗,与预设阈值进行比对;若所述sql查询命令对应的执行计划的资源消耗小于预设阈值,则确定查询引擎集群中各节点的任务承载能力;根据所述各节点的所述任务承载能力,从所述各节点中确定执行所述sql查询命令的目标节点,并将所述sql查询命令分配至所述目标节点。本实施例通过上述方式,能够合理利用查询引擎集群中的各节点,从而保证查询引擎的负载均衡,提升查询引擎的性能,进而提高响应sql查询命令的速度。

进一步地,基于上述第一实施例,提出了本发明sql查询命令处理方法的第二实施例,与前述实施例的区别在于,所述确定查询引擎集群中各节点的任务承载能力的步骤之前,包括:

d1,判断所述sql查询命令是否属于可信sql查询命令;

d2,若是,则执行步骤:确定查询引擎集群中各节点的任务承载能力。

即,考虑到实际中,会有大量无权限的用户向查询引擎impala提交sql查询命令,因此,在对sql查询命令进行分析之前,先对sql查询命令携带的用户标识(可以是用户名)进行权限判别,如果sql查询命令携带的用户标识是有权限的,表示sql查询命令是可信的,判断的过程如下:将sql查询命令携带的用户标识与中间件middleware的预存黑名单进行比对,其中,预存黑名单是一个无权限用户标识列表,若sql查询命令携带的用户标识不在预存黑名单内,则确认sql查询命令是可信的,则执行步骤:确定所述sql查询命令对应的执行计划的资源消耗。若sql查询命令携带的用户标识在预存黑名单内,则确认sql查询命令不可信,不响应,从而防止无权限的用户提交的sql查询命令被处理,节省查询引擎impala资源,从而提升查询引擎的性能,进而提高响应sql查询命令的速度。

此外,本发明实施例还提供一种sql查询命令处理装置。

参照图3,图3为本发明sql查询命令处理装置第一实施例的功能模块示意图。

本实施例中,所述sql查询命令处理装置包括:

资源消耗确定模块10,用于在接收到sql查询命令时,确定所述sql查询命令对应的执行计划的资源消耗;

比对模块20,用于将所述sql查询命令对应的执行计划的资源消耗,与预设阈值进行比对;

任务承载能力确定模块30,用于若所述sql查询命令对应的执行计划的资源消耗小于预设阈值,则确定查询引擎集群中各节点的任务承载能力;

目标节点确定模块40,用于根据所述各节点的所述任务承载能力,从所述各节点中确定执行所述sql查询命令的目标节点,并将所述sql查询命令分配至所述目标节点。

其中,上述sql查询命令处理装置的各虚拟功能模块存储于图1所示sql查询命令处理设备的存储器1005中,用于实现sql查询命令处理程序的所有功能;各模块被处理器1001执行时,能够保证查询引擎各节点的负载均衡,从而提升查询引擎的性能,进而提高响应sql查询命令的速度。

进一步的,所述资源消耗确定模块10包括:

第一查找单元,用于查找所述待执行查询命令对应的执行计划,并对所述执行计划进行解析,以获取所述执行计划的参数;

第二查找单元,用于根据所述执行计划的参数,查找所述执行计划的资源消耗。

进一步的,所述任务承载能力确定模块30包括:

获取单元,用于获取查询引擎集群中各节点等待被执行的sql查询命令数;

确定单元,用于根据所述各节点等待被执行的sql查询命令数,确定所述各节点的任务承载能力。

进一步的,所述确定单元包括:

第一计算子单元,用于计算查询引擎集群执行单个sql查询命令的平均时间;

第二计算子单元,用于根据查询引擎集群执行单个sql查询命令的所述平均时间,以及,所述各节点等待被执行的sql查询命令数,计算所述各节点的预等待时间;

确定子单元,用于根据所述各节点的预等待时间,确定所述各节点的任务承载能力。

进一步的,所述第一计算子单元包括:

选取子子单元,用于选取当前之前待计算的各预设时间段,其中,每个预设时间段的时长相同;

获取子子单元,用于获取查询引擎集群在每个预设时间段内完成的sql查询命令总数;

第一计算子子单元,用于根据查询引擎集群在每个预设时间段内完成的所述sql查询命令总数,计算查询引擎集群在每个预设时间段内的单个sql查询命令完成时间;

第二计算子子单元,用于计算所述单个sql查询命令完成时间的均值,作为查询引擎集群执行单个sql查询命令的平均时间。

进一步的,所述目标节点确定模块40包括:

排序单元,用于对所述各节点的所述任务承载能力按大小进行排序;

选取单元,用于选取任务承载能力最大的节点,作为执行所述sql查询命令的目标节点。

进一步的,所述任务承载能力确定模块30,还用于,判断所述sql查询命令是否属于可信sql查询命令;

若是,则执行步骤:确定查询引擎集群中各节点的任务承载能力。

其中,上述sql查询命令处理装置中各个模块的功能实现与上述sql查询命令处理方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。

此外,本发明实施例还提供一种可读存储介质。

本发明可读存储介质上存储有sql查询命令处理程序,其中所述sql查询命令处理程序被处理器执行时,实现如上述的sql查询命令处理方法的步骤。

其中,sql查询命令处理程序被执行时所实现的方法可参照本发明sql查询命令处理方法的各个实施例,此处不再赘述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

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

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

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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