CN112395307A - 执行语句的方法、装置、服务器及存储介质 - Google Patents
执行语句的方法、装置、服务器及存储介质 Download PDFInfo
- Publication number
- CN112395307A CN112395307A CN201910760166.6A CN201910760166A CN112395307A CN 112395307 A CN112395307 A CN 112395307A CN 201910760166 A CN201910760166 A CN 201910760166A CN 112395307 A CN112395307 A CN 112395307A
- Authority
- CN
- China
- Prior art keywords
- sql statement
- sql
- target
- task
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
- G06F16/24556—Aggregation; Duplicate elimination
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Abstract
本申请公开了一种执行语句的方法、装置、服务器及存储介质,属于大数据技术领域。所述方法包括:多个任务包括的SQL语句并行执行,多个任务中的每个任务包括的SQL语句串行执行,多个任务中的一个任务为第一任务。获取新的多条SQL语句,新的多条SQL语句中的每条SQL语句依次为目标SQL语句。在目标SQL语句属于第一任务关联的事务时,将目标SQL语句添加至第一任务中。采用本申请,可以提高执行SQL语句的效率。
Description
技术领域
本申请涉及大数据技术领域,特别涉及一种执行语句的方法、装置、服务器及存储介质。
背景技术
在数据库(如关系型数据库等)中,常会运行外部的结构化查询语言(structuredquery language,SQL)语句来操作数据库。一般是通过某些工具,将多条SQL语句串行或者并行的加载到数据库中进行执行,以实现操作数据库。
相关技术中,通过MySQL导入(MySQL import)工具,将多条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语句的元数据信息相同的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语句可以并行执行,所以可以提高执行SQL语句的效率。
附图说明
图1是本申请一个示例性实施例提供的服务器的结构框图;
图2是本申请一个示例性实施例提供的执行语句的方法流程图;
图3是本申请一个示例性实施例提供的数据迁移的示意图;
图4是本申请一个示例性实施例提供的数据迁移的示意图;
图5是本申请一个示例性实施例提供的数据迁移的示意图;
图6是本申请一个示例性实施例提供的执行语句的逻辑模块划分示意图;
图7是本申请一个示例性实施例提供的执行语句的装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
为了便于对本申请实施例的理解,下面首先介绍本申请实施例涉及的系统架构、以及所涉及到名词的概念。
本申请实施例可以应用于数据库(如关系型数据库等)中运行SQL语句,通过运行SQL语句对数据库中的数据进行操作,如通过SQL语句更新数据库中的数据、通过SQL语句删除数据库中的数据等。
一种应用场景举例,数据库中的数据迁移过程中也可以使用SQL语句,在源数据库中,导出SQL语句,在目的数据库中运行SQL语句即实现源数据库至目的数据库中的数据迁移。
SQL,是一种特殊目的编程语言,用于存取数据、查询数据、更新数据和管理数据库。SQL也可以作为数据库脚本文件的扩展名。
事务:是维护数据库数据一致性和完整性的单位,其具备“要么全成功,要么全失败”的特性。一个事务在提交前,数据库不对该事务关联的数据的一致性和完整性负责。但事务一旦提交,数据库就要保证该事务关联的数据的一致性和完整性。可选地,在事务结束前,不会改变数据库中该事务关联的数据,只是将历史操作在内存中记录;事务结束时,即该事务关联的SQL语句被全部执行成功时,更改数据库中该事务关联的数据。
本申请实施例提供了一种执行语句的方法,该方法的执行主体可以是服务器。
举例说明,在直接执行多条SQL语句的场景下,服务器可以是管理数据库的服务器。另外,在执行多条SQL语句进行数据库中数据迁移的场景下,该方法的执行主体可以是源数据库所在的服务器(后续可以简称为源服务器),也可以是目的数据库所在的服务器(后续可以简称为目的服务器),还可以是在源服务器和目的服务器之外新加的服务器。
图1示例性的提供了本申请的服务器的一种可能的架构图。服务器可以包括处理器101、存储器102、通信接口103和总线104。在服务器中,处理器101的数量可以是一个或多个,图1仅示意了其中一个处理器101。可选的,处理器101可以是中央处理器(CentralProcessing Unit,CPU)。若服务器具有多个处理器101,多个处理器101的类型可以不同,或者可以相同。可选的,服务器的多个处理器还可以集成为多核处理器。
存储器102存储计算机指令和数据,存储器102可以存储实现本申请提供的执行语句的方法所需的计算机指令和数据。例如,存储器102存储用于实现本申请提供的执行语句的方法中获取模块执行步骤的指令。再例如,存储器102存储用于本申请提供的执行语句的方法中添加模块执行步骤的指令。存储器102可以是以下存储介质的任一种或任一种组合:非易失性存储器(如只读存储器(Read-Only Memory,ROM)、固态硬盘(Solid State Disk,SSD)、硬盘(Hard Disk Drive,HDD)、光盘等)、易失性存储器。
通信接口103可以是以下器件的任一种或任一种组合:网络接口(如以太网接口)、无线网卡等具有网络接入功能的器件。
通信接口103用于服务器与其他服务器或者终端进行数据通信。
图1用一条粗线表示总线104。总线104可以将处理器101与存储器102、通信接口103连接。这样,通过总线104,处理器101可以访问存储器102,还可以利用通信接口103与其它服务器或者终端进行数据交互。
在本申请中,服务器执行存储器102中的计算机指令,使用服务器实现本申请提供的执行语句的方法。例如,使得服务器执行上述执行语句的方法中由获取模块执行的步骤。再例如,使得服务器执行上述执行语句的方法中由添加模块执行的步骤。
本申请实施例提供了一种执行语句的方法,首先对该方法的执行流程进行简述:
服务器在执行新的多条SQL语句时,首先服务器获取新的多条SQL语句,然后将新的多条SQL语句中的每条SQL语句依次作为目标SQL语句。服务器判断目标SQL语句是否属于当前的多个任务关联的任一事务,在目标SQL语句属于第一任务关联的事务时,服务器可以将目标SQL语句添加至第一任务中当前所有SQL语句的最后面。在目标SQL语句不属于多个任务关联的任一事务时,服务器可以获取目标SQL语句的元数据信息。服务器可以判断多个任务中是否存在元数据信息与目标SQL语句的元数据信息相同的SQL语句,在第二任务包括元数据信息与目标SQL语句的元数据信息相同的SQL语句时,服务器可以将目标SQL语句添加至第二任务中当前所有SQL语句的最后面。在多个任务中不存在元数据信息与目标SQL语句的元数据信息相同的SQL语句时,服务器可以建立包括目标SQL语句的新任务,该新任务当前的多个任务并行执行。
需要说明的是,上述多个任务中不同任务中的SQL语句并行执行,每个任务中的SQL语句串行执行。
还需要说明的是,上述第一任务和第二任务分别为多个任务中的一个任务。第一任务和第二任务有可能是同一任务,也有可能是不同任务。
为了更清楚的描述每条SQL语句(依次可以称为是目标SQL语句)被添加至任务的过程、以及任务被执行的过程,提供了如图2所示的流程图(此处以操作数据库的场景为例进行说明):
步骤201,服务器获取新的多条SQL语句。
在本实施例中,在服务器接收到操作数据库的操作请求时,服务器可以从操作请求中获取多条新的SQL语句。或者服务器在接收到操作请求后,又继续接收到多条新的SQL语句。示例性的,在其他设备(如业务服务器等)要更新数据库中的数据时,其他设备会将更新数据库中的数据的操作编写成多条SQL语句,携带在操作请求中,发送至服务器。同样,在其他设备(如业务服务器等)要在数据库中注入数据时,其他设备会将在数据库中注入数据的操作编写成多条SQL语句,携带在操作请求中,发送至服务器。
需要说明的是,上述两种操作仅为举例,任意一种针对数据库的操作均可应用于本实施例中。
步骤202,服务器将新的多条SQL语句中每条SQL语句依次作为目标SQL语句,服务器确定目标SQL语句所属的事务。
在本实施例中,在服务器获取到新的多条SQL语句之后,服务器可以基于SQL语句的语法,查找语句中是否存在SQL语句的关键字(如选择(select)、注入(insert)、更新(update)等)。若语句中存在SQL语句的关键字,则该关键字是一条SQL语句的开始,在从SQL语句的关键字开始至遇到“分号”,为这条SQL语句的结束。这样,服务器可以读取到每条SQL语句。
服务器可以确定多条SQL语句中是否存在事务的开始的SQL语句(如开始事务(begin transaction)或开始事务(start transaction))和结束的SQL语句(如结束事务(end transaction)或结束事务(stop transaction))。在事务的开始的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,元数据信息:数据库名为A、表名为B、列名为C;SQL标识为SQL标识2,元数据信息:数据库名为A、表名为D、列名为E等。并且在服务器中,还相当于建立有目标SQL语句的SQL标识与所属事务的事务标识的对应关系。例如,将SQL语句的SQL标识与事务标识对应存储至事务表,如表二所示。在事务表中,事务标识为A,SQL标识为1;事务标识为B,SQL标识为SQL标识2、SQL标识3、SQL标识4;事务标识为C,SQL标识为SQL标识5、SQL标识6。
表一(元数据表)
SQL标识 | 元数据信息 |
SQL标识1 | 数据库名为A、表名为B、列名为C |
SQL标识2 | 数据库名为A、表名为D、列名为E |
… | … |
表二(事务表)
事务标识 | SQL标识 |
A | SQL标识1 |
B | SQL标识2、SQL标识3、SQL标识4 |
C | SQL标识5、SQL标识6 |
… | … |
需要说明的是,每一条SQL语句都有一个SQL标识,且每条SQL语句的SQL标识不相同。事务的开始的SQL语句与结束的SQL语句之间有可能存在多条SQL语句,所以有可能出现一个事务对应有多条SQL语句,即一个事务标识对应多条SQL语句的SQL标识,每个事务的事务标识也不相同。
步骤203,服务器判断多个任务中是否关联目标SQL语句所属的事务。
在本实施例中,在服务器确定出目标SQL语句所属的事务后,可以确定多个任务是否存在某个任务已关联目标SQL语句所属事务的事务标识。
步骤204,在目标SQL语句属于第一任务关联的事务时,服务器将目标SQL语句添加至第一任务中。
其中,不同任务中的SQL语句并行执行,同一任务中的SQL语句串行执行。并行执行指不同任务中的SQL语句可以通过多个进程同时执行,串行执行指同一任务的SQL语句要依次进行执行。例如,任务1中包括SQL语句1、SQL语句2和SQL语句3,任务2包括SQL语句4、SQL语句5、SQL语句6和SQL语句7。SQL语句1和SQL语句4可以同时被执行,任务1中的SQL语句1、SQL语句2和SQL语句3要依次执行,即执行完SQL语句1,再执行SQL语句2,执行完SQL语句2,再执行SQL语句3。每个任务可以包括任务标识、事务标识和SQL标识三者的对应关系。
在本实施例中,若第一任务关联有目标SQL语句所属事务的事务标识,则服务器可以将目标SQL语句添加至第一任务中。在第一任务中,服务器可以将目标SQL语句的SQL标识与目标SQL语句所属事务的事务标识对应,并且将目标SQL语句设置于第一任务中当前所有SQL语句的最后面。
步骤205,在目标SQL语句不属于多个任务关联的任一事务时,服务器获取目标SQL语句的元数据信息。
在本实施例中,在多个任务中均未关联目标SQL语句的SQL标识对应的事务标识时,服务器可以获取目标SQL语句的元数据信息。此处元数据信息可以是在确定目标SQL语句所属的事务时一并确定,也可以是在确定多个任务中均未关联目标SQL语句所属事务时确定。
需要说明的是,对于任一SQL语句,元数据信息可以表征该SQL语句所要操作的数据库对象,或者在操作过程使用到的数据库对象。元数据信息可以包括数据库名、表名、列名(也可以称为是字段名);可选地,该元数据信息可以包括数据库名、表名、列名(也可以称为是字段名)、外键名、索引名和函数名等。该表名用于指示SQL语句所操作的数据表的名称。该列名用于指示SQL语句所操作的对象所在的列。该外键名指与数据表关联的数据表的主键名。该索引名指指示SQL语句所操作的对象对应的索引。
还需要说明的是,能出现步骤205的情况是一个新事务的SQL语句要添加至任务中的情况。
步骤206,服务器判断多个任务中是否包括元数据信息与目标SQL语句的元数据信息相同的SQL语句。
在本实施例中,服务器在获取到目标SQL语句的元数据信息之后,可以使用多个任务中的各SQL语句的SQL标识,获取SQL标识对应的元数据信息。然后服务器将目标SQL语句的元数据信息,与多个任务中的各SQL语句的元数据信息进行逐个比较,确定是否存在与目标SQL语句的元数据信息相同的SQL语句。
步骤207,在第二任务包括元数据信息与目标SQL语句的元数据信息相同的SQL语句时,服务器将目标SQL语句添加至第二任务中。
在本实施例中,在第二任务中某条SQL语句的元数据信息与目标SQL语句的元数据信息相同时,服务器可以将目标SQL语句添加至第二任务中。示例性的,服务器可以将目标SQL语句的SQL标识与所属事务的事务标识,对应添加至第二任务中,且将目标SQL语句设置于第二任务中当前所有SQL语句的最后面。
这样,在SQL语句对应的操作对象相同时,串行执行可以保证同一SQL语句的执行结果相同。
步骤208,在任一任务中不包括元数据信息与目标SQL语句的元数据信息相同的SQL语句时,服务器建立一个新任务。
在本实施例中,在当前所有任务中均不包括与目标SQL语句的元数据信息相同的元数据信息时,服务器可以生成一个新任务的任务标识。
步骤209,服务器将目标SQL语句添加至新任务中。
在本实施例中,服务器可以将目标SQL语句的SQL标识、目标SQL语句所属事务的事务标识与任务标识对应存储。这样,服务器就将目标SQL语句添加至新任务中。
步骤210,服务器判断多条SQL语句中是否存在未添加至任务的SQL语句。
步骤211,若多条SQL语句中还存在未添加至任务的SQL语句,则服务器返回执行步骤202,将解析到的下一条SQL语句,称为是目标SQL语句。
步骤212,若多条SQL语句不存在未添加至任务的SQL语句,则服务器添加多条SQL语句至任务的处理结束。
步骤213,服务器控制并行执行不同任务中的SQL语句,并控制串行执行同一任务中的SQL语句。
在本实施例中,服务器在将目标SQL语句添加至任务之后,若多条SQL语句中还存在未添加至任务的SQL语句,则服务器可以继续进行添加,并且可以异步执行任务。在执行任务时,服务器可以调用预先设置的进程,分别执行各任务中的SQL语句。这样,相当于是服务器添加SQL语句至任务与服务器执行任务的过程异步进行,可以加快执行SQL语句的速度。
在本实施例中,为了更直观的表示任务,提供了表三(任务表),任务表包括任务1和任务2,任务1关联事务1和事务3,事务1中关联SQL标识1和SQL标识2,事务3关联SQL标识4,任务2关联事务2,事务2关联SQL标识3。可见同一任务中有可能存在不同的事务。
表三(任务表)
另外,任务包括SQL标识的原因是为了后续能够基于SQL标识获取到SQL语句的元数据信息。另外,在任务中还可以包括SQL语句的语句内容,这样服务器可以直接从任务中,获取到SQL语句的语句内容,然后直接进行执行,可以提高执行速度。
另外,将本实施例的方案应用于数据库中的数据迁移的场景下时,执行图2所示流程的服务器可以是源服务器,也可以是目的服务器,还可以是源服务器和目的服务器之外的其他服务器。以下以执行图2所示流程的服务器为源服务器为例进行说明,如图3所示,处理流程可以如下:
步骤301,源数据库中数据要进行迁移时,源服务器可以生成SQL文件,SQL文件中包括多条SQL语句。
步骤302,源服务器执行图2中步骤202至步骤209的过程。
步骤303,源服务器将任务中的SQL语句发送至目的服务器。目的服务器接收源服务器发送的SQL语句,执行SQL语句。
在本实施例中,由于不同任务中的SQL语句可以并行执行,所以源服务器可以直接将不同任务中的SQL语句发送至目的服务器。而由于同一任务中的SQL语句要串行执行,所以源服务器要按照一定的规则向目的服务器发送同一任务中的SQL语句。例如,对于同一任务的SQL语句,源服务器按照排列次序依次向目的服务器发送SQL语句,排在前面的SQL语句先进行发送。
举例说明,源服务器每次向目的服务器发送一条SQL语句;目的服务器接收到源服务器发送的SQL语句后,执行SQL语句;目的服务器在执行完SQL语句后,目的服务器可以向源服务器反馈该SQL语句的执行完毕通知;源服务器接收到目的服务器发送的执行完毕通知后,源服务器可以确定执行完毕通知所属的SQL语句。然后源服务器向目的服务器发送该SQL语句所属的任务中该SQL语句之后相邻的一条SQL语句。
这样,将分析SQL文件中SQL语句的过程设置在源服务器,源服务器不需要向目的服务器发送整个SQL文件,目的服务器也不需要存储整个SQL文件,不仅可以节约传输资源,而且可以节约目的服务器的存储空间。
另外,执行图2所示流程的服务器为目的服务器时,步骤流程可以如图4所示:
步骤401,源数据库中数据要进行迁移时,源服务器可以生成SQL文件,SQL文件中包括多条SQL语句。
步骤402,源服务器将SQL文件发送至目的服务器。
步骤403,目的服务器接收源服务器发送的SQL文件后,执行图2中步骤202至步骤213的过程。
这样,由于目的服务器可以将进行串行执行的SQL语句与进行并行执行的SQL语句区分开,所以可以支持比较复杂的SQL语句,如更新(update)语句、删除(drop)语句等。
另外,执行图2所示流程的服务器为除源服务器和目的服务器之外的服务器时,步骤流程可以如图5所示:
步骤501,源数据库中数据要进行迁移时,源服务器可以生成SQL文件,SQL文件中包括多条SQL语句。
步骤502,源服务器将SQL文件发送至除源服务器和目的服务器之外的服务器(可以称为是中间服务器)。
步骤503,中间服务器接收到源服务器发送的SQL文件后,中间服务器执行图2中步骤202至步骤209的过程。
步骤504,中间服务器将任务中的SQL语句发送至目的服务器。目的服务器接收中间服务器发送的SQL语句,执行SQL语句。
步骤504的处理与上述步骤303的处理完全相同,此处不再赘述。
这样,由于可以在中间服务器上分析SQL文件中的SQL语句,所以中间服务器可以直接将执行的任务中的SQL语句发送至目的服务器,目的服务器不需要存储整个SQL文件,可以节约存储空间。
另外,如图6所示,本申请实施例中执行上述图2的过程时,可以通过逻辑上的模块实现,即词法分析模块、任务分解模块和执行模块。词法分析模块可以用于图2中解析SQL语句和确定SQL语句的元数据信息。任务分解模块可以用于图2中确定SQL语句所属的事务,以及确定SQL语句所属的任务。执行模块可以用于图2中控制执行任务中的SQL语句。
本申请实施例中,多个任务包括的SQL语句并行执行,多个任务中的每个任务包括的SQL语句串行执行。在服务器获取到新的多条SQL语句时,可以将每条SQL语句依次作为目标SQL语句。然后服务器判断目标SQL语句是否属于多个任务中某个任务关联的事务,在目标SQL语句属于第一任务关联的事务时,可以将目标SQL语句添加至第一任务中。这样,由于基于事务可以将SQL语句分到不同的任务中,而且不同的任务的SQL语句可以并行执行,所以可以提高执行SQL语句的效率。
图7是本申请实施例提供的执行语句的装置的结构图。该装置可以通过软件、硬件或者两者的结合实现成为装置中的部分或者全部。本申请实施例提供的装置可以实现本申请实施例图2所述的流程,该装置包括:获取模块710和添加模块720,其中:
获取模块710,用于获取新的多条SQL语句,所述新的多条SQL语句中的每条SQL语句依次为目标SQL语句,具体可以用于执行步骤201以及其包含的隐含步骤;
添加模块720,用于在所述目标SQL语句属于所述第一任务关联的事务时,将所述目标SQL语句添加至所述第一任务中,具体可以用于执行步骤204以及其包含的隐含步骤。
在一种可能的实现方式中,所述获取模块710,还用于
在所述目标SQL语句不属于所述多个任务关联的任一事务时,获取所述目标SQL语句的元数据信息
所述添加模块720,还用于在第二任务包括元数据信息与所述目标SQL语句的元数据信息相同的SQL语句时,将所述目标SQL语句添加至所述第二任务中,所述第二任务为所述多个任务中的一个任务。
在一种可能的实现方式中,所述添加模块720,还用于:
在所述多个任务中不存在元数据信息与所述目标SQL语句的元数据信息相同的SQL语句时,建立包括所述目标SQL语句的新任务,所述新任务与所述多个任务并行执行。
在一种可能的实现方式中,所述添加模块720,还用于:
按照所述新的多条SQL语句的时间顺序,确定是否存在所述目标SQL语句所属的事务。
在一种可能的实现方式中,所述添加模块720,还用于:
若所述目标SQL语句属于目标事务的开始的SQL语句和结束的SQL语句之间,则确定所述目标事务为所述目标SQL语句所属的事务;
若所述目标SQL语句不属于任何事务的开始的SQL语句和结束的SQL语句之间,则生成一个所述目标SQL语句所属的事务。
本申请中,多个任务包括的SQL语句并行执行,多个任务中的每个任务包括的SQL语句串行执行。在服务器获取到新的多条SQL语句时,可以将每条SQL语句依次作为目标SQL语句。然后服务器判断目标SQL语句是否属于多个任务中某个任务关联的事务,在目标SQL语句属于第一任务关联的事务时,可以将目标SQL语句添加至第一任务中。这样,由于基于事务可以将SQL语句分到不同的任务中,而且不同的任务的SQL语句可以并行执行,所以可以提高执行SQL语句的效率。
需要说明的是:上述实施例提供的执行语句的装置在执行语句时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的执行语句的装置与执行语句的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本实施例中,还提供了一种执行语句的服务器,该服务器包括处理器和存储器,所述存储器用于存储一个或多个指令,所述处理器通过执行所述一个或多个指令来实现上述所提供的执行语句的方法,或者所述处理器通过执行所述一个或多个指令来实现上述提供的执行语句的装置。
本实施例中,还提供了一种计算机可读存储介质,计算机可读存储介质存储有指令,当计算机可读存储介质在服务器上运行时,使得服务器执行上述所提供的执行语句的方法,或者使得所述服务器部署上述提供的执行语句的装置。
本实施例中,还提供了一种包含指令的计算机程序产品,当其在服务器上运行时,使得服务器执行上述所提供的执行语句的方法,或者使得所述服务器部署上述提供的执行语句的装置。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现,当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令,在服务器或终端上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴光缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是服务器或终端能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(如软盘、硬盘和磁带等),也可以是光介质(如数字视盘(Digital Video Disk,DVD)等),或者半导体介质(如固态硬盘等)。
以上所述仅为本申请的示例性实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (13)
1.一种执行语句的方法,其特征在于,多个任务包括的结构化查询语言SQL语句并行执行,所述多个任务中的每个任务包括的SQL语句串行执行,所述多个任务中的一个任务为第一任务;所述方法包括:
获取新的多条SQL语句,所述新的多条SQL语句中的每条SQL语句依次为目标SQL语句;
在所述目标SQL语句属于所述第一任务关联的事务时,将所述目标SQL语句添加至所述第一任务中。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述目标SQL语句不属于所述多个任务关联的任一事务时,获取所述目标SQL语句的元数据信息;
在第二任务包括元数据信息与所述目标SQL语句的元数据信息相同的SQL语句时,将所述目标SQL语句添加至所述第二任务中,所述第二任务为所述多个任务中的一个任务。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述多个任务中不存在元数据信息与所述目标SQL语句的元数据信息相同的SQL语句时,建立包括所述目标SQL语句的新任务,所述新任务与所述多个任务并行执行。
4.根据权利要求1至3任一所述的方法,其特征在于,所述方法包括:
按照所述新的多条SQL语句的时间顺序,确定是否存在所述目标SQL语句所属的事务。
5.根据权利要求1至4任一所述的方法,其特征在于,所述方法包括:
若所述目标SQL语句属于目标事务的开始的SQL语句和结束的SQL语句之间,则确定所述目标事务为所述目标SQL语句所属的事务;
若所述目标SQL语句不属于任何事务的开始的SQL语句和结束的SQL语句之间,则生成一个所述目标SQL语句所属的事务。
6.一种执行语句的装置,其特征在于,多个任务包括的结构化查询语言SQL语句并行执行,所述多个任务中的每个任务包括的SQL语句串行执行,所述多个任务中的一个任务为第一任务,所述装置包括:
获取模块,用于获取新的多条SQL语句,所述新的多条SQL语句中的每条SQL语句依次为目标SQL语句;
添加模块,用于在所述目标SQL语句属于所述第一任务关联的事务时,将所述目标SQL语句添加至所述第一任务中。
7.根据权利要求6所述的装置,其特征在于,所述获取模块,还用于:
在所述目标SQL语句不属于所述多个任务关联的任一事务时,获取所述目标SQL语句的元数据信息;
所述添加模块,还用于在第二任务包括元数据信息与所述目标SQL语句的元数据信息相同的SQL语句时,将所述目标SQL语句添加至所述第二任务中,所述第二任务为所述多个任务中的一个任务。
8.根据权利要求7所述的装置,其特征在于,所述添加模块,还用于:
在所述多个任务中不存在元数据信息与所述目标SQL语句的元数据信息相同的SQL语句时,建立包括所述目标SQL语句的新任务,所述新任务与所述多个任务并行执行。
9.根据权利要求6至8任一所述的装置,其特征在于,所述添加模块,还用于:
按照所述新的多条SQL语句的时间顺序,确定是否存在所述目标SQL语句所属的事务。
10.根据权利要求6至9任一所述的装置,其特征在于,所述确添加模块,还用于:
若所述目标SQL语句属于目标事务的开始的SQL语句和结束的SQL语句之间,则确定所述目标事务为所述目标SQL语句所属的事务;
若所述目标SQL语句不属于任何事务的开始的SQL语句和结束的SQL语句之间,则生成一个所述目标SQL语句所属的事务。
11.一种执行语句的服务器,其特征在于,所述服务器包括处理器和存储器,其中:
所述存储器中存储有一个或多个指令;
所述处理器执行所述一个或多个指令,以实现所述权利要求1-5中任一权利要求所述的方法,或者实现所述权利要求6-10任一所述的装置。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有指令,当所述计算机可读存储介质在服务器上运行时,使得所述服务器执行所述权利要求1-5中任一权利要求所述的方法,或者使得所述服务器部署所述权利要求6-10任一所述的装置。
13.一种包含指令的计算机程序产品,其特征在于,当所述计算机程序产品在服务器上运行时,使得所述服务器执行所述权利要求1-5中任一权利要求所述的方法,或者使得所述服务器部署所述权利要求6-10任一所述的装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910760166.6A CN112395307A (zh) | 2019-08-16 | 2019-08-16 | 执行语句的方法、装置、服务器及存储介质 |
PCT/CN2020/084355 WO2021031583A1 (zh) | 2019-08-16 | 2020-04-11 | 执行语句的方法、装置、服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910760166.6A CN112395307A (zh) | 2019-08-16 | 2019-08-16 | 执行语句的方法、装置、服务器及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112395307A true CN112395307A (zh) | 2021-02-23 |
Family
ID=74602857
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910760166.6A Pending CN112395307A (zh) | 2019-08-16 | 2019-08-16 | 执行语句的方法、装置、服务器及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN112395307A (zh) |
WO (1) | WO2021031583A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732747A (zh) * | 2021-03-30 | 2021-04-30 | 广州嘉为科技有限公司 | 在目标计算机上快速执行sql方法、系统、设备及介质 |
CN113076331A (zh) * | 2021-03-23 | 2021-07-06 | 中国联合网络通信集团有限公司 | 中台数据处理方法、装置、设备、存储介质及程序产品 |
CN114756573A (zh) * | 2022-06-16 | 2022-07-15 | 恒生电子股份有限公司 | 数据处理方法、装置及系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102354289B (zh) * | 2011-09-21 | 2012-10-10 | 苏州大学 | 一种并发事务的调度方法和相关装置 |
US10747765B2 (en) * | 2017-05-30 | 2020-08-18 | Ocient Inc. | System and method for optimizing large database management systems with multiple optimizers |
CN108897776A (zh) * | 2018-06-01 | 2018-11-27 | 郑州云海信息技术有限公司 | 一种数据信息的运算处理方法、装置及计算机存储介质 |
CN110069335A (zh) * | 2019-05-07 | 2019-07-30 | 江苏满运软件科技有限公司 | 任务处理系统、方法、计算机设备和存储介质 |
-
2019
- 2019-08-16 CN CN201910760166.6A patent/CN112395307A/zh active Pending
-
2020
- 2020-04-11 WO PCT/CN2020/084355 patent/WO2021031583A1/zh active Application Filing
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113076331A (zh) * | 2021-03-23 | 2021-07-06 | 中国联合网络通信集团有限公司 | 中台数据处理方法、装置、设备、存储介质及程序产品 |
CN113076331B (zh) * | 2021-03-23 | 2023-06-02 | 中国联合网络通信集团有限公司 | 中台数据处理方法、装置、设备、存储介质及程序产品 |
CN112732747A (zh) * | 2021-03-30 | 2021-04-30 | 广州嘉为科技有限公司 | 在目标计算机上快速执行sql方法、系统、设备及介质 |
CN114756573A (zh) * | 2022-06-16 | 2022-07-15 | 恒生电子股份有限公司 | 数据处理方法、装置及系统 |
CN114756573B (zh) * | 2022-06-16 | 2022-10-04 | 恒生电子股份有限公司 | 数据处理方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2021031583A1 (zh) | 2021-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107506451B (zh) | 用于数据交互的异常信息监控方法及装置 | |
CN110908997B (zh) | 数据血缘构建方法、装置、服务器及可读存储介质 | |
CN107247808B (zh) | 一种分布式NewSQL数据库系统及图片数据查询方法 | |
US9141678B2 (en) | Distributed query cache in a database system | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
CN110795455A (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
CN106874281B (zh) | 实现数据库读写分离的方法和装置 | |
CN112395307A (zh) | 执行语句的方法、装置、服务器及存储介质 | |
US11366808B2 (en) | Query processing method, data source registration method, and query engine | |
US11308060B2 (en) | Method, apparatus, device and storage medium for managing index | |
CN109086382B (zh) | 一种数据同步方法、装置、设备及存储介质 | |
CN111737227B (zh) | 数据修改方法及系统 | |
CN113051268A (zh) | 数据查询方法、数据查询装置、电子设备及存储介质 | |
CN112988782A (zh) | Hive支持交互式查询的方法、装置及存储介质 | |
CN108415998B (zh) | 应用依赖关系更新方法、终端、设备及存储介质 | |
CN111611276A (zh) | 数据查询方法、装置及存储介质 | |
CN111125213A (zh) | 数据采集的方法、装置及其系统 | |
CN114356964A (zh) | 数据血缘构建方法、装置、存储介质及电子设备 | |
CN111444208B (zh) | 一种数据更新方法及相关设备 | |
CN116010461A (zh) | 数据血缘关系解析方法及装置、存储介质及电子设备 | |
CN116126950A (zh) | 实时物化视图系统和方法 | |
CN110851437A (zh) | 一种存储方法、装置及设备 | |
CN113760600B (zh) | 一种数据库备份方法、数据库还原方法和相关装置 | |
CN114461454A (zh) | 数据恢复方法、装置、存储介质及电子设备 | |
CN116302206B (zh) | 一种基于MQ的presto数据源热加载方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220216 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Applicant after: Huawei Cloud Computing Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |