CN114036182A - 一种数据查询方法、计算机设备和存储介质 - Google Patents
一种数据查询方法、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN114036182A CN114036182A CN202111356616.9A CN202111356616A CN114036182A CN 114036182 A CN114036182 A CN 114036182A CN 202111356616 A CN202111356616 A CN 202111356616A CN 114036182 A CN114036182 A CN 114036182A
- Authority
- CN
- China
- Prior art keywords
- operator
- data
- intermediate result
- result data
- coroutine
- 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/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/2455—Query execution
- G06F16/24552—Database cache management
-
- 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
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种数据查询方法、计算机设备和存储介质,包括:响应于SQL执行匹配的数据查询任务,查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间建立协程消息通道;通过叶节点算子计算得到中间结果数据,并缓存至与所依赖的父算子间的通道中;通过中间节点算子根据从与所依赖的子算子间的通道中获取的中间结果数据,计算得到新的中间结果数据,并缓存至与所依赖的父算子间的通道中;通过根节点算子根据从与所依赖的子算子间的通道中获取的中间结果数据,计算得到最终计算结果。无需接口方法调用及线程切换开销,算子可以主动生产数据而无需被动等待,提高了数据查询效率。
Description
技术领域
本发明实施例涉及数据处理技术领域,尤其涉及一种数据查询方法、计算机设备和存储介质。
背景技术
执行器是数据库组成中非常重要的一部分,它负责根据查询优化器生成的执行计划去调用存储引擎的接口来完成结构化查询语言(Structured Query Language,SQL)的执行。火山模型是最为经典的执行器模型,目前主流的关系型数据库中都采用了这种模型。
图1是现有技术提供的一种火山模型的结构示意图。如图1所示,在火山模型中,每一个算子都提供open、next和close三种方法接口,查询计划树由一个个算子组成。查询系统从根节点算子开始调用next接口,通过层层递归调用到达叶节点算子后,由叶节点算子从物理表中获取数据上推。每个算子都将中间节点算子的输出即当前算子的输入看作逻辑上的一张表,next接口的一次调用仅会返回表中的一行数。
火山模型中算子的逻辑定义简单清晰,并且算子间通过统一的接口进行交互,代数计算相互独立,因此耦合性低,易于查询优化器将各类算子组装成查询计划树。但是,对于每行数据的获取均需要调用一次next接口,在每个算子间的数据传输也需要调用一次next接口。数据在算子之间的流动性带来了很多冗余的控制操作命令。并且next调用属于虚函数的调用,编译器无法对虚函数进行inline(内联)优化,每一次虚函数的调用都需要查找虚函数表,这带来了更多的分支指令,共同导致CPU执行效率低下。
现有技术在火山模型的基础上提出了一种批处理模型。图2是现有技术提供的一种批处理模型的结构示意图。如图2所示,批处理模型同火山模型相似,每一个算子都提供next等接口,但是数据传递的量不再是单行而是若干行组成的集合即chunk。通常,chunk的容量为1024。虽然,批处理模型在一定程度上减少了对next接口的调用,提高了控制效率,提升了代码局部性。但是,批处理模型带来了函数调用开销与内存分配平衡之间的问题:chunk容量设置大时,函数调用开销变小,但是对应的内存分配开销变大,例如对于联机事务处理(On-Line Transaction Processing,OLTP),1024的容量明显是浪费。
此外,无论是现有技术的火山模型,还是批处理模型,都需要父节点算子从子节点算子拉取数据,子节点算子处于被动等待的状态,直至下一次父节点算子的next接口调用。并且,当实现完整的数据查询业务时,各算子执行线程之间需要不断地进行线程切换,致使数据查询效率低,CPU开销大。
发明内容
本发明实施例提供了一种数据查询方法、计算机设备和存储介质,无需接口方法调用及线程切换开销,可以主动生产数据,提高数据查询效率。
第一方面,本发明实施例提供了一种数据查询方法,该方法包括:
响应于目标结构化查询语言SQL,触发执行与目标SQL匹配的数据查询任务,其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道;
通过叶节点算子,计算得到中间结果数据,并将所述中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将所述新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
第二方面,本发明实施例还提供了一种计算机设备,包括处理器和存储器,所述存储器用于存储指令,当所述指令执行时使得所述处理器执行以下操作:
响应于目标结构化查询语言SQL,触发执行与目标SQL匹配的数据查询任务,其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道;
通过叶节点算子,计算得到中间结果数据,并将所述中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将所述新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
第三方面,本发明实施例还提供了一种存储介质,存储介质用于存储指令,所述指令用于执行:
响应于目标结构化查询语言SQL,触发执行与目标SQL匹配的数据查询任务,其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道;
通过叶节点算子,计算得到中间结果数据,并将所述中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将所述新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
本发明实施例的技术方案,通过响应于目标SQL,触发执行与目标SQL匹配的数据查询任务,其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道;通过叶节点算子,计算得到中间结果数据,并将中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与数据查询任务匹配的最终计算结果。解决了数据查询时需要多次调用接口导致的效率低下的问题,实现了通过叶节点算子驱动上层算子对数据进行使用,避免next接口调用造成的开销,减少了线程切换,降低CPU开销,从而提高了数据查询效率的效果。
附图说明
图1是现有技术提供的一种火山模型的结构示意图;
图2是现有技术提供的一种批处理模型的结构示意图;
图3a是本发明实施例一提供的一种数据查询方法的流程图;
图3b是本发明实施例一提供的一种数据查询任务结构示意图;
图3c是本发明实施例一提供的一种协程消息通道的示意图;
图4a是本发明实施例二提供的一种数据查询方法的流程图;
图4b是本发明实施例二提供的一种启动多核计算能力的结构示意图;
图4c是本发明实施例提供的一种抢占式调度模型的结构示意图;
图4d是本发明实施例二提供的一种通过控制系统控制数据查询任务的结构示意图;
图4e是本发明实施例二提供的一种协程重用机制的结构示意图;
图5是本发明实施例三提供的一种数据查询装置的结构示意图;
图6是本发明实施例四提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。
本文使用的术语“数据查询任务”可以是数据库组成中,通过执行器生成的执行计划,完成SQL语句执行的任务。
本文使用的术语“根节点算子”可以是数据查询任务的最上层算子;“叶节点算子”可以是数据查询任务的最下层算子;“中间节点算子”可以是数据查询任务中介于最上层算子和最下层算子之间的算子;“父子依赖关系”可以表示下层节点算子与其相连的上一层节点算子之间的关系,具体的,该下层节点算子输出的数据可以作为与其相连的上一层节点算子的输入。
本文使用的术语“协程消息通道”可以是一种用户态的轻量级线程,可以是将传统的线性依赖调用方式(如火山模型或者批处理模型)转变为基于消息的协程并发调用模型(Communicating Sequential Processes,CSP)。具体的,协程消息通道可以是通过Golang协程管道连接实现的,通过协程消息通道连接的算子之间可以以消息方式进行数据传递。Golang实现了基于消息传递的并发通信,称为Golang通道,即channel。其中,消息传递可以是线程之间的直接通信,不同的线程之间通过显式的发送消息来达到交互的目的。
实施例一
图3a是本发明实施例一提供的一种数据查询方法的流程图,本实施例可适用于基于SQL进行数据查询的情况,该方法可以由数据查询装置来执行,该装置可以通过软件,和/或硬件的方式实现,装置可以集成在计算机中,如图3a所示,该方法具体包括:
步骤110、响应于目标SQL,触发执行与目标SQL匹配的数据查询任务。
其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道。在本发明实施例中,数据查询任务可以具体理解为将将关系代数中每一种操作抽象为一个算子,将整个SQL构建成一个算子树,从叶节点算子到根节点算子自下而上的通过协程消息通道(channel)传递数据。
图3b是本发明实施例一提供的一种数据查询任务结构示意图。如图3b所示,数据查询任务中跟节点算子通过一个或多个中间节点算子调取叶节点算子的数据,确定最终的计算结果。其中,依次相连的算子之间可以认为存在父子依赖关系,具体的,上层算子可以作为相连的下层算子的父算子,下层算子可以作为相连的上层算子的子算子。存在父子依赖关系的两两算子间通过channel进行连接。
具体的,图3c是本发明实施例一提供的一种协程消息通道的示意图。如图3c所示,下层算子(如child算子)可以理解为数据的生产者(producer),上层算子(如parent算子)可以理解为数据的消费者(consumer);producer与consumer之间通过channel连接,producer和consumer各是一个协程。该协程可以是Golang在语言层面实现的,称为goroutine。
本发明实施例,通过goroutine和channel可以将上层的计算下推到生产数据的算子中,通过叶节点算子驱动上层算子对数据进行消费,无需next方法接口的调用,也无需对应的线程开销,取而代之的是协程基于channel的切换开销,Golang的协程切换开销在100纳秒左右,性能是线程切换的30倍,提高了CPU执行效率以及数据查询效率,更适合高并发分布式数据库执行场景。
步骤120、通过叶节点算子,计算得到中间结果数据,并将中间结果数据缓存至与所依赖的父算子之间的协程消息通道中。
其中,如图3c所示,叶节点算子可以主动根据SQL语言对应的查询任务计算得到中间结果数据,无需像现有技术中的火山模型一样等待上层算子的next接口调用后再计算生成中间结果数据。在go语言中,可以包括无缓冲和有缓冲两种通道,在本发明实施例中可以采用有缓冲,对中间结果数据进行缓存。有缓冲通道不强制要求goroutine之间必须同时完成发送和接收,当通道内含有缓存区时,缓存区为空时,接收动作才会阻塞;当缓存区为满时,发送动作才会阻塞。
步骤130、通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中。
在本发明实施例中,可以通过自下而上的由下层节点算子生产数据,推送至channel中,上层节点算子在需要数据时,直接在channel中获取数据,并进行计算,得到新的中间数据,继续向上推送,直至推送至根节点算子进行最终的计算。
步骤140、通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与数据查询任务匹配的最终计算结果。
本发明实施例的技术方案,通过响应于目标SQL,触发执行与目标SQL匹配的数据查询任务,其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道;通过叶节点算子,计算得到中间结果数据,并将中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与数据查询任务匹配的最终计算结果,解决了现有技术中通过火山模型进行数据查询时需要接口调用的问题,实现了无需接口方法调用及线程切换开销,算子可以主动生产数据而无需被动等待,提高了数据查询效率的效果。
实施例二
图4a是本发明实施例二提供的一种数据查询方法的流程图,本实施例中的实施方式可以是对上述实施例技术方案的细化,可以与上述一个或者多个实施方式进行结合,如图4a所示,该方法具体包括:
步骤210、响应于目标SQL,触发执行与目标SQL匹配的数据查询任务。
其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道。协程消息通道包括至少一个缓存区。
步骤220、通过叶节点算子,计算得到中间结果数据,并在确定缓存区存储未满时,将中间结果数据缓存至与所依赖的父算子之间协程消息通道的缓存区中。
其中,缓存区存储未满时,叶节点算子可以在协程消息通道的缓存区中存入数据,当缓存区满时,可以先暂停生产数据,等待上层节点算子消费数据后,再继续生产数据。
步骤230、通过中间节点算子,在确定缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据,并在确定缓存区存储未满时,将新的中间结果数据缓存至与所依赖的父算子之间协程消息通道的缓存区中。
其中,在中间节点算子与所依赖的子算子之间协程消息通道的缓存区存储非空时,上层节点可以在该缓存区获取数据进行计算;并在与所依赖的父算子之间协程消息通道的缓存区存储未满时,将计算的新的中间结果数据缓存至该缓存区。
在本发明实施例的一个可选实施方式中,在确定缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据,包括:在确定缓存区存储非空时,按照预设数据读取规则启动与中间节点算子相同的至少一个Golang协程,采用并行执行方式按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据;
其中,当查询的数据量大时,可以在算子中启动多个相同的consumer goroutine接收处理数据,从而充分利用多核计算能力。具体的,图4b是本发明实施例二提供的一种启动多核计算能力的结构示意图。如图4b所示,本发明实施例采用的协程是一种用户态线程,完全由程序控制,上下切换的开销极小,可以创建上百万个协程而不会导致系统资源的枯竭。因此,可以在查询的数据量大时,随意增加Golang协程goroutine。其中,对于同一算子而言,启动的协程可以是相同的,可以通过并行执行方式获取中间结果数据,进行计算。
步骤240、通过根节点算子,在确定缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到与数据查询任务匹配的最终计算结果。
在本发明实施例的一个可选实施方式中,在确定缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到与数据查询任务匹配的最终计算结果,包括:在确定缓存区存储非空时,按照预设数据读取规则启动与根节点算子相同的至少一个Golang协程,采用并行执行方式按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到与数据查询任务匹配的最终计算结果。
其中,通过启动与根节点算子相同的至少一个Golang协程,可以加速数据获取的速度,也不会造成系统负担。
在上述实施方式的基础上,可选的,通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,包括:当存在至少两个算子目的相同的中间节点算子时,通过数据获取执行速率更快的中间节点算子,根据从与所依赖的相同子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据。
其中,SQL是一种声明式语言,数据库可以根据用户写出的查询语句生成合理的执行方案。但在某些场景下,查询优化器无法准确判断使用哪种算子方案更高效。传统模型只能根据一些经验选择某一特定算法方案生成最终的查询计划树,并按照该树执行查询。
而在本发明实施例中,可以基于协程消息通道通过抢占式调度模型判断哪一算子的执行效率更高。图4c是本发明实施例提供的一种抢占式调度模型的结构示意图。如图4c所示,filter算子和join算子目的相同,同时向下层算子scan算子获取数据时,由于filter算子的执行速率更快,可以先获得下游数据,而join算子无法获取数据,可以使数据查询任务采用执行效率更快的算子进行任务执行,节省数据查询时间。
在上述实施方式的基础上,可选的,通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与数据查询任务匹配的最终计算结果,包括:当存在至少两个算子目的相同的根节点算子时,通过数据获取执行速率更快的根节点算子,根据从与所依赖的相同子算子之间的协程消息通道中获取的中间结果数据,计算得到与数据查询任务匹配的最终计算结果。
在上述实施方式的基础上,可选的,该方法,还包括:获取与数据查询任务匹配的控制系统的控制信号,其中,控制系统与数据查询任务间预先建立协程消息通道;根据控制信号,触发数据查询任务的叶节点算子停止计算得到中间结果数据,以停止数据查询任务。
其中,图4d是本发明实施例二提供的一种通过控制系统控制数据查询任务的结构示意图。如图4d所示,数据查询任务与控制系统之间也可以建立系统级的channel,使所有的算子被统一监听在系统级channel,实时响应,汇报自身情况,易于进行统一管理。具体的,可以通过控制系统直接控制数据查询任务的叶子节点算子,以控制数据查询任务,简化了数据查询任务的控制流程。
在本发明实施例中,控制信号,包括:内存控制信号、处理器控制信号以及进程关闭信号。具体的,内存控制信号(memory controller)可以根据实际内存的情况,决定是否暂停某一数据查询任务。例如,当内存资源紧张时,可以通过内存控制信号控制SQL任务1的叶节点算子停止数据查询任务。处理器控制信号(CPU controller)可以根据实际CPU执行情况的负载,决定是否暂停某一数据查询任务。例如,当处理器资源紧张时,可以通过处理器控制信号控制SQL任务2的叶节点算子停止数据查询任务。进程关闭信号(kill signal)可以根据数据查询业务的具体情况,决定是否停止数据查询任务。例如,当想关闭SQL任务3时,可以直接通过进程关闭信号停止该数据查询任务。
在上述实施方式的基础上,可选的,该方法,还包括:将与目标SQL匹配的数据查询任务中包括的根节点算子、叶节点算子和中间节点算子,以及具有父子依赖关系的两两算子间的协程消息通道,存储至对象池中。
其中,在本发明实施例中,可以对数据查询任务进行存储,如存储在对象池(sync.Pool)中,可以通过协程重用机制,在对象池中存放已经分配单暂时不同的对象,在需要时再从对象池中提取,可以减少垃圾回收的开销。具体的,通过对象池存储数据查询任务的根节点算子、叶节点算子和中间节点算子,以及具有父子依赖关系的两两算子间的协程消息通道,存储至对象池,可以实现基于协程的执行器在任务内或者跨任务进行协程的重用,进一步降低整体协程通信的开销。
具体的,图4e是本发明实施例二提供的一种协程重用机制的结构示意图。如图4e所示,SQL任务1可以存储在对象池中,当SQL任务4进行任务执行时,SQL任务4需要使用与SQL任务1中相同的中间节点算子1,可以无需重新对中间节点算子1进行创建,可以直接重用SQL任务1的中间节点算子1,从而可以实现基于协程的执行器在任务内或者跨任务进行协程的重用,进一步降低整体协程通信的开销。
本发明实施例的技术方案,通过响应于目标SQL,触发执行与目标SQL匹配的数据查询任务;通过叶节点算子,计算得到中间结果数据,并在确定缓存区存储未满时,将中间结果数据缓存至与所依赖的父算子之间协程消息通道的缓存区中;通过中间节点算子,在确定缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据,并在确定缓存区存储未满时,将新的中间结果数据缓存至与所依赖的父算子之间协程消息通道的缓存区中;通过根节点算子,在确定缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到与数据查询任务匹配的最终计算结果,解决了现有技术中通过火山模型进行数据查询时需要接口调用的问题,实现了无需接口方法调用及线程切换开销,算子可以主动生产数据而无需被动等待,提高了数据查询效率的效果。
实施例三
图5是本发明实施例三提供的一种数据查询装置的结构示意图。结合图5,该装置包括:数据查询任务触发执行模块310,中间结果数据缓存模块320,新的中间结果数据缓存模块330和最终计算结果计算模块340。其中:
数据查询任务触发执行模块310,用于响应于目标SQL,触发执行与目标SQL匹配的数据查询任务,其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道;
中间结果数据缓存模块320,用于通过叶节点算子,计算得到中间结果数据,并将中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
新的中间结果数据缓存模块330,用于通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
最终计算结果计算模块340,用于通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与数据查询任务匹配的最终计算结果。
可选的,协程消息通道包括至少一个缓存区;
中间结果数据缓存模块320,包括:
中间结果数据缓存单元,用于在确定缓存区存储未满时,将中间结果数据按照预设缓存规则缓存至所依赖的父算子之间协程消息通道的缓存区中。
新的中间结果数据缓存模块330,包括:
新的中间结果数据缓存单元,用于在确定缓存区存储未满时,将新的中间结果数据按照预设缓存规则缓存至所依赖的父算子之间协程消息通道的缓存区中。
可选的,新的中间结果数据缓存模块330,包括:
新的中间结果数计算单元,用于在确定缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据;
最终计算结果计算模块340,包括:
最终计算结果计算单元,用于在确定缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到与数据查询任务匹配的最终计算结果。
可选的,新的中间结果数计算单元,具体用于:
在确定缓存区存储非空时,按照预设数据读取规则启动与中间节点算子相同的至少一个Golang协程,采用并行执行方式按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据;
可选的,最终计算结果计算单元,具体用于:
在确定缓存区存储非空时,按照预设数据读取规则启动与根节点算子相同的至少一个Golang协程,采用并行执行方式按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到与数据查询任务匹配的最终计算结果。
可选的,新的中间结果数据缓存模块330,包括:
又一新的中间结果数据计算单元,用于当存在至少两个算子目的相同的中间节点算子时,通过数据获取执行速率更快的中间节点算子,根据从与所依赖的相同子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据;
最终计算结果计算模块340,包括:
又一最终计算结果计算单元,用于当存在至少两个算子目的相同的根节点算子时,通过数据获取执行速率更快的根节点算子,根据从与所依赖的相同子算子之间的协程消息通道中获取的中间结果数据,计算得到与数据查询任务匹配的最终计算结果。
可选的,该装置,还包括:
控制信号获取模块,用于获取与数据查询任务匹配的控制系统的控制信号,其中,控制系统与数据查询任务间预先建立协程消息通道;
数据查询任务停止模块,用于根据控制信号,触发数据查询任务的叶节点算子停止计算得到中间结果数据,以停止数据查询任务。
可选的,控制信号,包括:内存控制信号、处理器控制信号以及进程关闭信号。
可选的,该装置,还包括:
任务存储模块,用于将与目标SQL匹配的数据查询任务中包括的根节点算子、叶节点算子和中间节点算子,以及具有父子依赖关系的两两算子间的协程消息通道,存储至对象池中。
本发明实施例所提供的数据查询装置可执行本发明任意实施例所提供的数据查询方法,具备执行方法相应的功能模块和有益效果。
实施例四
图6是本发明实施例四提供的一种计算机设备的结构示意图,如图6所示,该设备包括:
一个或多个处理器610,图6中以一个处理器610为例;
存储器620;
设备还可以包括:输入装置630和输出装置640。
设备中的处理器610、存储器620、输入装置630和输出装置640可以通过总线或者其他方式连接,图6中以通过总线连接为例。
存储器620作为一种非暂态计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的一种数据查询方法对应的程序指令/模块(例如,附图5所示的数据查询任务触发执行模块310,中间结果数据缓存模块320,新的中间结果数据缓存模块330和最终计算结果计算模块340)。处理器610通过运行存储在存储器620中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述方法实施例的一种数据查询方法,即:
响应于目标结构化查询语言SQL,触发执行与目标SQL匹配的数据查询任务,其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道;
通过叶节点算子,计算得到中间结果数据,并将所述中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将所述新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
存储器620可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器620可以包括高速随机存取存储器,还可以包括非暂态性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态性固态存储器件。在一些实施例中,存储器620可选包括相对于处理器610远程设置的存储器,这些远程存储器可以通过网络连接至终端设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置630可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置640可包括显示屏等显示设备。
实施例五
本发明实施例五提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例提供的一种数据查询方法,即:
响应于目标结构化查询语言SQL,触发执行与目标SQL匹配的数据查询任务,其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道;
通过叶节点算子,计算得到中间结果数据,并将所述中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将所述新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (15)
1.一种数据查询方法,其特征在于,包括:
响应于目标结构化查询语言SQL,触发执行与目标SQL匹配的数据查询任务,其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道;
通过叶节点算子,计算得到中间结果数据,并将所述中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将所述新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
2.根据权利要求1所述的方法,其特征在于,所述协程消息通道包括至少一个缓存区;
将所述中间结果数据缓存至与所依赖的父算子之间的协程消息通道中,或者,将所述新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中,包括:
在确定所述缓存区存储未满时,将所述中间结果数据或者所述新的中间结果数据按照预设缓存规则缓存至所依赖的父算子之间协程消息通道的缓存区中;
根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,或者,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果,包括:
在确定所述缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据或者与所述数据查询任务匹配的最终计算结果。
3.根据权利要求2所述的方法,其特征在于,在确定所述缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据或者与所述数据查询任务匹配的最终计算结果,包括:
在确定所述缓存区存储非空时,按照预设数据读取规则启动与中间节点算子相同的至少一个Golang协程,采用并行执行方式按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据;或者,
在确定所述缓存区存储非空时,按照预设数据读取规则启动与根节点算子相同的至少一个Golang协程,采用并行执行方式按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
4.根据权利要求1所述的方法,其特征在于,通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,包括:
当存在至少两个算子目的相同的中间节点算子时,通过数据获取执行速率更快的中间节点算子,根据从与所依赖的相同子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据;
通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果,包括:
当存在至少两个算子目的相同的根节点算子时,通过数据获取执行速率更快的根节点算子,根据从与所依赖的相同子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
5.根据权利要求1所述的方法,其特征在于,还包括:
获取与所述数据查询任务匹配的控制系统的控制信号,其中,所述控制系统与所述数据查询任务间预先建立协程消息通道;
根据所述控制信号,触发所述数据查询任务的叶节点算子停止计算得到中间结果数据,以停止所述数据查询任务。
6.根据权利要求5所述的方法,其特征在于,所述控制信号,包括:内存控制信号、处理器控制信号以及进程关闭信号。
7.根据权利要求1所述的方法,其特征在于,还包括:
将与目标SQL匹配的数据查询任务中包括的根节点算子、叶节点算子和中间节点算子,以及具有父子依赖关系的两两算子间的协程消息通道,存储至对象池中。
8.一种计算机设备,包括处理器和存储器,所述存储器用于存储指令,当所述指令执行时使得所述处理器执行以下操作:
响应于目标结构化查询语言SQL,触发执行与目标SQL匹配的数据查询任务,其中,数据查询任务中包括根节点算子,叶节点算子和中间节点算子,具有父子依赖关系的两两算子间预先建立协程消息通道;
通过叶节点算子,计算得到中间结果数据,并将所述中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过中间节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据,并将所述新的中间结果数据缓存至与所依赖的父算子之间的协程消息通道中;
通过根节点算子,根据从与所依赖的子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
9.根据权利要求8所述的计算机设备,其特征在于,所述协程消息通道包括至少一个缓存区;所述处理器是设置为通过以下方式缓存中间结果数据:
在确定所述缓存区存储未满时,将所述中间结果数据或者所述新的中间结果数据按照预设缓存规则缓存至所依赖的父算子之间协程消息通道的缓存区中;
所述处理器是设置为通过以下方式计算得到新的中间结果数据或者与所述数据查询任务匹配的最终计算结果:
在确定所述缓存区存储非空时,按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据或者与所述数据查询任务匹配的最终计算结果。
10.根据权利要求9所述的计算机设备,其特征在于,所述处理器是设置为通过以下方式计算得到新的中间结果数据或者与所述数据查询任务匹配的最终计算结果:
在确定所述缓存区存储非空时,按照预设数据读取规则启动与中间节点算子相同的至少一个Golang协程,采用并行执行方式按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到新的中间结果数据;或者,
在确定所述缓存区存储非空时,按照预设数据读取规则启动与根节点算子相同的至少一个Golang协程,采用并行执行方式按照预设数据读取规则从与所依赖的子算子之间协程消息通道的缓存区中获取中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
11.根据权利要求8所述的计算机设备,其特征在于,所述处理器是设置为通过以下方式计算得到新的中间结果数据:
当存在至少两个算子目的相同的中间节点算子时,通过数据获取执行速率更快的中间节点算子,根据从与所依赖的相同子算子之间的协程消息通道中获取的中间结果数据,计算得到新的中间结果数据;
所述处理器是设置为通过以下方式计算得到与所述数据查询任务匹配的最终计算结果:
当存在至少两个算子目的相同的根节点算子时,通过数据获取执行速率更快的根节点算子,根据从与所依赖的相同子算子之间的协程消息通道中获取的中间结果数据,计算得到与所述数据查询任务匹配的最终计算结果。
12.根据权利要求8所述的计算机设备,其特征在于,所述处理器是设置为通过以下方式停止所述数据查询任务:
获取与所述数据查询任务匹配的控制系统的控制信号,其中,所述控制系统与所述数据查询任务间预先建立协程消息通道;
根据所述控制信号,触发所述数据查询任务的叶节点算子停止计算得到中间结果数据,以停止所述数据查询任务。
13.根据权利要求12所述的计算机设备,其特征在于,所述控制信号,包括:内存控制信号、处理器控制信号以及进程关闭信号。
14.根据权利要求8所述的计算机设备,其特征在于,所述处理器是设置为通过以下方式存储数据查询任务:
将与目标SQL匹配的数据查询任务中包括的根节点算子、叶节点算子和中间节点算子,以及具有父子依赖关系的两两算子间的协程消息通道,存储至对象池中。
15.一种存储介质,所述存储介质用于存储指令,所述指令用于执行如权利要求1-7中任一所述的数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111356616.9A CN114036182A (zh) | 2021-11-16 | 2021-11-16 | 一种数据查询方法、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111356616.9A CN114036182A (zh) | 2021-11-16 | 2021-11-16 | 一种数据查询方法、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114036182A true CN114036182A (zh) | 2022-02-11 |
Family
ID=80144584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111356616.9A Pending CN114036182A (zh) | 2021-11-16 | 2021-11-16 | 一种数据查询方法、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114036182A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116302513A (zh) * | 2023-02-28 | 2023-06-23 | 易方达基金管理有限公司 | 量化因子的处理方法、装置、计算机设备和可读存储介质 |
-
2021
- 2021-11-16 CN CN202111356616.9A patent/CN114036182A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116302513A (zh) * | 2023-02-28 | 2023-06-23 | 易方达基金管理有限公司 | 量化因子的处理方法、装置、计算机设备和可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11036547B2 (en) | File operation task optimization | |
KR101621137B1 (ko) | 아파치 하둡을 위한 로우 레이턴시 쿼리 엔진 | |
CN105824957B (zh) | 分布式内存列式数据库的查询引擎系统及查询方法 | |
CN103631870B (zh) | 一种用于大规模分布式数据处理的系统及其方法 | |
Ishii et al. | Elastic stream computing with clouds | |
US9183175B2 (en) | Memory management in a streaming application | |
US10733019B2 (en) | Apparatus and method for data processing | |
CN111061788B (zh) | 一种基于云架构的多源异构数据转换整合系统及其实现方法 | |
US10733184B2 (en) | Query planning and execution with source and sink operators | |
US10372707B2 (en) | Query execution pipelining with pump operators | |
US8046373B2 (en) | Structured parallel data intensive computing | |
US8849888B2 (en) | Candidate set solver with user advice | |
CN105183470B (zh) | 一种自然语言处理系统化服务平台 | |
US11363093B2 (en) | Multi-stage pipelining for distributed graph processing | |
CN109063017A (zh) | 一种云计算平台的数据持久化分布方法 | |
CN105138679A (zh) | 一种基于分布式缓存的数据处理系统及处理方法 | |
CN104683472A (zh) | 一种支持大数据量的数据传输方法 | |
US8407713B2 (en) | Infrastructure of data summarization including light programs and helper steps | |
CN114036182A (zh) | 一种数据查询方法、计算机设备和存储介质 | |
CN109491934A (zh) | 一种集成计算功能的存储管理系统控制方法 | |
CN115794262A (zh) | 任务处理方法、装置、设备、存储介质以及程序产品 | |
CN107798025B (zh) | 存储过程的运行、编译方法、装置和数据库系统 | |
US10891271B2 (en) | Optimized execution of queries involving early terminable database operators | |
CN104731800A (zh) | 数据分析装置 | |
US9325758B2 (en) | Runtime tuple attribute compression |
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 |