CN113934763A - 分布式数据库的sql查询方法及装置 - Google Patents
分布式数据库的sql查询方法及装置 Download PDFInfo
- Publication number
- CN113934763A CN113934763A CN202111549555.8A CN202111549555A CN113934763A CN 113934763 A CN113934763 A CN 113934763A CN 202111549555 A CN202111549555 A CN 202111549555A CN 113934763 A CN113934763 A CN 113934763A
- Authority
- CN
- China
- Prior art keywords
- sql
- data access
- data
- execution plan
- engine
- 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.)
- Granted
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/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/24564—Applying rules; Deductive 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
Abstract
本说明书的实施例提供一种分布式数据库的SQL查询方法及装置。分布式数据库包括多个分布式数据存储节点,每个分布式数据存储节点包括SQL引擎和存储引擎,在进行SQL查询时,经由SQL语句接收接口接收SQL语句。SQL优化器根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划。SQL执行器根据串行调度策略执行第一SQL执行计划,以实现SQL查询操作。在执行第一SQL执行计划时,响应于执行需要访问存储节点的存储引擎上的存储数据的SQL算子,SQL执行器使用SQL算子所对应的数据访问参数向对应存储节点的存储引擎发起基于数据分区的多分区数据访问来获取对应的数据访问结果,所述数据访问结果用于通知当前SQL算子执行完成或者用于供后续SQL算子执行时使用。
Description
技术领域
本说明书实施例通常涉及数据库领域,尤其涉及分布式数据库的SQL查询方法及装置。
背景技术
分布式数据库由多个分布式存储节点组成。每个分布式存储节点包括SQL引擎和存储引擎。分布式数据库通常采用share noting架构,比如,OceanBase数据库。在这种分布式数据库中,数据分布式地存储在各个存储引擎中,并且存储引擎本身不提供跨存储节点的数据访问能力。每个分布式存储节点上涉及的数据访问所需要的CPU资源和IO资源都发生在本地,由该分布式存储节点上的SQL引擎执行。
发明内容
本说明书实施例提供用于分布式数据库的SQL查询的方法及装置。利用该方法及装置,可以提高小查询结果集时的SQL查询效率。
根据本说明书实施例的一个方面,提供一种分布式数据库的SQL查询方法,所述分布式数据库包括多个分布式数据存储节点,每个分布式数据存储节点包括SQL引擎和存储引擎,所述SQL查询方法由SQL引擎执行,所述SQL查询方法包括:接收SQL语句;根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划;根据串行调度策略执行所述第一SQL执行计划,其中,响应于执行需要访问存储节点上的存储数据的SQL算子,使用所述SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问来获取对应的数据访问结果,所述数据访问结果用于通知当前SQL算子执行完成或者用于供后续SQL算子执行时使用。
可选地,在上述方面的一个示例中,所述SQL引擎包括数据访问服务(Data AccessService,DAS)层,使用所述SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问来获取对应的数据访问结果包括:经由所述数据访问服务层使用所述SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问来获取对应的数据访问结果。
可选地,在上述方面的一个示例中,经由所述数据访问服务层使用所述SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问可以包括:响应于SQL引擎中的SQL执行器执行需要访问存储节点上的存储数据的SQL算子,接收来自所述SQL执行器的数据访问请求,所述数据访问请求包括SQL算子所对应的数据访问参数;基于所接收的数据访问参数生成与所述SQL算子对应的一个或多个数据访问任务,每个数据访问任务对应存储节点的存储引擎上的一个数据分区;将所生成的数据访问任务打包为本地消息和/或RPC消息并基于所述本地消息和/或所述RPC消息发起针对各个对应存储引擎的数据访问;以及接收各个对应的存储引擎返回的数据访问结果并返回给所述SQL执行器。
可选地,在上述方面的一个示例中,经由所述数据访问服务层使用所述SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问还可以包括:在所述数据访问服务层与各个待访问远端存储节点的SQL引擎中的数据访问服务层之间建立数据传输通道。所述RPC消息经由所述数据传输通道传输给对应远端存储节点的SQL引擎的数据传输服务层,以及所述数据访问结果经由所述数据传输通道返回给本地存储节点的数据访问服务层。
可选地,在上述方面的一个示例中,所述数据访问参数包括:数据表ID、数据分区ID列表、数据列ID列表以及与所述SQL算子对应的目标操作数据信息。
可选地,在上述方面的一个示例中,所述目标操作数据信息包括数据扫描范围和目标数据行中的至少一个。
可选地,在上述方面的一个示例中,与同一远端存储节点对应的多个可合并数据访问任务被打包为同一RPC消息。
可选地,在上述方面的一个示例中,所述可合并数据访问任务包括下述数据访问任务中的至少一种:针对同一远端存储节点的不同数据分区的多个具有相同数据访问类型的数据访问任务;和与同一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算子对应的一个或多个数据访问任务,每个数据访问任务对应存储节点的存储引擎上的一个数据分区;数据访问模块,将所生成的数据访问任务打包为本地消息和/或RPC消息并基于所述本地消息和/或所述RPC消息发起针对各个对应存储引擎的数据访问;以及数据传输模块,接收各个对应的存储引擎返回的数据访问结果并返回给所述SQL执行器。
可选地,在上述方面的一个示例中,所述数据访问服务层还包括数据传输通道建立模块,在所述数据访问服务层与各个待访问远端存储节点的SQL引擎中的数据访问服务层之间建立数据传输通道。所述RPC消息经由所述数据传输通道传输给对应远端存储节点的SQL引擎的数据传输服务层,以及所述数据访问结果经由所述数据传输通道返回给本地存储节点的数据访问服务层。
可选地,在上述方面的一个示例中,在基于所接收的数据访问参数生成一个或多个数据访问任务之后,所述数据访问模块将与同一远端存储节点对应的多个可合并数据访问任务打包为同一RPC消息。
可选地,在上述方面的一个示例中,所述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示出了现有SQL引擎的示例方框图。
图3示出了基于图2中的SQL引擎实现的分布式数据库的SQL查询过程的示例流程图。
图4示出了并行调度策略下的第二SQL执行计划的示例示意图。
图5示出了图4中示出的SQL执行计划的计划划分过程的示例示意图。
图6示出了根据本说明书的实施例的SQL引擎的示例方框图。
图7示出了根据本说明书的实施例的分布式数据库的SQL查询过程的示例流程图。
图8示出了串行调度策略下的第一SQL执行计划的示例示意图。
图9示出了根据本说明书的实施例的多分区数据访问过程的示例流程图。
图10A和图10B分别示出了第一SQL执行计划的示例示意图。
图11示出了根据本说明书的实施例的DAS数据访问过程的示例示意图。
图12示出了根据本说明书的另一实施例的SQL引擎的示例方框图。
图13示出了根据本说明书的另一实施例的分布式数据库的SQL查询过程的示例流程图。
图14示出了根据本说明书的另一实施例的SQL引擎的示例方框图。
图15示出了根据本说明书的另一实施例的分布式数据库的SQL查询过程的示例流程图。
图16示出了根据本说明书的实施例的基于计算机系统实现的SQL引擎的示例示意图。
具体实施方式
现在将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。例如,所描述的方法可以按照与所描述的顺序不同的顺序来执行,以及各个步骤可以被添加、省略或者组合。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
图1示出了分布式数据库1的示例示意图。如图1所示,分布式数据库系统1包括多个存储节点10-1到10-4。存储节点10-1到10-4为分布式存储节点,每个存储节点包括SQL引擎和存储引擎。要说明的是,图1示出的示例仅仅是例示性的。在其它实施例中,分布式数据库系统1可以包括更多或更少的存储节点。
分布式数据库1例如可以采用share noting架构,比如,OceanBase数据库。在这种分布式数据库中,数据分布式地存储在各个存储节点的存储引擎中,并且存储引擎本身不提供跨存储节点的数据访问能力。例如,数据可以被分割为多个数据分区(也可以称为数据分块),所分割出的数据分区分别存储到不同的存储引擎中。每个存储引擎可以存储一个或多个数据分区。每个存储节点上涉及的数据访问所需要的CPU资源和IO资源都发生在本地,由该存储节点上的SQL引擎执行。
在存储节点的本地SQL引擎接收到SQL查询语句(下文中称为SQL语句)并生成SQL执行计划后,如果该SQL语句需要跨节点访问数据,则本地SQL引擎会将SQL执行计划按照SQL语义拆分为多个SQL执行子计划。在本说明书中,SQL执行子计划可以称为DFO(DataFlow Operation)。在完成DFO拆分后,本地SQL引擎将所生成的DFO并行调度给DFO执行所需数据所在远端存储节点上的远端SQL引擎,由该远端SQL引擎访问对应的本地存储引擎获取数据来执行该DFO。
图2示出了现有SQL引擎200的示例方框图,以及图3示出了基于图2中的SQL引擎实现的分布式数据库的SQL查询过程300的示例流程图。
如图2所示,SQL引擎200包括SQL语句接收接口210、SQL优化器220、执行计划拆分器230、并行执行调度器240和SQL执行器250。
在进行SQL查询时,如图3所示,在310,经由SQL语句接收接口210接收SQL语句。例如,在一个示例中,所接收的SQL语句例如可以为“select t2.a, t2.b, (select sum(c)from t5 where t1.b=t5.a) as sum from t1, t2, t3, t4 where t1.a=1 and t1.b=t2.a and t1.b=t3.a and t1.b=t4.a”。在一个示例中,SQL语句接收接口210可以被实现为SQL引擎的输入接口、输入单元或输入装置。例如,SQL语句接收接口210可以是SQL引擎的客户端界面上的输入框等。
在320,经由SQL优化器220根据所接收的SQL语句生成基于并行调度策略的SQL执行计划(即,第二SQL执行计划),所述第二SQL执行计划包括由多个SQL算子组成的树状结构。SQL算子是构成SQL执行计划的基本组成单元,用来描述与具体SQL语义对应的基础操作,比如,TABLE SCAN算子、TABLE INSERT算子、TABLE UPDATE算子、TABLE DELETE算子、JOIN算子、GROUP BY算子、ORDER BY算子、EXCHANGE算子等。图4示出了在并行调度执行策略下的第二SQL执行计划的示例示意图。
在330,经由执行计划拆分器230根据SQL语义将第二SQL执行计划拆分为多个DFO。针对图4中示出的第二SQL执行计划,可以以EXCHANGE OUT算子为边界来拆分SQL执行计划,所得到的DFO拆分结果如图5所示。在图5的示例中,21号算子-24号算子为DFO 0(EX2000)、11号算子-12号算子为DFO 1(EX1000)、8号算子-10号算子以及13号算子-14号算子为DFO 2(EX1001)、5号算子-7号算子以及15号算子-16号算子为DFO 3(EX1002)、2号算子-4号算子以及17号算子-18号算子为DFO4(EX1003)以及0号算子和19号算子为DFO 5。
在340,经由并行执行调度器240并行调度执行所生成的DFO。在并行调度DFO时,SQL引擎需要启用多个线程来分别调度执行各自对应的DFO。响应于所调度的DFO需要访问本地存储节点所存储的数据,并行执行调度器240将需要访问本地存储引擎所存储数据的DFO调度给本地SQL执行器250。相应地,在350,经由本地SQL执行器250访问本地存储引擎获取对应的数据来执行对应的DFO。
响应于所调度的DFO需要访问远端存储节点所存储数据,在360,并行执行调度器240将需要访问远端存储节点存储所存储数据的DFO以RPC消息的形式发送给对应的远端SQL引擎,由该远端SQL引擎访问所在存储节点上的存储引擎获取数据来在远端存储节点处执行该DFO。在370,从远端SQL引擎接收所返回的DFO执行结果。
从图5的示例中可以看出,在分发给远端SQL引擎的DFO中,除了用于数据访问的SQL算子(例如,TABLE SCAN算子)之外,还需要包括其它SQL算子。例如,在图5中示出的DFO0中,除了包括TABLE SCAN算子之前,还包括MERGE GROUP BY算子等。由此,按照上面的SQL查询方案,在所生成的RPC消息中,除了包括用于数据访问的SQL算子以及与该SQL算子执行操作相关的所有配置信息(例如,数据访问参数)之外,还需要包括其它SQL算子(例如,MERGEGROUP BY算子)以及与该其它SQL算子执行操作相关的所有配置信息,从而导致所生成的RPC消息具有较大的数据量。相较于TP(Transaction Processing)场景下的小查询结果集,该RPC消息具有更大的数据量,由此导致与从远端存储节点获取数据所引入的代价相比,本地存储节点和远端存储节点之间发生的RPC消息传输会引入更大的RPC消息传输代价。
TP也可以称为OLTP(On-Line Transaction Processing),即,联机事务处理。在TP场景下,以事务元为数据处理单位来进行交互处理。TP系统可以对数据进行即时更新或其它操作,TP系统内的数据总是保持在最新状态。在TP处理时,可以将一组保持数据一致性的操作序列指定为一个事务元,通过终端、个人计算机或其它设备将事务元输入TP系统,经过TP系统处理后返回结果。
此外,在上述基于并行调度策略的SQL查询方案中,还需要本地SQL引擎启用额外线程(多个线程)调度远端SQL引擎执行所分发的DFO,从而会引入DFO序列化导致的代价,使得SQL查询所引入的代价更大,由此导致上述SQL查询方案不适用于小查询结果集场景下的SQL查询,例如,TP场景下的小查询结果集。
鉴于上述,本说明书的实施例提出一种适用于小查询结果集场景下的SQL查询方案。在该SQL查询方案中,基于SQL语句生成基于串行调度策略的SQL执行计划,并基于串行调度策略执行所生成的SQL执行计划。在该串行调度策略中,在本地SQL执行器执行需要访问存储引擎上的存储数据的SQL算子时,仅仅使用SQL算子所对应的数据访问参数向对应远端存储节点发起基于数据分区的多分区数据访问以获取对应的数据访问结果,所获取的数据访问结果被返回给本地SQL执行器来在本地执行后续其它SQL算子,从而无需将与需要访问远端存储节点上的存储数据的SQL算子无关的其它SQL算子及其执行操作相关的配置信息打包在RPC消息中发送给远端存储节点,由此降低本地存储节点与远端存储节点之间的消息传输代价,进而提升SQL查询效率。
此外,在一些实施例中,在SQL引擎中引入数据访问服务(DAS,Data AccessService)层。DAS层通过对本地SQL引擎的数据访问接口进行基于数据分区访问的数据访问接口封装,例如,对本地SQL引擎的数据访问接口做一层ObPartitionStorge的接口封装,并为SQL引擎的数据访问接口提供基于数据分区的多分区访问能力,从而使得DAS层提供对远端存储节点的远程数据访问能力,无需感知SQL语句的具体语义。由此,在本地SQL执行器执行SQL执行计划时,响应于本地SQL执行器执行需要访问存储引擎上的存储数据的SQL算子,经由SQL引擎的DAS层使用SQL算子所对应的数据访问参数向对应远端存储节点发起基于数据分区的多分区数据访问,以获取对应的数据访问结果,所获取的数据访问结果被返回给本地SQL执行器来执行后续其它SQL算子,从而无需将与需要访问远端存储节点上的存储数据的SQL算子无关的其它SQL算子及其执行操作相关的配置信息打包在RPC消息中发送给远端存储节点,由此降低本地存储节点与远端存储节点之间的消息传输代价,进而提升SQL查询效率。
图6示出了根据本说明书的实施例的SQL引擎600的示例方框图。
如图6所示,SQL引擎600包括SQL语句接收接口610、SQL优化器620、SQL执行器630以及DAS层640。
SQL语句接收接口610被配置为接收SQL语句。SQL优化器620被配置为根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划,第一SQL执行计划包括由多个SQL算子组成的树状结构。例如,针对SQL语句“select t2.a, t2.b, (select sum(c) from t5where t1.b=t5.a) as sum from t1, t2, t3, t4 where t1.a=1 and t1.b=t2.a andt1.b=t3.a and t1.b=t4.a”,所生成的第一SQL执行计划如图8所示。
SQL执行器630被配置为根据串行调度策略执行第一SQL执行计划,以实现SQL查询操作。
DAS层640被配置为通过对本地SQL引擎的数据访问接口进行基于数据分区访问的数据访问接口封装,并为数据访问接口提供基于数据分区的多分区访问能力,从而使得DAS层仅仅提供对远端存储引擎的远程数据访问能力,无需感知SQL语句的具体语义。DAS层640的数据访问方式和事务控制以数据分区(Partition)为基本粒度进行,并提供对数据的RPC访问和流控能力。
在SQL执行器执行第一SQL执行计划时,响应于SQL执行器执行需要访问存储节点上的存储数据的SQL算子,DAS层640使用SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问,以获取对应的数据访问结果。所获取的数据访问结果用于通知当前SQL算子执行完成或者用于供后续SQL算子执行时使用。
在一个示例中,如图6所示,DAS层640可以包括数据访问请求接收模块641、数据访问任务生成模块643、数据访问模块645和数据传输模块647。
数据访问请求接收模块641被配置为响应于SQL执行器执行需要访问存储节点上的存储数据的SQL算子,从SQL执行器接收数据访问请求,所述数据访问请求包括SQL算子所对应的数据访问参数。
在SQL执行计划中,需要访问存储节点的存储引擎上的存储数据的SQL算子例如可以包括但不限于:TABLE SCAN算子、TABLE INSERT算子、TABLE UPDATE算子、TABLE DELETE算子、MERGE算子等等。所发送的数据访问参数例如可以包括数据表ID(TABLE ID)、数据列ID列表(Column ID List)、数据分区ID列表(Data Partition ID List)以及与SQL算子对应的目标操作数据信息。所述目标操作数据信息例如可以包括数据扫描范围和目标数据行中的至少一个。在SQL算子是TABLE SCAN算子时,所述目标操作数据信息可以包括数据扫描范围(Scan Range)。在SQL算子是TABLE INSERT算子、TABLE UPDATE算子或TABLE DELETE算子,所述目标操作数据信息可以包括目标数据行。在SQL算子是MERGE算子时,所述目标操作数据信息例如可以包括数据扫描范围和目标数据行。在本说明书中,TABLE INSERT算子、TABLE UPDATE算子或TABLE DELETE算子也可以合称为TABLE DML(Data ManipulationLanguage)算子。
数据访问任务生成模块643被配置为基于所接收的数据访问参数生成与SQL算子对应的一个或多个数据访问任务,每个数据访问任务对应存储节点的存储引擎上的一个数据分区。在本说明书中,数据访问任务也可以称为DAS任务。同样,所生成的DAS任务至少包括TABLE ID、Column ID List、Data Partition ID List以及与SQL算子对应的目标操作数据信息。此外,所生成的DAS任务还包括DAS任务类型。DAS任务类型例如可以包括但不限于:TABLE SCAN、TABLE INSERT、TABLE UPDATE和TABLE DELETE等。这里,针对存储引擎的DAS数据访问以数据分区为基本粒度执行,即,每个DAS任务对应存储节点的存储引擎上的一个数据分区。换言之,数据访问任务生成模块643根据所接收的数据访问参数,将数据访问请求封装为多个基于数据分区的DAS任务。所生成的DAS任务可以包括本地DAS任务和/或远端DAS任务。本地DAS任务是访问本地存储节点的存储引擎上的存储数据的DAS任务,以及远端DAS任务是访问远端存储节点的存储引擎上的存储数据的DAS任务。
数据访问模块645被配置为将所生成的DAS任务打包为本地消息和/或RPC消息并基于本地消息和/或RPC消息发起针对各个对应存储引擎的数据访问。例如,在一个示例中,针对每个本地DAS任务,数据访问模块645可以打包为一个本地消息,基于所生成的本地消息的本地DAS任务中的数据分区ID来发起针对本地存储引擎的数据访问。针对每个远端DAS任务,数据访问模块645可以打包为一个RPC消息,基于所生成的RPC消息中的远端DAS任务的数据分区ID确定出数据分区所在存储节点,然后将所生成的RPC消息发送给待访问数据所在远端存储节点的SQL引擎中的远端DAS层,由该远端DAS层基于DAS任务来执行针对本地存储引擎的数据访问操作,并获取对应的数据访问结果。
数据传输模块647被配置为接收各个对应的存储节点返回的数据访问结果并返回给SQL执行器,所述数据访问结果用于通知当前SQL算子执行完成或者用于供后续SQL算子执行时使用。
可选地,在一些实施例中,DAS层640还可以包括数据传输通道建立模块(未示出)。所述数据传输通道建立模块被配置为在本地存储节点的SQL引擎中的本地DAS层与各个待访问远端存储节点的SQL引擎中的远端DAS层之间建立数据传输通道。数据传输模块647经由所建立的数据传输通道将RPC消息传输给对应远端存储节点的SQL引擎的远端DAS层。所传输的RPC消息中仅仅包括数据访问所需的必要数据访问参数,从而可以有效减小RPC消息的数据量,进而降低本地存储节点与远端存储节点之间的RPC消息传输代价。同样,在远端存储节点的远端DAS层获取数据访问结果后,经由所建立的数据传输通道将数据访问结果返回给本地存储节点的本地DAS层。该数据传输通道在执行对应的SQL算子时创建。
要说明的是,在一些实施例中,SQL引擎600也可以不包括DAS层640。在这种情况下,响应于执行需要访问存储节点上的存储数据的SQL算子,SQL执行器630使用SQL算子所对应的数据访问参数直接向对应存储节点发起基于数据分区的多分区数据访问,以获取对应的数据访问结果。
图7示出了根据本说明书的实施例的分布式数据库的SQL查询过程700的示例流程图。
如图7所示,在710,经由SQL语句接收接口接收SQL语句。
在720,经由SQL优化器根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划。在本说明书中,在基于串行调度策略来执行第一SQL执行计划时,在SQL引擎中启用一个线程来串行调度第一SQL执行计划中的各个SQL算子。
在730,经由SQL执行器根据串行调度策略执行第一SQL执行计划,以实现SQL查询操作。在SQL执行器执行第一SQL执行计划中的每个SQL算子时,在740,判断所执行的SQL算子是否需要访问存储节点的存储引擎上的存储数据,例如,判断所执行的SQL算子是否是TABLE SCAN算子,TABLE INSERT算子、TABLE UPDATE算子、TABLE DELETE算子或MERGE算子等。
响应于SQL执行器所执行的SQL算子无需访问存储节点上的存储数据,在750,在本地执行该SQL算子,随后流程进行到770。
响应于SQL执行器所执行的SQL算子需要访问存储节点上的存储数据,在760, 使用SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问,以获取对应的数据访问结果。所获取的数据访问结果用于通知当前SQL算子执行完成或者用于供后续SQL算子执行时使用。随后,流程进行到770。
在770,判断第一SQL执行计划中是否存在未处理SQL算子。如果存在未处理SQL算子,则返回到730,执行下一SQL算子。如果不存在未处理SQL算子,则流程结束。
在一些实施例中,SQL引擎可以包括DAS层。在这种情况下,经由SQL引擎中的DAS层使用SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问,以获取对应的数据访问结果。
图9示出了根据本说明书的实施例的多分区数据访问过程900的示例流程图。多分区数据访问过程900由DAS层640执行。
如图9所示,在910,响应于SQL执行器执行需要访问存储节点上的存储数据的SQL算子,从SQL执行器接收数据访问请求,所述数据访问请求包括SQL算子所对应的数据访问参数。
在920,基于所接收的数据访问参数生成一个或多个数据访问任务,每个数据访问任务对应待访问的存储节点的存储引擎上的一个数据分区。
在930,将所生成的数据访问任务打包为本地消息和/或RPC消息并基于本地消息和/或RPC消息发送针对各个对应存储节点的存储引擎的数据访问。具体地,在所发起的数据访问任务是针对本地存储节点的存储引擎上的数据访问时,将该数据访问任务打包为本地消息,并且以本地消息发送的方式发送给本地存储引擎以从本地存储引擎获取数据访问结果。在所发起的数据访问任务是针对远端存储节点的数据访问时,将该数据访问任务打包为RPC消息,并且以RPC方式将RPC消息发送给远端存储节点的SQL引擎中的远端DAS层,由该远端DAS层根据数据访问任务向对应的本地存储引擎发起数据访问来获取数据访问结果。
在940,接收各个对应的存储节点返回的数据访问结果。这里,在存储节点是远端存储节点的情况下,数据访问结果同样采用RPC方式经由远端存储节点中的远端DAS层返回给本地存储节点的本地DAS层。在950,将所接收的数据访问结果返回给SQL执行器,所述数据访问结果用于通知当前SQL算子执行完成或用于供后续SQL算子执行时使用。
可选地,在一些实施例中,还可以在本地存储节点的本地DAS层与各个对应的远端存储节点的远端DAS层之间建立数据传输通道。本地DAS层通过所建立的数据传输通道将RPC消息传输给远端DAS层,以及远端DAS层通过所建立的数据传输通道将数据访问结果返回给本地DAS层。
可选地,在一些实施例中,如果针对同一远端存储节点存在多个数据访问任务,并且该多个数据访问任务中存在可合并数据访问任务,则数据访问模块645可以将与同一远端存储节点对应的多个可合并数据访问任务打包为同一RPC消息。通过将多个可合并数据访问打包为同一RPC消息,而不是各自生成一个RPC消息,由此实现RPC聚合,从而使得对于每个需要访问的远端存储节点只存在一次RPC交互,由此进一步减少RPC代价。
在一些实施例中,可合并数据访问任务可以包括下述数据访问任务中的至少一种:针对同一远端存储节点的不同数据分区的多个具有相同数据访问类型的数据访问任务;和与同一SQL算子对应的针对同一远端存储节点的多个具有不同数据访问类型的数据访问任务。
下面采用具体示例来说明上述可合并数据访问任务。图10A和图10B分别示出了第一SQL执行计划的示例示意图。
针对图10A中的SQL语句,SQL优化器生成图10A示出的第一SQL执行计划。针对该第一SQL执行计划,本地DAS层为远端数据分区p0-p3分别生成DAS任务类型为TABLE SCAN的DAS任务,假设远端数据分区p0和p2位于同一远端存储节点上,远端数据分区p1和p3位于同一远端存储节点上,则针对远端数据分区p0和p2的两个DAS任务为可合并DAS任务,以及针对远端数据分区p1和p3的两个DAS任务为可合并DAS任务。相应地,DAS层可以将针对远端数据分区p0和p2的两个DAS任务打包到同一RPC消息中,以及将针对远端数据分区p1和p3的两个DAS任务打包到同一RPC消息中。
针对图10B中的SQL语句SQL优化器生成图10B示出的第一SQL执行计划。针对该第一SQL执行计划中的DISTRIBUTED MERGE算子(0号算子),DAS层会为每个远端数据分区生成3种DAS类型任务:INSERT、UPDATE、DELETE。与0号算子对应的所有DAS任务中,与同一SQL算子对应的用于访问同一远端存储节点的各个远端数据分区的所有3类DAS任务都属于可合并DAS任务。相应地,DAS层会将该可合并DAS任务打包到同一RPC消息中。
图11示出了根据本说明书的实施例的DAS数据访问过程的示例示意图。图11中示出的是TABLE SCAN算子所对应的DAS数据访问过程。TABLE SCAN算子所对应的DAS任务也可以称为TABLE SCAN OP。TABLE SCAN OP由对应的TABLE SCAN算子进行实例化并驱动来进行数据访问。
如图11所示,TABLE SCAN OP可以分为TABLE SCAN Open、TABLE SCAN get_next_row以及TABLE SCAN Close三个阶段。
在TABLE SCAN Open阶段,开启一个DAS TASK任务并下发到对应的存储节点上远程执行,同时建立本地存储节点(本地DAS层)与远端存储节点(远端DAS层)之间的数据传输通道。
在TABLE SCAN get_next_row阶段,在远端DAS层获取到对应的数据访问结果后,以RPC消息的形式将所获取的数据访问结果通过所建立的数据传输通道传输到本地存储节点的SQL引擎中的本地DAS层。
在TABLE SCAN Close阶段,释放本次DAS TASK任务执行所涉及的各种资源(处理资源和存储资源),并关闭本次TABLE SCAN过程的事务上下文资源。
利用上述实施例的SQL查询方案,通过在SQL引擎中引入DAS层,并且在本地SQL执行器执行SQL执行计划时,响应于本地SQL执行器执行用于访问存储节点上的存储数据的SQL算子,经由SQL引擎的DAS层使用SQL算子所对应的数据访问参数向对应的存储节点发起基于数据分区的多分区数据访问,以获取对应的数据访问结果,所获取的数据访问结果被返回给本地SQL执行器,从而无需将与用于访问存储节点上的存储数据的SQL算子无关的其它SQL算子及其执行操作相关的配置信息打包在RPC消息中发送给远端存储节点,由此降低本地存储节点与远端存储节点之间的消息传输代价,进而提升SQL查询效率。
此外,利用上述SQL查询方案,通过在基于所接收的数据访问参数生成一个或多个数据访问任务之后,将同一SQL算子所对应的多个可合并数据访问任务打包为同一RPC消息,从而进一步减少本地存储节点与远端存储节点之间传送的RPC消息数量,由此进一步降低本地存储节点与远端存储节点之间的消息传输代价。
此外,在上述SQL查询方案中,SQL算子的执行都在本地存储节点的SQL执行器中串行执行,从而不需要在本地存储节点(SQL引擎)中启用额外的调度线程来调度远程存储节点上的SQL引擎执行对应的DFO计划,从而可以节约更多的本地CPU资源来用于SQL语句执行,由此提供更大的SQL查询处理能力。
图12示出了根据本说明书的另一实施例的SQL引擎1200的示例方框图。如图12所示,SQL引擎1200包括SQL语句接收接口1210、SQL优化器1220、代价确定器1230、执行计划选择器1240、SQL执行器1250、DAS层1260、执行计划拆分器1270和并行执行调度器1280。
SQL语句接收接口1210被配置为接收SQL语句。SQL优化器1220被配置为根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划和基于并行调度策略的第二SQL执行计划。
代价确定器1230被配置为确定第一SQL执行计划和第二SQL执行计划在当前数据规模下的执行代价。执行计划选择器1240被配置为基于SQL执行计划的执行代价,选择待执行的目标SQL执行计划,即,选择执行第一SQL执行计划还是执行第二SQL执行计划。响应于执行计划选择器1240选择执行第一SQL执行计划,SQL执行器1250根据串行调度策略执行第一SQL执行计划,以实现SQL查询操作。同样,在执行第一SQL执行计划,SQL引擎可以启用单个线程来顺序执行第一SQL执行计划中的各个SQL算子。在SQL执行器1250执行第一SQL执行计划时,响应于SQL执行器1250执行需要访问存储节点上的存储数据的SQL算子,DAS层1260使用SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问,以获取对应的数据访问结果。所述数据访问结果用于通知当前SQL算子执行完成或者用于供后续SQL算子执行时使用。DAS层1260的操作和结构可以参考上面参照图6、图7以及图9描述的DAS层640的操作和结构。
响应于执行计划选择器1240选择执行第二SQL执行计划,执行计划拆分器1270将第二SQL执行计划拆分为多个DFO。随后,并行执行调度器1280并行调度执行该多个DFO。如果存在本地DFO,则SQL执行器1250执行该本地DFO。第二SQL执行计划的并行调度策略可以参考参照图3描述的SQL执行计划执行方案。在执行第二SQL执行计划时,SQL引擎启用多个线程来分别调度执行对应的DFO。
图13示出了根据本说明书的另一实施例的分布式数据库的SQL查询过程1300的示例流程图。
如图13所示,在1310,经由SQL语句接收接口接收SQL语句。
在1320,经由SQL优化器根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划以及基于并行调度策略的第二SQL执行计划。
在1330,经由代价确定器确定第一SQL执行计划和第二SQL执行计划在当前数据规模下的执行代价。
在1340,经由执行计划选择器根据所确定出的执行代价选择执行第一SQL执行计划还是执行第二SQL执行计划。
响应于选择执行第一SQL执行计划,在1350,经由SQL执行器根据串行调度策略执行第一SQL执行计划,以实现SQL查询操作。SQL执行器可以采用如图7中的730-770以及图9描述的计划执行方式来执行第一SQL执行计划。
响应于选择执行第二SQL执行计划,在1360,经由SQL执行器根据并行调度策略执行第二SQL执行计划,以实现SQL查询操作。SQL执行器可以采用如图3中的330-370的并行调度策略来执行第二SQL执行计划。
图14示出了根据本说明书的另一实施例的SQL引擎1400的示例方框图。如图14所示,SQL引擎1400包括SQL语句接收接口1410、SQL优化器1420、SQL执行器1430、DAS层1440、执行计划拆分器1450和并行执行调度器1460。
SQL语句接收接口1410被配置为接收SQL语句。SQL优化器1420被配置为根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划或者基于并行调度策略的第二SQL执行计划。具体地,响应于未满足预定规则,SQL优化器1420根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划。响应于满足预定规则,SQL优化器1420根据所接收的SQL语句生成基于并行调度策略的第二SQL执行计划。
在一些实施例中,预定规则可以包括下述规则中的一种:SQL语句中是否包含指定参数,是否接收到指定参数等等。所述指定参数例如可以包括但不限于并行参数。例如,可以通过在SQL语句中设置并行参数作为预定规则来确定生成第一SQL执行计划还是第二SQL执行计划。比如,可以判断所接收的SQL语句中是否包含并行参数值(hint parallel(N))来确定生成第一SQL执行计划还是第二SQL执行计划。如果SQL语句中包含并行参数值,则指示SQL优化器生成第二SQL执行计划。如果SQL语句中未包含并行参数值,则指示SQL优化器生成第一SQL执行计划。
响应于SQL优化器1420生成第一SQL执行计划,SQL执行器1430根据串行调度策略执行第一SQL执行计划,以实现SQL查询操作。在SQL执行器1430执行第一SQL执行计划时,响应于SQL执行器1430执行需要访问存储节点上的存储数据的SQL算子,DAS层1440使用SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问,以获取对应的数据访问结果。DAS层1440的操作和结构可以参考上面参照图6、图7以及图9描述的DAS层640的操作和结构。
响应于生成第二SQL执行计划,执行计划拆分器1450将第二SQL执行计划拆分为多个SQL执行子计划。然后,并行执行调度器1460并行调度多个SQL执行子计划来在各个对应SQL引擎的SQL执行器处执行。第二SQL执行计划的并行调度策略可以参考参照图3描述的SQL执行计划执行方案。
图15示出了根据本说明书的另一实施例的分布式数据库的SQL查询过程1500的示例流程图。
如图15所示,在1510,经由SQL语句接收接口接收SQL语句。
在1520,判断是否满足预定规则。例如,可以通过判断SQL语句中是否包含指定参数来判断是否预定规则。如果包含指定参数,则满足预定规则。如果不包含指定参数,则不满足预定规则。或者,可以通过判断是否接收到指定参数来判断是否满意预定规则。如果接收到指定参数,则满足预定规则。如果未接收到指定参数,则不满足预定规则。
在1530,响应于不满足预定规则,经由SQL优化器根据SQL语句生成第一SQL执行计划。在1540,经由SQL执行器根据串行调度策略执行第一SQL执行计划,以实现SQL查询操作。SQL执行器可以采用如图7中的730-770以及图9描述的计划执行方式来执行第一SQL执行计划。
在1550,响应于满足预定规则,经由SQL优化器根据SQL语句生成第二SQL执行计划。在1560,经由SQL执行器根据并行调度策略执行第二SQL执行计划,以实现SQL查询操作。SQL执行器可以采用如图3中的330-370的计划执行方式来执行第二SQL执行计划。
如上参照图1到图15,对根据本说明书实施例的用于分布式数据库的SQL查询引擎和SQL查询方法进行了描述。上面的SQL引擎可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。
图16示出了根据本说明书的实施例的基于计算机系统实现的SQL引擎1600的示意图。如图16所示,SQL引擎1600可以包括至少一个处理器1610、存储器(例如,非易失性存储器)1620、内存1630和通信接口1640,并且至少一个处理器1610、存储器1620、内存1630和通信接口1640经由总线1660连接在一起。至少一个处理器1610执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1610:接收SQL语句;根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划;根据串行调度策略执行第一SQL执行计划,其中,响应于执行需要访问存储节点上的存储数据的SQL算子,使用SQL算子所对应的数据访问参数向对应的存储节点发起基于数据分区的多分区数据访问来获取对应的数据访问结果,所述数据访问结果用于通知当前SQL算子执行完成或者用于供后续SQL算子执行时使用。
应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器1610进行本说明书的各个实施例中以上结合图1-图15描述的各种操作和功能。
根据一个实施例,提供了一种比如机器可读介质(例如,非暂时性机器可读介质)的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-图15描述的各种操作和功能。具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
根据一个实施例,提供一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序当被处理器执行时,使得处理器执行本说明书的各个实施例中以上结合图1-图15描述的各种操作和功能。
本领域技术人员应当理解,上面公开的各个实施例可以在不偏离发明实质的情况下做出各种变形和修改。因此,本发明的保护范围应当由所附的权利要求书来限定。
需要说明的是,上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
以上各实施例中,硬件单元或模块可以通过机械方式或电气方式实现。例如,一个硬件单元、模块或处理器可以包括永久性专用的电路或逻辑(如专门的处理器,FPGA或ASIC)来完成相应操作。硬件单元或处理器还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。
上面结合附图阐述的具体实施方式描述了示例性实施例,但并不表示可以实现的或者落入权利要求书的保护范围的所有实施例。在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
本公开内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本公开内容。对于本领域普通技术人员来说,对本公开内容进行的各种修改是显而易见的,并且,也可以在不脱离本公开内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本公开内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。
Claims (21)
1.一种分布式数据库的SQL查询方法,所述分布式数据库包括多个分布式数据存储节点,每个分布式数据存储节点包括SQL引擎和存储引擎,所述SQL查询方法由SQL引擎执行,所述SQL查询方法包括:
接收SQL语句;
根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划;
根据串行调度策略执行所述第一SQL执行计划,
其中,在执行所述第一SQL执行计划时,响应于执行需要访问存储节点上的存储数据的SQL算子,使用所述SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问来获取对应的数据访问结果,所述数据访问结果用于通知当前SQL算子执行完成或者用于供后续SQL算子执行时使用。
2.如权利要求1所述的方法,其中,所述SQL引擎包括数据访问服务层,使用所述SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问包括:
经由所述数据访问服务层使用所述SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问。
3.如权利要求2所述的方法,其中,经由所述数据访问服务层使用所述SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问包括:
响应于SQL引擎中的SQL执行器执行需要访问存储节点上的存储数据的SQL算子,接收来自所述SQL执行器的数据访问请求,所述数据访问请求包括SQL算子所对应的数据访问参数;
基于所接收的数据访问参数生成与所述SQL算子对应的一个或多个数据访问任务,每个数据访问任务对应存储节点中的存储引擎上的一个数据分区;
将所生成的数据访问任务打包为本地消息和/或RPC消息并基于所述本地消息和/或所述RPC消息发起针对各个对应存储引擎的数据访问;以及
接收各个对应的存储引擎返回的数据访问结果并返回给所述SQL执行器。
4.如权利要求3所述的方法,其中,经由所述数据访问服务层使用所述SQL算子所对应的数据访问参数向对应存储节点发起基于数据分区的多分区数据访问还包括:
在所述数据访问服务层与各个待访问远端存储节点的SQL引擎中的数据访问服务层之间建立数据传输通道,
其中,所述RPC消息经由所述数据传输通道传输给对应远端存储节点的SQL引擎的数据传输服务层,以及所述数据访问结果经由所述数据传输通道返回给本地存储节点的数据访问服务层。
5.如权利要求1或3所述的方法,其中,所述数据访问参数包括:数据表ID、数据分区ID列表、数据列ID列表以及与所述SQL算子对应的目标操作数据信息。
6.如权利要求5所述的方法,其中,所述目标操作数据信息包括下述目标操作数据信息中的至少一个:数据扫描范围和目标数据行。
7.如权利要求3所述的方法,其中,与同一远端存储节点对应的多个可合并数据访问任务被打包为同一RPC消息。
8.如权利要求7所述的方法,其中,所述可合并数据访问任务包括下述数据访问任务中的至少一种:
针对同一远端存储节点的不同数据分区的多个具有相同数据访问类型的数据访问任务;和
与同一SQL算子对应的针对同一远端存储节点的多个具有不同数据访问类型的数据访问任务。
9.如权利要求1所述的方法,其中,根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划包括:
根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划以及基于并行调度策略的第二SQL执行计划,
所述方法还包括:
确定所述第一SQL执行计划和所述第二SQL执行计划在当前数据规模下的执行代价;
基于所确定出的执行代价,选择执行所述第一SQL执行计划或所述第二SQL执行计划,
其中,根据串行调度策略执行所述第一SQL执行计划包括:
响应于选择执行所述第一SQL执行计划,根据串行调度策略执行所述第一SQL执行计划,以及
响应于选择执行所述第二SQL执行计划,根据并行调度策略执行所述第二SQL执行计划。
10.如权利要求1所述的方法,其中,根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划包括:
响应于未满足预定规则,根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划,或者
响应于满足预定规则,根据所接收的SQL语句生成基于并行调度策略的第二SQL执行计划,
根据串行调度策略执行所述第一SQL执行计划包括:
响应于生成所述第一SQL执行计划,根据串行调度策略执行所述第一SQL执行计划,或者
响应于生成所述第二SQL执行计划,根据并行调度策略执行所述第二SQL执行计划。
11.一种分布式数据库的SQL引擎,所述分布式数据库包括多个分布式数据存储节点,每个分布式数据存储节点包括SQL引擎和存储引擎,所述SQL引擎包括:
SQL语句接收接口,接收SQL语句;
SQL优化器,根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划;
SQL执行器,根据串行调度策略执行所述第一SQL执行计划,
其中,响应于执行需要访问存储节点上的存储数据的SQL算子,所述SQL执行器使用所述SQL算子所对应的数据访问参数向对应的存储节点发起基于数据分区的多分区数据访问来获取对应的数据访问结果,所述数据访问结果用于通知当前SQL算子执行完成或者用于供后续SQL算子执行时使用。
12.如权利要求11所述的SQL引擎,还包括:
数据访问服务层,使用从所述SQL执行器接收的与所述SQL算子对应的数据访问参数向对应的存储节点发起基于数据分区的多分区数据访问来获取对应的数据访问结果,并将所述数据访问结果返回给所述SQL执行器。
13.如权利要求12所述的SQL引擎,其中,所述数据访问服务层包括:
数据访问请求接收模块,响应于所述SQL执行器执行需要访问存储节点上的存储数据的SQL算子,从所述SQL执行器接收数据访问请求,所述数据访问请求包括所述SQL算子所对应的数据访问参数;
数据访问任务生成模块,基于所接收的数据访问参数生成与所述SQL算子对应的一个或多个数据访问任务,每个数据访问任务对应存储节点中的存储引擎上的一个数据分区;
数据访问模块,将所生成的数据访问任务打包为本地消息和/或RPC消息并基于所述本地消息和/或所述RPC消息发起针对各个对应存储引擎的数据访问;以及
数据传输模块,接收各个对应的存储引擎返回的数据访问结果并返回给所述SQL执行器。
14.如权利要求13所述的SQL引擎,其中,所述数据访问服务层还包括:
数据传输通道建立模块,在所述数据访问服务层与各个待访问远端存储节点的SQL引擎中的数据访问服务层之间建立数据传输通道,
其中,所述RPC消息经由所述数据传输通道传输给对应远端存储节点的SQL引擎的数据传输服务层,以及所述数据访问结果经由所述数据传输通道返回给本地存储节点的数据访问服务层。
15.如权利要求13所述的SQL引擎,其中,在基于所接收的数据访问参数生成一个或多个数据访问任务之后,所述数据访问模块将与同一远端存储节点对应的多个可合并数据访问任务打包为同一RPC消息。
16.如权利要求11所述的SQL引擎,其中,所述SQL优化器根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划以及基于并行调度策略的第二SQL执行计划,
所述SQL引擎还包括:
代价确定器,确定所述第一SQL执行计划和所述第二SQL执行计划在当前数据规模下的执行代价;
执行计划选择器,基于所确定出的执行代价,选择执行所述第一SQL执行计划或所述第二SQL执行计划;
执行计划拆分器,响应于选择执行所述第二SQL执行计划,将所述第二SQL执行计划拆分为多个SQL执行子计划;以及
并行执行调度器,并行调度所述多个SQL执行子计划来在各个对应SQL引擎的SQL执行器处执行,
其中,响应于所述执行计划选择器选择执行所述第一SQL执行,所述SQL执行器根据串行调度策略执行所述第一SQL执行计划,响应于所述执行计划选择器选择执行所述第二SQL执行计划,所述SQL执行器执行所述并行执行调度器所调度的本地SQL执行子计划。
17.如权利要求11所述的SQL引擎,其中,响应于未满足预定规则,所述SQL优化器根据所接收的SQL语句生成基于串行调度策略的第一SQL执行计划,或者响应于满足预定规则,所述SQL优化器根据所接收的SQL语句生成基于并行调度策略的第二SQL执行计划,
所述SQL引擎还包括:
执行计划拆分器,响应于生成所述第二SQL执行计划,将所述第二SQL执行计划拆分为多个SQL执行子计划;以及
并行执行调度器,并行调度所述多个SQL执行子计划来在各个对应SQL引擎的SQL执行器处执行,
其中,响应于生成所述第一SQL执行计划,所述SQL执行器根据串行调度策略执行所述第一SQL执行计划,响应于生成所述第二SQL执行计划,所述SQL执行器执行所述并行执行调度器所调度的本地SQL执行子计划。
18.一种分布式数据库,包括:
至少两个分布式存储节点,每个存储节点包括权利要求11到17中任一所述的SQL引擎和存储引擎。
19.一种用于分布式数据库的SQL引擎,包括:
至少一个处理器,
与所述至少一个处理器耦合的存储器,以及
存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如权利要求1到10中任一所述的SQL查询方法。
20.一种计算机可读存储介质,其存储有可执行指令,所述指令当被执行时使得处理器执行如权利要求1到10中任一所述的SQL查询方法。
21.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行来实现如权利要求1到10中任一所述的SQL查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111549555.8A CN113934763B (zh) | 2021-12-17 | 2021-12-17 | 分布式数据库的sql查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111549555.8A CN113934763B (zh) | 2021-12-17 | 2021-12-17 | 分布式数据库的sql查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113934763A true CN113934763A (zh) | 2022-01-14 |
CN113934763B CN113934763B (zh) | 2022-04-12 |
Family
ID=79289232
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111549555.8A Active CN113934763B (zh) | 2021-12-17 | 2021-12-17 | 分布式数据库的sql查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113934763B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114547208A (zh) * | 2022-04-21 | 2022-05-27 | 北京奥星贝斯科技有限公司 | 用于全链路追踪事务的方法及原生分布式数据库 |
CN114860739A (zh) * | 2022-07-07 | 2022-08-05 | 北京奥星贝斯科技有限公司 | 针对分布式数据库的查询方法及装置 |
CN114969111A (zh) * | 2022-08-01 | 2022-08-30 | 北京奥星贝斯科技有限公司 | 分布式数据库的逻辑子计划执行方法、装置及系统 |
CN115114328A (zh) * | 2022-08-29 | 2022-09-27 | 北京奥星贝斯科技有限公司 | 针对分布式数据库生成查询计划的方法及装置 |
CN115544173A (zh) * | 2022-11-29 | 2022-12-30 | 创意信息技术股份有限公司 | 可线性扩展的分布式数据库 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7984043B1 (en) * | 2007-07-24 | 2011-07-19 | Amazon Technologies, Inc. | System and method for distributed query processing using configuration-independent query plans |
CN105824957A (zh) * | 2016-03-30 | 2016-08-03 | 电子科技大学 | 分布式内存列式数据库的查询引擎系统及查询方法 |
US20170011090A1 (en) * | 2014-03-31 | 2017-01-12 | Hewlett Packard Enterprise Development Lp | Parallelizing sql on distributed file systems |
CN108536692A (zh) * | 2017-03-01 | 2018-09-14 | 华为技术有限公司 | 一种执行计划的生成方法、装置及数据库服务器 |
CN110489446A (zh) * | 2019-09-10 | 2019-11-22 | 北京东方国信科技股份有限公司 | 基于分布式数据库的查询方法及装置 |
CN111506602A (zh) * | 2020-04-20 | 2020-08-07 | 上海达梦数据库有限公司 | 数据查询方法、装置、设备和存储介质 |
CN112416969A (zh) * | 2020-11-12 | 2021-02-26 | 北京偶数科技有限公司 | 分布式数据库中的并行任务调度系统 |
CN113420041A (zh) * | 2020-07-27 | 2021-09-21 | 阿里巴巴集团控股有限公司 | 分布式数据库中的数据处理方法、装置、设备及介质 |
-
2021
- 2021-12-17 CN CN202111549555.8A patent/CN113934763B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7984043B1 (en) * | 2007-07-24 | 2011-07-19 | Amazon Technologies, Inc. | System and method for distributed query processing using configuration-independent query plans |
US20170011090A1 (en) * | 2014-03-31 | 2017-01-12 | Hewlett Packard Enterprise Development Lp | Parallelizing sql on distributed file systems |
CN105824957A (zh) * | 2016-03-30 | 2016-08-03 | 电子科技大学 | 分布式内存列式数据库的查询引擎系统及查询方法 |
CN108536692A (zh) * | 2017-03-01 | 2018-09-14 | 华为技术有限公司 | 一种执行计划的生成方法、装置及数据库服务器 |
CN110489446A (zh) * | 2019-09-10 | 2019-11-22 | 北京东方国信科技股份有限公司 | 基于分布式数据库的查询方法及装置 |
CN111506602A (zh) * | 2020-04-20 | 2020-08-07 | 上海达梦数据库有限公司 | 数据查询方法、装置、设备和存储介质 |
CN113420041A (zh) * | 2020-07-27 | 2021-09-21 | 阿里巴巴集团控股有限公司 | 分布式数据库中的数据处理方法、装置、设备及介质 |
CN112416969A (zh) * | 2020-11-12 | 2021-02-26 | 北京偶数科技有限公司 | 分布式数据库中的并行任务调度系统 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114547208A (zh) * | 2022-04-21 | 2022-05-27 | 北京奥星贝斯科技有限公司 | 用于全链路追踪事务的方法及原生分布式数据库 |
WO2023202497A1 (zh) * | 2022-04-21 | 2023-10-26 | 北京奥星贝斯科技有限公司 | 用于全链路追踪事务的方法及原生分布式数据库 |
CN114860739A (zh) * | 2022-07-07 | 2022-08-05 | 北京奥星贝斯科技有限公司 | 针对分布式数据库的查询方法及装置 |
CN114860739B (zh) * | 2022-07-07 | 2022-09-06 | 北京奥星贝斯科技有限公司 | 针对分布式数据库的查询方法及装置 |
CN114969111A (zh) * | 2022-08-01 | 2022-08-30 | 北京奥星贝斯科技有限公司 | 分布式数据库的逻辑子计划执行方法、装置及系统 |
CN115114328A (zh) * | 2022-08-29 | 2022-09-27 | 北京奥星贝斯科技有限公司 | 针对分布式数据库生成查询计划的方法及装置 |
CN115114328B (zh) * | 2022-08-29 | 2022-10-28 | 北京奥星贝斯科技有限公司 | 针对分布式数据库生成查询计划的方法及装置 |
CN115544173A (zh) * | 2022-11-29 | 2022-12-30 | 创意信息技术股份有限公司 | 可线性扩展的分布式数据库 |
CN115544173B (zh) * | 2022-11-29 | 2023-10-03 | 创意信息技术股份有限公司 | 可线性扩展的分布式数据库 |
Also Published As
Publication number | Publication date |
---|---|
CN113934763B (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113934763B (zh) | 分布式数据库的sql查询方法及装置 | |
US20220197953A1 (en) | Model pushing method and device, model requesting method and device, storage medium and electronic device | |
CN109639521B (zh) | 区块链性能的测试方法、装置、设备及存储介质 | |
US20200219028A1 (en) | Systems, methods, and media for distributing database queries across a metered virtual network | |
US10453165B1 (en) | Computer vision machine learning model execution service | |
CN114547208B (zh) | 用于全链路追踪事务的方法及原生分布式数据库 | |
CN113420033B (zh) | 分布式数据库的表数据查询方法、表数据查询装置及系统 | |
CN109740765A (zh) | 一种基于亚马逊网络服务器的机器学习系统搭建方法 | |
CN109086407A (zh) | 面向分布式内存数据库的多流水线调度方法 | |
CN110147273A (zh) | 一种任务执行方法及装置 | |
CN114661752A (zh) | 分布式数据库的计划调度方法、装置和系统 | |
CN112559525B (zh) | 数据检查系统、方法、装置和服务器 | |
CN113835705A (zh) | 大数据服务产品开发方法、装置及系统 | |
US11120513B2 (en) | Capital chain information traceability method, system, server and readable storage medium | |
CN117076096A (zh) | 任务流程的执行方法、装置、计算机可读介质及电子设备 | |
CN110609707B (zh) | 在线数据处理系统生成方法、装置及设备 | |
CN114969111B (zh) | 分布式数据库的逻辑子计划执行方法、装置及系统 | |
CN113495723B (zh) | 一种调用功能组件的方法、装置及存储介质 | |
CN114996299A (zh) | 分布式数据库的计划执行方法、装置和系统 | |
US9336063B1 (en) | Distributed task management | |
CN111209302A (zh) | 数据库访问的并行执行方法及装置 | |
CN117610325B (zh) | 基于分布式的优化设计节点调度方法、系统和设备 | |
US20230397039A1 (en) | Combining User and Operator Intents in Network Slice Design | |
US11734291B2 (en) | Parallel execution of API calls using local memory of distributed computing devices | |
CN114756378A (zh) | 单机系统改造方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |