数据处理方法及系统转让专利

申请号 : CN202210907336.0

文献号 : CN114996361B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张震宇

申请人 : 阿里巴巴(中国)有限公司

摘要 :

本说明书实施例提供数据处理方法及系统,其中所述数据处理方法应用于数据处理系统,所述系统包括数据处理节点和数据存储节点,所述方法包括:所述数据处理节点,接收针对待处理数据的数据处理请求,对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型;以及将所述数据处理参数以及所述请求类型发送至所述数据存储节点;所述数据存储节点,在确定存在与所述请求类型对应的数据处理模板的情况下,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理。从而使得数据存储节点不需要对数据处理请求进行解析优化,避免了数据存储节点的计算资源被大量浪费的问题,进一步提高了数据存储节点的请求处理效率。

权利要求 :

1.一种数据处理方法,应用于数据处理系统,所述系统包括数据处理节点和数据存储节点,所述方法包括:所述数据处理节点,接收针对待处理数据的数据处理请求,对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型;以及将所述数据处理参数以及所述请求类型发送至所述数据存储节点;

所述数据存储节点,在确定存在与所述请求类型对应的数据处理模板的情况下,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理;

在确定不存在与所述请求类型对应的数据处理模板的情况下,获取所述数据处理节点中的参数化数据处理请求,并基于所述参数化数据处理请求生成数据处理模板,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理,其中,所述获取所述数据处理节点中的参数化数据处理请求的步骤,包括:所述数据存储节点,基于所述数据处理参数以及所述请求类型生成请求获取指令,并将所述请求获取指令发送至所述数据处理节点;

所述数据处理节点,基于所述请求获取指令确定所述数据处理参数以及所述请求类型对应的参数化数据处理请求,其中,所述参数化数据处理请求为所述数据处理节点对所述数据处理请求进行参数化处理获得;以及将所述参数化数据处理请求,以及对应的所述数据处理参数和所述请求类型发送至所述数据存储节点。

2.根据权利要求1所述的数据处理方法,所述基于所述参数化数据处理请求生成数据处理模板,包括:所述数据存储节点,对所述参数化数据处理请求进行预准备处理,获得数据处理模板。

3.根据权利要求2所述的数据处理方法,所述数据存储节点,对所述参数化数据处理请求进行预准备处理,获得数据处理模板,包括:所述数据存储节点,基于所述数据处理参数对所述参数化数据处理请求进行还原处理,获得目标数据处理请求;

对所述目标数据处理请求进行语法解析,获得所述目标数据处理请求的语法解析结果;

基于语法解析结果执行所述数据处理请求,获得预准备语句,并将所述预准备语句确定为数据处理模板。

4.根据权利要求1所述的数据处理方法,所述对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型,包括:所述数据处理节点,对所述数据处理请求进行参数化处理,获得数据处理参数以及参数化数据处理请求;

对所述参数化数据处理请求进行摘要计算,获得所述数据处理请求的摘要信息。

5.根据权利要求1所述的数据处理方法,所述通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理,包括:所述数据存储节点,基于所述数据处理参数确定所述待处理数据的存储结构信息;

基于所述存储结构信息以及所述数据处理参数对所述数据处理模板进行处理,获得目标数据处理模板;

基于所述目标数据处理模板对所述待处理数据进行处理。

6.根据权利要求5所述的数据处理方法,所述基于所述数据处理参数确定所述待处理数据的存储结构信息,包括:所述数据存储节点,从所述数据处理参数中,确定所述待处理数据的数据存储单元标识;

在当前缓存的数据存储单元的存储结构信息中,存在与所述数据存储单元标识对应的存储结构信息的情况下,获取与所述数据存储单元标识对应的存储结构信息;或者在当前缓存的数据存储单元的存储结构信息中,不存在与所述数据存储单元标识对应的存储结构信息的情况下,确定所述数据存储单元标识对应的数据存储单元,并获得所述数据存储单元的存储结构信息。

7.根据权利要求5所述的数据处理方法,所述基于所述存储结构信息以及所述数据处理参数对所述数据处理模板进行处理,获得目标数据处理模板,包括:所述数据存储节点,从所述数据处理模板中确定待填充区域,并将所述存储结构信息以及所述数据处理参数填充至所述待填充区域,获得目标数据处理模板。

8.根据权利要求5所述的数据处理方法,所述基于所述目标数据处理模板对所述待处理数据进行处理,包括:所述数据存储节点,确定所述待处理数据对应的数据存储单元,并获取所述数据存储单元的当前存储结构信息;

在所述当前存储结构信息,与所述目标数据处理模板中的存储结构信息为一致的情况下,基于所述目标数据处理模板对所述数据存储单元中的待处理数据进行处理。

9.根据权利要求8所述的数据处理方法,所述获取所述数据存储单元的当前存储结构信息之后,还包括:所述数据存储节点,在所述当前存储结构信息,与所述数据处理模板中的存储结构信息不一致的情况下,继续执行获取所述数据处理节点中的数据处理请求的步骤;

直至所述当前存储结构信息与所述目标数据处理模板中的存储结构信息为一致。

10.一种数据处理系统,包括数据处理节点和数据存储节点,其中,所述数据处理节点,被配置为接收针对待处理数据的数据处理请求,对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型;以及将所述数据处理参数以及所述请求类型发送至所述数据存储节点;

所述数据存储节点,被配置为在确定存在与所述请求类型对应的数据处理模板的情况下,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理;

在确定不存在与所述请求类型对应的数据处理模板的情况下,基于所述数据处理参数以及所述请求类型生成请求获取指令,并将所述请求获取指令发送至所述数据处理节点;

所述数据处理节点,还被配置为基于所述请求获取指令确定所述数据处理参数以及所述请求类型对应的参数化数据处理请求,其中,所述参数化数据处理请求为所述数据处理节点对所述数据处理请求进行参数化处理获得;以及将所述参数化数据处理请求,以及对应的所述数据处理参数和所述请求类型发送至所述数据存储节点;

所述数据存储节点,还被配置为基于所述参数化数据处理请求生成数据处理模板,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理。

11.一种计算设备,包括:

存储器和处理器;

所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至9中任意一项所述的数据处理方法应用于数据处理节点或者数据存储节点的步骤。

12.一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至9中任意一项所述的数据处理方法应用于数据处理节点或者数据存储节点的步骤。

说明书 :

数据处理方法及系统

技术领域

[0001] 本说明书实施例涉及计算机技术领域,特别涉及一种数据处理方法。

背景技术

[0002] 随着计算机技术的不断发展,在数据存储领域产生了分库分表或者计算存储分离的分布式数据库架构,例如,分布式存储系统。在分布式数据库架构中,通过计算节点以及存储节点分别提供计算服务以及存储服务。而在实际应用中,计算节点会将接收到用户请求发送给与其相关联的存储节点,该存储节点则会对该用户请求进行解析优化并执行该用户请求。
[0003] 但是,随着分布式数据库架构的广泛应用,用户请求的数量也随之增加,并且该用户请求中存在大量相同或相似的请求,从而导致存储节点的计算资源被大量浪费,进一步降低了存储节点的请求处理效率。

发明内容

[0004] 有鉴于此,本说明书实施例提供了一种数据处理方法。本说明书一个或者多个实施例同时涉及一种数据处理系统,一种计算设备,一种计算机可读存储介质,一种计算机程序,以解决现有技术中存在的技术缺陷。
[0005] 根据本说明书实施例的第一方面,提供了一种数据处理方法,应用于数据处理系统,所述系统包括数据处理节点和数据存储节点,所述方法包括:
[0006] 所述数据处理节点,接收针对待处理数据的数据处理请求,对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型;以及
[0007] 将所述数据处理参数以及所述请求类型发送至所述数据存储节点;
[0008] 所述数据存储节点,在确定存在与所述请求类型对应的数据处理模板的情况下,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理。
[0009] 根据本说明书实施例的第二方面,提供了一种数据处理系统,包括数据处理节点和数据存储节点,其中,
[0010] 所述数据处理节点,被配置为接收针对待处理数据的数据处理请求,对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型;以及[0011] 将所述数据处理参数以及所述请求类型发送至所述数据存储节点;
[0012] 所述数据存储节点,被配置为在确定存在与所述请求类型对应的数据处理模板的情况下,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理。
[0013] 根据本说明书实施例的第三方面,提供了一种计算设备,包括:
[0014] 存储器和处理器;
[0015] 所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现所述数据处理方法应用于数据处理节点或者数据存储节点的步骤。
[0016] 根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现所述数据处理方法应用于数据处理节点或者数据存储节点的步骤。
[0017] 根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机实现所述数据处理方法应用于数据处理节点或者数据存储节点的步骤。
[0018] 本说明书提供的数据处理方法,应用于数据处理系统,所述系统包括数据处理节点和数据存储节点,所述方法包括:所述数据处理节点,接收针对待处理数据的数据处理请求,对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型;以及将所述数据处理参数以及所述请求类型发送至所述数据存储节点;所述数据存储节点,在确定存在与所述请求类型对应的数据处理模板的情况下,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理。
[0019] 具体地,该方法通过数据处理节点预先对数据处理请求进行解析,并将解析获得的、该数据处理请求的数据处理参数以及请求类型发送至数据存储节点,使得该数据存储节点能够基于该请求类型对应的数据处理模板,以及数据处理参数对待处理数据进行处理,从而使得数据存储节点不需要对数据处理请求进行解析优化,避免了数据存储节点的计算资源被大量浪费的问题,进一步提高了数据存储节点的请求处理效率。

附图说明

[0020] 图1是本说明书一个实施例提供的一种数据处理方法的应用场景示意图;
[0021] 图2是本说明书一个实施例提供的一种数据处理方法的流程图;
[0022] 图3是本说明书一个实施例提供的一种数据处理方法中分表的示意图;
[0023] 图4是本说明书一个实施例提供的一种数据处理方法中计算节点的处理过程流程图;
[0024] 图5是本说明书一个实施例提供的一种数据处理方法中存储节点的处理过程流程图;
[0025] 图6是本说明书一个实施例提供的一种数据处理系统的结构示意图;
[0026] 图7是本说明书一个实施例提供的一种计算设备的结构框图。

具体实施方式

[0027] 在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
[0028] 在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0029] 应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0030] 首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
[0031] 分库分表:一种数据库解决方案,为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库表拆分成若干数据库表组成,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
[0032] 计算存储分离数据库:一种数据库架构,数据库有两种类型的实体:计算节点和存储节点。其中,计算节点无状态,负责接收解析请求、数据计算和收集;存储节点(即数据节点)用于存储数据,可能具备一定的数据计算能力。
[0033] 前端连接:用户到数据库的连接。
[0034] 后端连接:计算节点到存储节点的连接。
[0035] 表名参数化:在分库分表的方案中,存在多个具备相同表结构的不同表名的数据表,这些数据表分散在同一个库中或者不同的库中。为了让下推到存储节点的SQL更通用地表示某一类查询,会对表名也进行参数化抽象,使之变成一个占位符(例如' ')。
[0036] LRU(Least Recently Used):即最近最少使用,是一种常用的缓存置换算法,选择最近最久未使用的页面予以淘汰。
[0037] 会话:一种存储请求上下文的环境,这里可以指MySQL中session,不同的会话之间相互隔离,用于请求、事务等上下文的保存。
[0038] 逻辑库、物理库:分库分表中的概念,对于分布式数据库使用者的概念,比如一个库db,在分库分表架构下,被拆成了db_0,db_1,db_2,db_3共4个拆分库,db则被称为逻辑库(对用户暴露的操作单位),db_0、db_1这些则被称为物理库(在实际存储节点上存在的库,用户不可见)。
[0039] 逻辑表、物理表:分库分表中的概念,对于分布式数据库使用者的概念,比如一个表tb,在分库分表架构下,被拆成了tb_0,tb_1,tb_2,tb_3共4个拆分表,表tb则被称为逻辑表(对用户暴露的操作单位),tb_0、tb_1这些表则被称为物理表(在实际存储节点上存在的表,用户不可见)。
[0040] 预准备语句(prepared statement)机制:又称为预准备(prepare)机制,单机数据库MySQL中一种语句处理机制,通过提前处理参数化的SQL语句,并保存的相关语法数据结构和部分优化信息作为预准备语句,在执行的时候通过将预准备语句中的特定参数,变更为传入的参数,就可以快速执行,省略了SQL语句的解析流程,提升了执行效率。
[0041] 全局预准备(global prepare):是指对存储节点单机数据库MySQL中prepare机制进行改进,使之能跨会话共享并使用。
[0042] 全局预准备语句(globalprepared statement):是一种可以全局管理以及跨会话使用的预准备语句。
[0043] MDL(metadata lock)锁:是一种基于表元数据(表结构)的锁,MDL锁是为了保证并发环境下元数据和表数据的结构一致性。该MDL锁包括MDL读锁和MDL写锁,其中,MDL读锁:可以在对表数据进行增删改查时,为该表加MDL读锁;MDL写锁:可以在对表结构进行修改的时,为该表加MDL写锁。
[0044] MD5:一种摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(16字节的二进制数据)。
[0045] 哈希算法(Hash):又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。
[0046] 单向哈希算法:具备单向性的哈希算法。
[0047] 随着计算机技术的不断发展,在数据存储领域产生了计算存储分离的分布式数据库架构,例如,分布式存储系统。在实际应用中,基于分库分表或者计算存储分离的分布式数据库架构所收到的用户SQL请求,往往需要在多个数据节点上执行,由于多个计算节点的存在,以及后端连接数量的限制,每次到后端的请求往往需要通过不同的会话在不同数据节点上执行,即使是同种的请求,数据节点也需要完整的解析优化执行流程。
[0048] 例如,在一种是基于分库分表的计算存储分离的分布式数据库中,该分布式数据库的存储节点使用MySQL。在执行请求时,经过计算节点解析优化请求后,会尽可能下推请求(如SQL请求、SQL语句)到存储节点上执行,由于后端连接使用的是连接池,每次请求都可能使用不同的后端连接会话下发。虽然用户的请求具备相似性(即都是某些固定模板生成的请求,对该请求进行参数化后的请求模板不会很多);但由于存在多个计算节点和连接池的存在,存储节点每次处理请求都得完整地进行解析优化和执行,无法利用请求相似性。同时由于分库分表的存在,存储节点上有相当多的表是具备相同的表结构,同样无法利用这个特征。从而导致存储节点的计算资源被大量浪费,进一步降低了存储节点的请求处理效率和执行效率。
[0049] 针对上述问题,本说明书提供有两种方案,第一种方案为:hold后端连接、使用原生的prepare方案:该方案使用单机数据库MySQL的原生的preparedstatement方案,通过计算节点自己维护后端连接上的prepared statement进行复用。但是,该方案的缺点在于:
[0050] 虽然不需要修改存储节点,但由于prepared statement仅限于当前会话,跨会话使用需要重新prepare,同时由于prepared statement机制仅支持对字面量(literal)进行参数化,而分库分表场景下存在大量的数据表,导致prepared statement数量非常大,即使是同样的逻辑表,因为物理表名不同,需要使用大量的prepared statement,两者共同作用导致需要管理的prepared statement非常多,且每个后端会话都需要管理导致计算节点设计复杂且效率低下,使得使用缓存命中率也会非常低。
[0051] 第二种方案为:传统的global prepare方案,该方案改进单机数据库MySQL的原生的prepared statement方案,修改其有效域,使之可以跨会话使用,即1个会话进行prepare,其他会话可以使用这个prepared statement。但是,该方案的缺点在于:虽然实现简单,仅需要将现有的prepared statement机制从会话中剥离并保存到全局容器中。但是,由于依然存在第一种方案的缺陷,也即是prepared statement机制仅支持对字面量(literal)进行参数化,多种请求情况下,使得使用缓存命中率也非常低。其次,由于传统的global prepare方案需要计算节点对prepared statement id进行管理,不同计算节点之间无法共享,或者需要缓存id同步方案,实现复杂。
[0052] 基于此,在本说明书中,提供了一种数据处理方法,本说明书同时涉及一种数据处理系统,一种计算设备,一种计算机可读存储介质以及一种计算机程序,在下面的实施例中逐一进行详细说明。
[0053] 图1示出了根据本说明书一个实施例提供的一种数据处理方法的应用场景示意图,其中,该数据处理方法应用于包含数据处理节点和数据存储节点的数据处理系统,所述数据处理节点,接收针对待处理数据的数据处理请求,对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型;以及将所述数据处理参数以及所述请求类型发送至所述数据存储节点;所述数据存储节点,在确定存在与所述请求类型对应的数据处理模板的情况下,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理。
[0054] 其中,参见图1,该数据处理系统可以理解为图1中的分布式存储系统,该数据处理系统中的数据处理节点可以理解为分布式存储系统中的计算节点,该数据处理系统中的数据存储节点可以理解为分布式存储系统中的存储节点。该数据处理请求可以理解为SQL语句,该请求类型可以理解为SQL摘要,该数据处理参数可以理解为SQL参数,该数据处理模板可以理解为预准备语句,该预准备语句也可以被称为预编译语句。
[0055] 基于此,该数据处理方法能够应用于包含计算节点和存储节点的分布式存储系统,通过计算节点,接收针对待处理数据的SQL语句(比如SQL查询语句等),并对该SQL语句进行解析,获得SQL语句对应的SQL摘要和SQL参数;之后,该计算节点将SQL摘要和SQL参数发送至分布式存储系统中的存储节点,而该存储节点,接收计算节点发送的SQL摘要和SQL参数,并在确定存在与SQL摘要对应的预准备语句的情况下,基于该预准备语句以及该SQL参数对自身存储的待处理数据进行处理。从而使得存储节点不需要对SQL语句进行解析优化,避免了存储节点的计算资源被大量浪费的问题,进一步提高了存储节点的SQL语句处理效率。
[0056] 图2示出了根据本说明书一个实施例提供的一种数据处理方法的流程图,该数据处理方法应用于数据处理系统,所述系统包括数据处理节点和数据存储节点,该数据处理方法具体包括以下步骤。
[0057] 步骤202:所述数据处理节点,接收针对待处理数据的数据处理请求,对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型;以及将所述数据处理参数以及所述请求类型发送至所述数据存储节点。
[0058] 其中,该数据处理系统可以理解为用户对数据进行存储、查询或更新的系统,例如分布式存储系统、分布式数据库。该数据处理节点可以理解为对该数据处理请求进行解析的节点,例如。分布式存储系统中的计算节点,该计算节点可以为一个服务器;该数据存储节点可以理解为能够进行数据存储,并对存储的数据进行处理的节点,数据存储节点可以为一个服务器或者数据库。例如,分布式存储系统中的存储节点。在本说明书提供一实施例中,该数据处理节点可以为数据处理系统中的一个数据处理服务器;该数据存储节点可以为数据处理系统中的一个数据存储服务器,或者数据存储数据库。在本说明书提供另一实施例中,该数据处理节点和数据存储节点也可以为客户端,也即是说,该数据处理节点可以为数据处理系统中的一个数据处理客户端;该数据存储节点可以为数据处理系统中的一个数据存储客户端。
[0059] 该数据处理请求可以理解为对该待处理数据进行查询、更新、存储等处理的请求,例如SQL语句、SQL请求等等。
[0060] 待处理数据可以理解为数据存储节点中存储的数据,例如,存储节点的表中的数据、该存储节点的文件中的数据等等。其中,需要说明的是,该待处理数据可以为任意类型的数据,例如多媒体数据、数值、字符数据等等,本说明书对此不作具体限制。
[0061] 该数据处理参数理解为该数据处理请求中携带的、用于对该待处理数据进行处理过程中需要的参数。包括但不限于该待处理数据对应的数据存储单元标识、该待处理数据的数据标识等等,例如:表名、数据库名称、主键、数据查询条件等。
[0062] 该数据存储单元可以理解为数据存储节点中用于存储待处理数据的单元,例如表、文件等。该数据存储单元标识可以理解为唯一标识一个数据存储单元的标识,需要说明的是,该数据存储单元标识可以为该数据存储单元对应的名称、编号、ID等,本说明书对此不作具体限制,例如,表的表名、文件的文件名等。
[0063] 数据标识可以理解为唯一标识待处理数据的标识,例如,该待处理数据的名称、主键(PK:primary key)、变量名等。本说明书对此不作具体限制。例如,该待处理数据为表中的数据的情况下,该数据标识可以为主键。
[0064] 该请求类型可以理解为该表征数据处理请求的请求类型的信息,在实际应用中,该请求类型可以为该数据处理请求的摘要信息、或摘要值。该摘要信息是通过摘要算法对该数据处理请求进行摘要计算获取。其中,该摘要算法可以理解为任意一种计算摘要的算法,本说明书对此不作具体限制,例如,该摘要算法可以为MD5算法、单向哈希算法、哈希算法等。需要说明的是,该请求类型可以为摘要信息,该摘要信息用于是表示该数据处理请求(如SQL语句)是执行何种操作或动作的信息,也即是表征该数据处理请求是何种类型的请求的信息;比如,对于针对表A、表B、表C的3条SQL查询语句,本说明书提供的数据处理方法,首先,分别提取出3条SQL查询语句SQL中的“表A、表B、表C”等SQL参数;使得这3条SQL查询语句,成为只表示查询动作、但不存在具体查询对象(即表名)的SQL语句。然后,对该3条SQL语句进行摘要计算,获得3条相同的、表征查询动作的摘要信息。后续,计算节点可以将该摘要信息发送至存储节点,该存储节点可以从本地缓存中,确定与该摘要信息对应的、实现查询动作的预准备语句,将“表A、表B、表C”分别填充至预准备语句并执行,从而分别完成针对表A、表B、表C的查询。此外,该数据处理请求的请求类型也可以理解为数据处理请求的请求类型编号;每种类型的数据处理请求会对应有一个编号。例如,查询数据的SQL查询语句对应的请求类型编号为0001、删除数据的SQL语句所对应的请求类型编号为0002等。也即是说,当数据处理节点接收到数据处理请求后,能够对该数据处理请求进行分析,该数据处理请求确定对应的请求类型编号,该请求类型编号用于表示该数据处理请求所对应的操作(比如查询、删除等)。
[0065] 具体的,数据处理节点,能够接收用户发送的、针对待处理数据的数据处理请求,之后预先对该数据处理请求进行解析,从而获得该数据处理请求的数据处理参数以及请求类型;然后将数据处理参数以及请求类型发送至数据存储节点。
[0066] 在本说明书提供的一实施例中,所述对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型,包括:
[0067] 所述数据处理节点,对所述数据处理请求进行参数化处理,获得数据处理参数以及参数化数据处理请求;
[0068] 对所述参数化数据处理请求进行摘要计算,获得所述数据处理请求的摘要信息。
[0069] 其中,参数化数据处理请求可以理解为对该SQL语句进行参数化处理后获得的SQL语句。
[0070] 下面以数据处理方法在分布式数据库场景下,对该数据处理节点将解析数据处理请求获得的数据处理参数以及请求类型发送至数据存储节点做进一步说明,其中,该数据处理节点为计算节点,该数据存储节点为存储节点、数据处理请求为SQL语句、该数据处理参数为表名、主键等参数,该数据类型为SQL摘要。
[0071] 此外需要说明的是,在实际应用中,基于分库分表的分布式数据库会对一张逻辑表按一定的规则进行拆分,从而让一张逻辑表对于多个存储节点中的多张物理表。比如,db库(名称为db的分布式数据库)下有一张表,该表的结构如下所示。
[0072]
[0073] 参见图3,图3是本说明书一个实施例提供的一种数据处理方法中分表的示意图;假设该分布式数据库有4个分库(即图3中的分库0、分库1、分库2、分库3,其中,db_0、db_1、db_2、db_3为每个分库的名称),该定义会建一个以pk(主键)作为拆分键的、且在4个分库上每个分库有2个分表的拆分表,总共有8个分表(即图3中的分表0至分表7,其中t_order_0至t_order_7为分表的名称)。
[0074] 基于此,当计算节点接收到一个请求(例如select order_id from t_order where pk=3;)时,考虑到现有技术中的计算节点,会根据hash拆分的计算结果(例如hash(3)=3),计算到pk=3的数据落在分库1的分表3上,因此,传统的分库分表数据库会把请求转换成“select order_id from t_order_3 where pk=3;”并发送到db_1上。从而使得分库db_1(即存储节点)需要对大量的SQL请求进行处理,导致存储节点的执行效率降低的问题。本说明书提供的数据处理方法,会对下发的SQL请求进行参数化,从而获得该SQL请求对应的参数(即t_order_3 、pk=3),并计算其摘要;其中,该摘要可以通过任意一种摘要算法计算获取。而计算后获得的摘要和SQL参数的格式为:单向hash摘要算法(逻辑库名, 逻辑表名1, 逻辑表1版本号, 逻辑表名2, 逻辑表2版本号,  ..., 逻辑表名n, 逻辑表n版本号, 参数化的SQL)。
[0075] 其中,逻辑表名n指第n个参数化的表的逻辑表名,版本号是计算节点维护的元数据版本,每次对表的结构进行变更,该版本号都会加一。对应上述样例请求,单向hash摘要算法可以选择MD5,因此该摘要和SQL参数的格式则是:MD5(“db”,“t_order”,1,“select order_id from  where pk=”)。
[0076] 其中,该摘要用于唯一表示这种类型的请求,使用逻辑库名和逻辑表名及表版本号是为了避免不同的表出现相同的参数化后的SQL语句,也是为了在表的结构发生变化后(版本号会变,导致使用新的摘要),使用新的prepared statement对请求进行表示。
[0077] 一个摘要对应一个参数化SQL请求,用于对某一类SQL请求进行唯一确定(在确定的逻辑库上,一些确定版本的逻辑表,进行一个确定的参数化的SQL请求),其中任意条件发生变化都会导致摘要发生变化,被认定为一个不一样的全局prepare请求。因此同样的参数化SQL请求可能会有不同的摘要,完全相同的请求(库名,表名,参数化SQL请求)则会拥有相同的摘要。而这个摘要将被用于存储节点上唯一确定一个全局prepare请求,这个也是实现计算节点间无需交互就能和存储节点达成缓存同步的关键。
[0078] 基于此,在计算节点计算出请求摘要和SQL参数之后,会发送给存储节点进行处理。
[0079] 其中,需要说明的是,在对下发的请求进行参数化的过程中,还可以将该SQL请求“select order_id from t_order where pk=3;”进行参数化处理,转变成“select order_id from   where pk= ;”,从而作为后续全局prepare的参数化SQL语句;需要说明的是,该计算节点在对该SQL请求进行参数化处理的过程中,可以采用任意一种能够实现对SQL语句进行参数化的方式,本说明书对此不作具体限制。
[0080] 步骤204:所述数据存储节点,在确定存在与所述请求类型对应的数据处理模板的情况下,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理。
[0081] 沿用上例,该存储节点在接受到计算节点发送的请求摘要(即SQL摘要)和SQL参数之后,会从自身缓存中查询与该请求摘要对应的预准备语句,在查找到与该请求摘要对应的与准备语句的情况下,会通过该预准备语句以及该SQL参数,对存储节点的分表中的数据进行查询、插入、更新、删除等操作。
[0082] 具体的,收到请求的分库为db_1,存储节点发送来的请求包括:摘要MD5值,参数:t_order_3(物理表名),3(pk的查询值)。在查到与该摘要MD5值对应的预准备语句的情况下,基于该预准备语句和参数对分表中的数据进行查询。
[0083] 其中,需要说明的是,该数据处理模板会存储在该数据存储节点中的模板存储模块中,该模板存储模块可以理解为数据存储节点用于存储该数据处理模板的模块。例如,在实际应用中,该存储节点中会配置有预准备语句缓存,专用于存储该存储节点用于对分表中的数据进行处理的预准备语句。该预准备语句缓存可以为LRU缓存。
[0084] 进一步的,在本说明书提供的实施例中,在数据存储节点确定不存在对应的数据处理模板的情况下,为了保证能够通过数据处理模板顺利的对该待处理数据进行处理,从而提高数据存储单元的处理效率,该数据存储节点会从该数据处理节点中获取该数据处理请求,并基于该数据处理请求重新生成数据处理模板,从而实现基于该数据处理模板和数据处理参数对该待处理数据进行处理,具体的,所述将所述数据处理参数以及所述请求类型发送至所述数据存储节点之后,还包括:
[0085] 所述数据存储节点,在确定不存在与所述请求类型对应的数据处理模板的情况下,获取所述数据处理节点中的参数化数据处理请求,并基于所述参数化数据处理请求生成数据处理模板;
[0086] 通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理。
[0087] 沿用上例,该存储节点在接收到计算节点发送的请求摘要(即SQL摘要)和SQL参数之后,会从自身缓存中查询与该请求摘要对应的预准备语句,在没有查询到与该请求摘要对应的预准备语句的情况下,则会从该计算节点中获取参数化SQL请求,并基于该参数化SQL请求进行预准备操作,从而生成预准备语句;然后基于该生成的预准备语句与该SQL参数,对存储节点的分表中的数据进行查询、插入、更新、删除等操作。
[0088] 并且,该存储节点在生成预准备语句之后,会将该预准备语句存储至缓存中,便有后续进行使用。
[0089] 具体的,存储节点去LRU缓存查找摘要对应的预准备语句,在无法找到的情况下,例如第一次请求是找不到的,因为从未缓存过,这时由于请求中也没有参数化的SQL,这时存储节点会从该计算节点获取参数化的SQL和对应的摘要、参数。也即是,摘要MD5值,参数化SQL:“select order_id from   where pk=”,参数:t_order_3(物理表名),3(pk的查询值)。
[0090] 之后,存储节点从LRU缓存中依旧没找到摘要MD5值对应的预准备语句,但是有参数化SQL。于是该存储节点将参数中的物理表名“t_order_3”进行回填至参数化SQL中,还原参数化SQL为标准可prepare(预准备)的SQL语句“select order_id from t_order_3 where pk= ”。然后使用MySQL的标准prepare处理流程,校验元数据,对SQL请求进行预准备,生成Prepared Statement,并存储到LRU缓存中。
[0091] 在本说明书提供的一实施例中,该数据存储节点在基于数据处理请求生成数据处理节点的过程中,会对该参数化数据处理请求进行预准备处理,从而获得数据处理模板,从而后续能够基于该数据处理模板和数据处理参数对该待处理数据进行处理,从而避免了数据存储节点的计算资源被大量浪费的问题,进一步提高了数据存储节点的请求处理效率。具体的,所述基于所述参数化数据处理请求生成数据处理模板,包括:
[0092] 所述数据存储节点,对所述参数化数据处理请求进行预准备处理,获得数据处理模板。
[0093] 具体的,所述数据存储节点,对所述参数化数据处理请求进行预准备处理,获得数据处理模板,包括:
[0094] 所述数据存储节点,基于所述数据处理参数对所述参数化数据处理请求进行还原处理,获得目标数据处理请求;
[0095] 对所述目标数据处理请求进行语法解析,获得所述目标数据处理请求的语法解析结果;
[0096] 基于语法解析结果执行所述数据处理请求,获得预准备语句,并将所述预准备语句确定为数据处理模板。该语法解析结果可以理解为表征该数据处理请求的语法格式是否正确的结果;在基于该语法解析结果,确定数据处理请求的语法格式为正确的情况下,再执行该参数化数据处理请求。
[0097] 其中,该对数据处理请求进行语法解析可以为任意一种能够对该数据处理请求进行语法解析的方法,本说明书对此不作具体限制。
[0098] 沿用上例,存储节点在获取该参数化SQL请求(select order_id from   where pk=)之后,该存储节点将参数中的物理表名“t_order_3”进行回填至参数化SQL中,还原参数化SQL为标准可prepare的SQL语句“select order_id from t_order_3 where pk=”。然后会对该还原的SQL请求进行语法解析,在基于该语法解析结果,确定SQL请求的语法格式为正确的情况下,再执行该SQL请求,从而获得预准备语句。从而后续能够基于该预准备语句对分表中的数据进行处理,从而避免了计算节点的计算资源被大量浪费的问题,进一步提高了计算节点的请求处理效率。
[0099] 在本说明书提供的一实施例中,该数据存储节点会通过向数据处理节点发送请求获取指令的方式,从而该数据处理节点中获取该参数化数据处理请求,其中,该参数化数据处理请求可以是对数据处理请求进行参数化后的获得的请求,从而便于后续能够基于该参数化后的数据处理请求生成数据处理模板。具体的,所述获取所述数据处理节点中的参数化数据处理请求,包括:
[0100] 所述数据存储节点,基于所述数据处理参数以及所述请求类型生成请求获取指令,并将所述请求获取指令发送至所述数据处理节点;
[0101] 所述数据处理节点,基于所述请求获取指令确定所述数据处理参数以及所述请求类型对应的参数化数据处理请求,其中,所述参数化数据处理请求为所述数据处理节点对所述数据处理请求进行参数化处理获得;以及
[0102] 将所述参数化数据处理请求,以及对应的所述数据处理参数和所述请求类型发送至所述数据存储节点。
[0103] 其中,该参数化数据处理请求可以理解为参数化后的SQL请求,例如“select order_id from   where pk=”。需要说明的是,本说明书中可以采用任意一种对SQL请求进行参数化的方案,实现SQL请求参数化。
[0104] 其中,该数据获取指令可以理解为能够指示该数据处理节点将参数化数据处理请求发送至数据存储节点的指令。
[0105] 沿用上例,存储节点去LRU缓存无法查找摘要对应的预准备语句的情况下,这时存储节点会向计算节点会返回一个特殊的报错通知,计算节点基于该报错通知重新发送请求。新请求就会带上参数化SQL,请求为:摘要MD5值,参数化SQL:“select order_id from   where pk=”,参数:t_order_3(物理表名),3(pk的查询值)。
[0106] 在本说明书实施例中,该数据存储节点会基于该数据处理模板以及数据处理模板对该待处理数据进行处理,从而使得数据存储节点不需要对数据处理请求进行解析优化,避免了数据存储节点的计算资源被大量浪费的问题,进一步提高了数据存储节点的请求处理效率。具体的,所述通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理,包括步骤一至步骤三:
[0107] 步骤一:所述数据存储节点,基于所述数据处理参数确定所述待处理数据的存储结构信息。
[0108] 其中,该存储结构信息可以理解为表征该待处理数据的存储结构的信息,在该待处理数据存储在表中的情况下,该存储结构信息可以为表的结构信息。
[0109] 进一步的,所述基于所述数据处理参数确定所述待处理数据的存储结构信息,包括:
[0110] 所述数据存储节点,从所述数据处理参数中,确定所述待处理数据的数据存储单元标识;
[0111] 在当前缓存的数据存储单元的存储结构信息中,存在与所述数据存储单元标识对应的存储结构信息的情况下,获取与所述数据存储单元标识对应的存储结构信息。
[0112] 沿用上例,存储节点从SQL参数中确定该待处理数据对应的表名,即存储节点提取参数中的物理表名,然后从当前缓存中查询与该物理表名对应的表结构信息,并在确定存在对应的表结构信息的情况下,从缓存中获取当前缓存的该表结构信息。其中,该缓存是Prepared Statement对应的内置缓存,该内置缓存是一个新的缓存,与上述LRU缓存不同,该内置缓存和Prepared Statement一一对应且生命周期相同,通过缓存表结构信息,能够快速的为预准备语句确定对应的表结构信息,从而进一步提高了数据处理效率。
[0113] 本说明书提供的一实施例中,在实际应用中,该存储节点当前可能未缓存表结构信息,因此,当存储节点确定不存在与物理表名对应的表结构信息的情况下,为了能够快速的为预准备语句确定对应的表结构信息,会重新加载与该物理表名对应的物理表,并记录下该物理表对应的表结构信息,从而便于后续快速的为预准备语句确定对应的表结构信息,具体的,所述从所述数据处理参数中,确定所述待处理数据的数据存储单元标识之后,还包括:
[0114] 所述数据存储节点,在当前缓存的数据存储单元的存储结构信息中,不存在与所述数据存储单元标识对应的存储结构信息的情况下,确定所述数据存储单元标识对应的数据存储单元;
[0115] 获得所述数据存储单元的存储结构信息。
[0116] 沿用上例,存储节点在确定不存在与物理表名对应的表结构信息的情况下,会根据物理表名动态加载这个物理表,并记录其结构信息至内置缓存中。
[0117] 步骤二:所述数据存储节点,基于所述存储结构信息以及所述数据处理参数对所述数据处理模板进行处理,获得目标数据处理模板。
[0118] 具体的,所述基于所述存储结构信息以及所述数据处理参数对所述数据处理模板进行处理,获得目标数据处理模板,包括:
[0119] 所述数据存储节点,从所述数据处理模板中确定待填充区域,并将所述存储结构信息以及所述数据处理参数填充至所述待填充区域,获得目标数据处理模板。
[0120] 其中,该待填充区域可以理解为该预准备语句中需要被SQL参数填充的区域,例如,该预准备语句中主键所对应的区域、预准备语句中物理表名所对应的区域等等。
[0121] 沿用上例,存储节点确定Prepared Statement中涉及到这个表的信息,并将该信息替换为SQL参数中正确的物理表的信息。(注:因为是通过t_order_3生成的Prepared Statement,所以上例中的参数本身是正确的,但如果Prepared Statement是从LRU缓存中找到的,且当时它是由t_order_2构造的,就需要替换其为t_order_3)。
[0122] 当完成参数化的表名替换后,当前Prepared Statement就是一个在t_order_3上能执行查询的语句。
[0123] 步骤三:所述数据存储节点,基于所述目标数据处理模板对所述待处理数据进行处理。
[0124] 在本说明书提供的实施例中,考虑到表结构会根据不同用户的需求发生频繁的变化,因此,在对待处理数据进行处理之前,还需要进行表结构校验,在预准备语句中的表结构与当前表结构完全一致的情况下,再基于填充参数后的预准备语句对物理表中的数据进行处理,从而保证数据处理工作的顺利进行。具体的,所述基于所述目标数据处理模板对所述待处理数据进行处理,包括:
[0125] 所述数据存储节点,确定所述待处理数据对应的数据存储单元,并获取所述数据存储单元的当前存储结构信息;
[0126] 在所述当前存储结构信息,与所述目标数据处理模板中的存储结构信息为一致的情况下,基于所述目标数据处理模板对所述数据存储单元中的待处理数据进行处理。。
[0127] 沿用上例,存储节点在正式执行数据处理前,会进行表结构校验,如果物理表的当前表结构和缓存的表结构一致,则会正常使用传递的参数执行请求,从而对存储节点的分表中的数据进行查询、插入、更新、删除等操作,并返回执行结果给计算节点。也即是说,该数据存储节点在对待处理数据进行处理之后,会将处理结果发送至数据处理节点。
[0128] 在本说明书提供的一实施例中,该在预准备语句中的表结构与当前表结构完全一致的情况下,则需要重新执行生成预准备语句的操作,从而保证数据处理工作的顺利进行,具体的,所述获取所述数据存储单元的当前存储结构信息之后,还包括:
[0129] 所述数据存储节点,在所述当前存储结构信息,与所述数据处理模板中的存储结构信息不一致的情况下,继续执行获取所述数据处理节点中的数据处理请求的步骤;
[0130] 直至所述当前存储结构信息与所述目标数据处理模板中的存储结构信息为一致。
[0131] 沿用上例,存储节点在正式执行数据处理前,会进行表结构校验,如果物理表的当前表结构和缓存的表结构不一致,则会释放掉完整的Prepared Statement及相关物理表缓存,重新进行global prepare流程。直至在正式执行数据处理前,该物理表的当前表结构和缓存的表结构一致。
[0132] 在本说明书提供的实施例中,为了保证数据处理工作的顺利进行,该存储节点会在正式执行数据处理前,对该物理表进行加锁处理。具体的,所述基于所述目标数据存储单元对所述待处理数据进行处理,包括:
[0133] 所述数据存储节点,确定所述待处理数据对应的数据存储单元,并对所述数据存储单元加锁,获得加锁存储单元;
[0134] 基于所述目标数据存储单元,对所述加锁存储单元中的待处理数据进行处理。
[0135] 沿用上例,存储节点在正式执行数据处理前,会用MDL锁锁定所有涉及的表,之后正常使用传递的参数执行请求,并返回执行结果给计算节点。
[0136] 基于上述内容可知,本说明书提供的数据处理方法,提供了一种分布式数据库SQL语句全局预准备的方法,该方案旨在解决现有技术中存储节点需要对大量相同或相似的用户请求进行解析优化,从而导致存储节点的计算资源被大量浪费,进一步降低了存储节点的请求处理效率的问题,让数据节点提前准备好请求,精简掉请求的解析和部分优化流程。
[0137] 同时,需要说明的是,本说明书提供的预准备语句是一种全局预准备语句。该方法拓展和改进了传统单机数据库的SQL语句预准备机制,在计算存储分离的分布式数据库架构中,通过计算节点计算请求摘要,管理全局预准备语句,实现下推到存储节点上执行的请求都通过缓存的预准备语句执行,达到和使用单机数据库预准备语句的同等的执行效率,提升了分布式数据库的性能。使得存储节点,支持预准备语句跨后端连接会话使用且全局管理;支持请求表名参数化以适配分表场景;计算节点统一管理请求摘要计算,解决参数化的SQL请求无法区别表结构变更和不同逻辑表的问题,同时解决存储节点和计算节点缓存同步问题。
[0138] 需要说明的是,本说明书提供的数据处理方法,依赖于分布式数据库的计算节点和存储节点上增加额外模块实现,也即是说,通过在数据处理节点上增加额外的数据处理模块,和在数据存储节点上增加额外的数据存储模块进行改进的方式,使得该增加的额外模块实现上述数据处理方法的步骤。
[0139] 下述结合附图4、附图5,以本说明书提供的数据处理方法在分布式数据库场景下的应用为例,对所述数据处理方法进行进一步说明。其中,附图4、附图5,分别对应分布式数据库中的计算节点和存储节点的操作步骤。具体的,图4示出了本说明书一个实施例提供的一种数据处理方法中计算节点的处理过程流程图,具体包括以下步骤。
[0140] 步骤402:获取需要下推到存储节点执行的请求。
[0141] 具体的,分布式数据库的计算节点,能够接收到用户发送的SQL请求,并将该SQL请求确定为需要下推到存储节点执行的请求。
[0142] 步骤404:计算摘要和参数化SQL。
[0143] 具体的,该计算节点通过任意一种摘要算法(比如MD5),计算该SQL请求的摘要(如MD5值)。并对该SQL请求进行参数化处理,获得参数化SQL语句,以及该SQL请求对应的参数,该参数包括逻辑库名, 逻辑表名, 逻辑表版本号等等。
[0144] 其中,该计算节点可以采用任意一种对SQL请求进行参数化处理的方式,对该SQL请求进行参数化处理,本说明书对此不作具体限制。
[0145] 步骤406:发送摘要和参数到存储节点。
[0146] 具体的,将摘要MD5值和参数“t_order_3(物理表名),3(pk的查询值)”发送走存储节点。
[0147] 步骤408:是否执行成功。
[0148] 具体的,该计算节点根据该存储节点的反馈,确定该数据处理是否执行成功,当计算节点接收到该存储节点发送的报错通知的情况下,则执行步骤410;当计算节点接收到该存储节点反馈的执行结构的情况下,则执行步骤416。
[0149] 步骤410:是否未找到摘要对应的全局预准备语句。
[0150] 具体的,该计算节点根据报错通知,确定未找到摘要对应的全局预准备语句的情况下,执行步骤412。
[0151] 该计算节点根据报错通知,确定并非未找到摘要对应的全局预准备语句的情况下,执行步骤412。
[0152] 步骤412:发送摘要、参数化SQL和参数到存储节点。
[0153] 具体的,计算节点则将摘要、参数化SQL、参数全部传递给存储节点。
[0154] 步骤414:报错。
[0155] 具体的,计算节点向运维人员反馈报错,告知运维人员执行错误。
[0156] 步骤416:结束。
[0157] 具体的,该计算节点确定请求执行结束。
[0158] 图5示出了本说明书一个实施例提供的一种数据处理方法中存储节点的处理过程流程图,具体包括以下步骤。
[0159] 步骤518:获取计算节点的请求,该请求中携带摘要和参数。
[0160] 步骤520:通过请求中的摘要,查询LRU缓存中对应的全局预准备语句。
[0161] 步骤522:LRU缓存是否找到,若是,则执行步骤524,若否则执行步骤526。
[0162] 步骤524:抽取参数中的物理表名参数,并查找物理表信息缓存,并执行步骤532。
[0163] 步骤526:确定请求是否包含参数化SQL语句,若是,则执行步骤530,若否则执行步骤528。
[0164] 步骤528:报错。
[0165] 具体的,该存储节点在确定请求没有包含参数化SQL语句的情况下,向该计算节点发送特殊的报错通知,使得该计算节点重新发送请求,该请求中需要携带有摘要、参数化SQL、参数。
[0166] 步骤530:抽取参数中的物理表名并填充至参数化SQL语句中,构建标准的全局预准备语句并进行预准备操作,且将全局预准备语句缓存到LRU缓存中。
[0167] 具体的,该存储节点在确定请求包含参数化SQL语句的情况下,抽取参数中的物理表名并填充至参数化SQL语句中,从而获得标准的全局预准备语句。
[0168] 之后,对该标准的全局预准备语句进行预准备操作,该预准备操作可以为:
[0169] 1、对该填充物理表名的参数化SQL语句进行语法解析,获得该参数化SQL语句的语法解析结果。
[0170] 2、基于该语法解析结果对参数化SQL语句进行语义优化,并对优化后的参数化SQL语句构建对应的全局预准备语句。
[0171] 当存储节点确定全局预准备语句之后,会将该全局预准备语句存储至LRU缓存中。
[0172] 步骤532:是否找到参数中的物理表缓存信息,若是,则执行步骤536,若否则执行步骤534。
[0173] 步骤534:加载物理表并更新缓存信息。
[0174] 具体的,存储节点会在Prepared Statement对应的内置缓存中,查找参数中的物理表名对应的表结构信息,如果没有找到,就动态加载这个表,记录其结构信息从而对缓存中的表结构信息进行更新。
[0175] 步骤536:替换全局预准备语句中的物理表描述。
[0176] 具体的,将Prepared Statement中涉及到该物理表的表结构信息,替换为缓存中的物理表结构信息。
[0177] 步骤538:对涉及的物理表加MDL锁。
[0178] 步骤540:确定物理表结构是否相对于缓存时发生变化,若是则执行步骤542,若否则执行步骤544。
[0179] 步骤542:清理该LRU缓存中缓存的全局预准备语句和物理表信息缓存。
[0180] 具体的,在正式执行前,存储节点进行表结构校验,如果当前物理表的表结构,和缓存的表结构不一致,则会释放掉LRU缓存中完整的Prepared Statement及相关物理表缓存,然后执行步骤526。重新进行global prepare流程。
[0181] 步骤544:使用请求参数执行全局预准备语句。
[0182] 具体的,存储节点在进行表结构校验的过程中,如果当前物理表的表结构,和缓存的表结构一致,则会正常使用传递的参数执行请求,并返回执行结果给计算节点。
[0183] 步骤546:结束。
[0184] 基于上述内容,本说明书提供的数据处理方法,提供一种全局prepare方法,让计算节点不仅能利用请求的相似性,精简掉重复的下推请求的解析流程,充分利用分库分表的数据表的相似性,避免重复表结构校验,同时利用特殊摘要计算方法,在计算节点间不用通信,就能达成相同的请求一致的摘要,充分利用存储节点上的全局prepared statement,减小后端连接传输带宽并提升数据库的整体性能。
[0185] 同时,该全局prepare方法,考虑到上述两种解决方案中第一种方案,没有全局预准备和表名参数化,需要在每个后端连接上针对不同的物理表都进行预准备,产生的Prepared Statement数量是本说明书提供的数据处理方法的计算节点个数*计算节点后端连接数*物理分表数倍。以及第二种方案,没有表名参数化,需要针对每个物理表都进行预准备,产生的Prepared Statement数量,是本说明书提供的数据处理方法的物理分表数倍。并且,由于第二种方法没有参数化表名,没有对全局预准备语句的在跨库跨物理表使用的功能,同时管理依赖生成Prepared Statement时候返回的ID,需要计算节点之间、计算节点和存储节点之间进行复杂的ID同步,低效且复杂。
[0186] 因此,本说明书提供的数据处理方法,通过扩展Prepared Statement功能,增加表名参数化的能力,增加跨会话使用能力,引入摘要机制实现缓存同步、表结构变更管理,为分布式数据库系统提供更高效的请求下推存储节点实现方法。
[0187] 同时,改进为全局预准备语句(global prepared statement),提升在分布式数据库场景下,存储节点对下推请求的通配配范围,极大减少了请求Prepared Statement的模板数,解决了上述两种方案的缺点。同时针对分布式数据库场景,引入摘要对全局预准备语句进行管理,解决分布式场景下参数化SQL模板ID同步的问题和表名参数化带来的表结构变更问题。能够在大部分场景中以99%的缓存命中率利用存储节点中的全局预准备语句,优化掉下推SQL语句执行时候的解析代价,以提升执行效率。
[0188] 与上述方法实施例相对应,本说明书还提供了数据处理系统实施例,图6示出了本说明书一个实施例提供的一种数据处理系统的结构示意图。如图6所示,该数据处理系统包括数据处理节点602和数据存储节点604,其中,
[0189] 所述数据处理节点602,被配置为接收针对待处理数据的数据处理请求,对所述数据处理请求进行解析,获得所述数据处理请求的数据处理参数以及请求类型;以及[0190] 将所述数据处理参数以及所述请求类型发送至所述数据存储节点604;
[0191] 所述数据存储节点604,被配置为在确定存在与所述请求类型对应的数据处理模板的情况下,通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理。
[0192] 可选地,所述数据存储节点604,还被配置为:
[0193] 在确定不存在与所述请求类型对应的数据处理模板的情况下,获取所述数据处理节点602中的参数化数据处理请求,并基于所述参数化数据处理请求生成数据处理模板;
[0194] 通过所述数据处理参数以及所述数据处理模板对所述待处理数据进行处理。
[0195] 可选地,所述数据存储节点604,还被配置为:
[0196] 基于所述数据处理参数以及所述请求类型生成请求获取指令,并将所述请求获取指令发送至所述数据处理节点602;
[0197] 所述数据处理节点602,还被配置为:
[0198] 基于所述请求获取指令确定所述数据处理参数以及所述请求类型对应的参数化数据处理请求,其中,所述参数化数据处理请求为所述数据处理节点602对所述数据处理请求进行参数化处理获得;以及
[0199] 将所述参数化数据处理请求,以及对应的所述数据处理参数和所述请求类型发送至所述数据存储节点604。
[0200] 可选地,所述数据存储节点604,还被配置为:
[0201] 对所述参数化数据处理请求进行预准备处理,获得数据处理模板。
[0202] 可选地,所述数据存储节点604,还被配置为:
[0203] 基于所述数据处理参数对所述参数化数据处理请求进行还原处理,获得目标数据处理请求;
[0204] 对所述目标数据处理请求进行语法解析,获得所述目标数据处理请求的语法解析结果;
[0205] 基于语法解析结果执行所述数据处理请求,获得预准备语句,并将所述预准备语句确定为数据处理模板。
[0206] 可选地,所述数据处理节点602,还被配置为:
[0207] 对所述数据处理请求进行参数化处理,获得数据处理参数以及参数化数据处理请求;
[0208] 对所述参数化数据处理请求进行摘要计算,获得所述数据处理请求的摘要信息。
[0209] 可选地,所述数据存储节点604,还被配置为:
[0210] 基于所述数据处理参数确定所述待处理数据的存储结构信息;
[0211] 基于所述存储结构信息以及所述数据处理参数对所述数据处理模板进行处理,获得目标数据处理模板;
[0212] 基于所述目标数据处理模板对所述待处理数据进行处理。
[0213] 可选地,所述数据存储节点604,还被配置为:
[0214] 从所述数据处理参数中,确定所述待处理数据的数据存储单元标识;
[0215] 在当前缓存的数据存储单元的存储结构信息中,存在与所述数据存储单元标识对应的存储结构信息的情况下,获取与所述数据存储单元标识对应的存储结构信息;或者[0216] 在当前缓存的数据存储单元的存储结构信息中,不存在与所述数据存储单元标识对应的存储结构信息的情况下,确定所述数据存储单元标识对应的数据存储单元,并获得所述数据存储单元的存储结构信息。
[0217] 可选地,所述数据存储节点604,还被配置为:
[0218] 从所述数据处理模板中确定待填充区域,并将所述存储结构信息以及所述数据处理参数填充至所述待填充区域,获得目标数据处理模板。
[0219] 可选地,所述数据存储节点604,还被配置为:
[0220] 确定所述待处理数据对应的数据存储单元,并获取所述数据存储单元的当前存储结构信息;
[0221] 在所述当前存储结构信息,与所述目标数据处理模板中的存储结构信息为一致的情况下,基于所述目标数据处理模板对所述数据存储单元中的待处理数据进行处理。
[0222] 可选地,所述数据存储节点604,还被配置为:
[0223] 在所述当前存储结构信息,与所述数据处理模板中的存储结构信息不一致的情况下,继续执行获取所述数据处理节点602中的数据处理请求的步骤;
[0224] 直至所述当前存储结构信息与所述目标数据处理模板中的存储结构信息为一致。
[0225] 可选地,所述数据存储节点604,被配置为:
[0226] 确定所述待处理数据对应的数据存储单元,并对所述数据存储单元加锁,获得加锁存储单元;
[0227] 基于所述目标数据处理模板,对所述加锁存储单元中的待处理数据进行处理。
[0228] 本说明书提供的数据处理系统,通过数据处理节点预先对数据处理请求进行解析,并将解析获得的、该数据处理请求的数据处理参数以及请求类型发送至数据存储节点,使得该数据存储节点能够基于该请求类型对应的数据处理模板,以及数据处理参数对待处理数据进行处理,从而使得数据存储节点不需要对数据处理请求进行解析优化,避免了数据存储节点的计算资源被大量浪费的问题,进一步提高了数据存储节点的请求处理效率。
[0229] 上述为本实施例的一种数据处理系统的示意性方案。需要说明的是,该数据处理系统的技术方案与上述的数据处理方法的技术方案属于同一构思,数据处理系统的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
[0230] 图7示出了根据本说明书一个实施例提供的一种计算设备700的结构框图。该计算设备700的部件包括但不限于存储器710和处理器720。处理器720与存储器710通过总线730相连接,数据库750用于保存数据。
[0231] 计算设备700还包括接入设备740,接入设备740使得计算设备700能够经由一个或多个网络760通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备740可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi‑MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
[0232] 在本说明书的一个实施例中,计算设备700的上述部件以及图7中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图7所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
[0233] 计算设备700可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备700还可以是移动式或静止式的服务器。
[0234] 其中,处理器720用于执行如下计算机可执行指令,该计算机可执行指令被处理器620执行时实现上述数据处理方法应用于数据处理节点或者数据存储节点的步骤。
[0235] 上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
[0236] 本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法应用于数据处理节点或者数据存储节点的步骤。
[0237] 上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
[0238] 本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机实现上述数据处理方法应用于数据处理节点或者数据存储节点的步骤。
[0239] 上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的数据处理方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
[0240] 上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0241] 所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0242] 需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
[0243] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0244] 以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。