掌桥专利:专业的专利平台
掌桥专利
首页

基于多数据引擎动态装载的查询方法和系统

文献发布时间:2023-06-19 11:35:49


基于多数据引擎动态装载的查询方法和系统

技术领域

本发明涉及异构引擎集成技术领域,尤其涉及一种基于多数据引擎动态装载的查询方法和系统。

背景技术

随着大数据分析技术的蓬勃发展,数据量急剧膨胀,数据类型也复杂多样,传统的单一关系型数据库已经无法满足大数据存储和计算的需要。使用多引擎数据库兼容结构化、半结构化与非结构化数据存储与融合查询是一种有效的解决方案。

但是多种数据类型结构各异,各类数据引擎的调用与操作方式也是千差万别,对不固定维度、多维度查询,各数据库架构还需要一个融合的过程。

目前还没有一种通用的SQL和NoSQL数据库引擎的统一管理方案,在性能、扩展性、容错能力等方面遭遇到了不小的挑战,并且在现有模式下,维护数据库系统整体一致性和学习成本也很高。目前缺少一种方案,可以实现业务数据的统一管理和数据融合,应对多种数据存储模式需求,提供统一的SQL或类SQL语法,整合各引擎实例入口操作,解决多类型数据存储引擎与核心调度引擎的有机融合的问题以及核心调度引擎管理异构多数据引擎的性能问题。

因此,提供一种支持统一SQL语法进行融合查询,既适用于多模数据库系统,也适用于多引擎融合查询框架的多数据引擎动态管理方法和系统具有较高的实用价值和意义。

发明内容

针对现有技术存在的问题,本发明提供一种基于多数据引擎动态装载的查询方法和系统

本发明提供一种基于多数据引擎动态装载的查询方法,包括:

注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中;

接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息保存和/或删除;

接收用户输入的查询语句,生成查询计划树;

将查询计划树逆解析成统一抽象SQL语句保存到查询任务中,并遍历查询任务列表,将抽象SQL语句转换成符合数据引擎类型的本地操作,构造执行任务;

将所述符合数据引擎类型的本地操作转发到各个数据引擎中执行,实现执行任务;

所述本地操作包括SQL语句或者数据引擎接口调用。

根据本发明提供的一种基于多数据引擎动态装载的查询方法,所述注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中的步骤包括:

接收用户注册数据引擎类型指令,经过词法分析、语法分析以及语义分析后提取数据引擎类型名称和动态链接库的存储路径;

以设定模式打开动态链接库文件,返回句柄给调用进程,并注册所有接口方法;

将所有接口方法的地址存储在与数据引擎类型对应的数据结构里以便后续调用;

将所述数据引擎类型名称和动态链接库的存储路径保存到数据引擎类型元数据表中,完成数据引擎统一通信接口库的动态装载;

根据本发明提供的一种基于多数据引擎动态装载的查询方法,所述注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中的步骤包括:

读取数据引擎类型元数据表,提取数据引擎类型名称和动态链接库的存储路径;

以设定模式打开动态链接库文件,返回句柄给调用进程,并注册所有接口方法;

将所有接口方法的地址存储在与数据引擎类型对应的数据结构里以便后续调用,完成数据引擎统一通信接口库的动态装载。

根据本发明提供的一种基于多数据引擎动态装载的查询方法,所述接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息保存和/或删除的步骤包括:

接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息,包括IP地址、端口、用户名、密码以及数据库名称中的任一者或任多者组合,保存和/或删除。

根据本发明提供的一种基于多数据引擎动态装载的查询方法,所述接收用户输入的查询语句,生成查询计划树,并将查询计划树逆解析成统一抽象SQL语句保存到查询任务中的步骤包括:

接收用户输入的SQL语句,进行词法分析、语法分析以及语义分析后生成逻辑查询计划树,将逻辑查询计划树逆解析成统一抽象SQL语句保存到查询任务中。

根据本发明提供的一种基于多数据引擎动态装载的查询方法,所述将所述符合数据引擎类型的本地操作转发到各个数据引擎中执行,实现执行任务的步骤包括:

将所述符合数据引擎类型的本地操作转发到各个数据引擎中;

基于异步事件驱动,将核心调度引擎与各数据引擎解耦合,各数据引擎调用数据引擎动态装载时注册的接口方法,并发实现执行任务。

本发明还提供一种基于多数据引擎动态装载的查询系统,包括数据引擎动态装载模块、查询任务生成模块、抽象SQL解析与模型映射模块以及查询任务执行模块;

所述数据引擎动态装载模块能够:

注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中;

接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息保存和/或删除;

所述查询任务生成模块能够接收用户输入的查询语句,生成查询计划树;

所述抽象SQL解析与模型映射模块能够将查询计划树逆解析成统一抽象SQL语句保存到查询任务中,并遍历查询任务列表,将抽象SQL语句转换成符合数据引擎类型的本地操作,构造执行任务;

所述查询任务执行模块能够将所述符合数据引擎类型的本地操作转发到各个数据引擎中执行,实现执行任务;

所述本地操作包括SQL语句或者数据引擎接口调用。

根据本发明提供的一种基于多数据引擎动态装载的查询系统:

所述数据引擎动态装载模块能够:

接收用户注册数据引擎指令,并打开动态链接库获取接口方法,按照接口规范初始化所有预定义的接口方法,返回句柄给调用进程;

将注册数据引擎类型和读取数据引擎类型中,名称和动态链接库的存储路径保存到引擎类型元数据表中,完成数据引擎统一通信接口库的动态装载;

接收用户的注册数据引擎实例指令,保存引擎实例连接信息到引擎实例元数据表;

所述查询任务生成模块能够获取用户查询语句,并进行词法分析、语法分析、语义分析生成语法树,根据所述语法树生成逻辑查询计划,记为查询计划树;针对所述查询计划树进行查询计划优化后,构造查询任务;所述查询计划优化包括将查询计划树叶节点的查询计划下推到各数据引擎执行;所述查询计划下推是指将设定的查询操作下推至设定位置;所述设定的查询操作包括过滤条件、聚合计算、排序、去重、函数计算、子查询以及JOIN连接中的任一者或任多者组合;所述设定位置包括距离数据源最近的位置;

所述抽象SQL解析与模型映射模块能够将查询计划树逆解析成统一抽象SQL语句保存到查询任务中,根据查询任务对任务的抽象SQL进行引擎类型的本地化翻译和统一引擎模型映射,构造执行任务;

所述查询任务执行模块能够根据抽象SQL解析与模型映射模块生成的执行任务中的统一引擎模型映射,调用数据引擎动态装载模块加载的统一通信接口库,将所述查询任务相关的SQL语句或者引擎实例本地操作,送入查询任务所述引擎实例中执行,获取查询结果并整理后返回给用户。

本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述基于多数据引擎动态装载的查询方法的步骤。

本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述基于多数据引擎动态装载的查询方法的步骤。

本发明提供的基于多数据引擎动态装载的查询方法和系统,通过采用动态方式进行引擎管理的机制,可以动态添加或删除指定的数据引擎类型与数据引擎实例,调用各类数据引擎的接口方法,不需要重新编译数据库目标码来生成新版的可执行文件。本发明在效率上可以接近主程序函数的直接调用,而且通过动态装载方式简化了程序的占用空间。

另外,本发明采用抽象SQL语句解析与统一模型映射方法,在生成物理查询计划过程中将逻辑查询计划按照通讯协议规范下生成统一的抽象SQL和统一的函数接口调用,在抽象SQL解析和模型映射模块,将统一SQL和函数接口调用转至数据引擎原语,下发至计算节点引擎,可动态接入引擎执行本地化解释,避免了核心调度引擎的修改。

附图说明

为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明提供的基于多数据引擎动态装载的查询方法的流程示意图;

图2是本发明实施例提供的多引擎动态管理与抽象SQL映射架构示意图;

图3是本发明实施例提供的多引擎统一通信接口库动态装载流程示意图;

图4是本发明实施例提供的查询任务规划流程示意图;

图5是本发明实施例提供的多引擎动态管理与抽象SQL映射系统模块调用示意图;

图6是本发明提供的电子设备的结构示意图。

附图标记:

11:数据引擎动态装载模块;

12:数据引擎动态装载模块;

13:抽象SQL解析与模型映射模块;

14:查询任务执行模块。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面结合图1-图4描述本发明的抽象SQL映射的多数据引擎动态管理方法。

如图1所示,本发明实施例提供一种基于多数据引擎动态装载的查询方法,包括:

步骤100,注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中;

步骤200,接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息保存和/或删除;

步骤300,接收用户输入的查询语句,生成查询计划树;

步骤400,将查询计划树逆解析成统一抽象SQL语句保存到查询任务中,遍历查询任务列表,将抽象SQL语句转换成符合数据引擎类型的本地操作,构造执行任务;

步骤500,将所述符合数据引擎类型的本地操作转发到各个数据引擎中执行,实现执行任务;

所述本地操作包括SQL语句或者数据引擎接口调用。

下面将对本实施例的步骤做进一步说明:

步骤100是本实施例中数据引擎动态装载部分的对应步骤,动态装载过程中,对已注册的需调用引擎类型,可以直接读取并完成动态装载;对未注册的需调用引擎类型,根据用户指令或设定流程,注册引擎类型并完成动态装载。

更具体地,步骤100的启动时机包括用户发出注册引擎服务指令、用户发出启动多引擎服务指令或者用户发出重启多引擎服务指令。

步骤200是本实施例中引擎实例注册或删除部分对应的步骤,其中数据引擎实例连接信息的获取方法包括:

接收用户输入的引擎实例注册语句,经过词法语法分析后获取引擎实例连接信息;

步骤300中,用户的查询语句包括基于SQL语法的查询语句、基于类SQL语法的查询语句、基于统一SQL语法的查询语句;

本实施例的有益效果在于:

本实施例通过采用动态方式进行引擎管理的机制,可以动态添加或删除指定的数据引擎类型与数据引擎实例,调用各类数据引擎的接口方法,不需要重新编译数据库目标码来生成新版的可执行文件。本发明在效率上可以接近主程序函数的直接调用,而且通过动态装载方式简化了程序的占用空间。

另外,本实施例采用抽象SQL语句解析与统一模型映射方法,在生成物理查询计划过程中将逻辑查询计划按照通讯协议规范下生成统一的抽象SQL和统一的函数接口调用,在抽象SQL解析和模型映射模块,将统一SQL和函数接口调用转至数据引擎原语,下发至计算节点引擎,可动态接入引擎执行本地化解释,避免了核心调度引擎的修改。

根据上述实施例,在本实施例中:

所述注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中的步骤包括:

接收用户注册数据引擎类型指令,经过词法分析、语法分析以及语义分析后提取数据引擎类型名称和动态链接库的存储路径;

以设定模式打开动态链接库文件,返回句柄给调用进程,并注册所有接口方法;

将所有接口方法的地址存储在与数据引擎类型对应的数据结构里以便后续调用;

将所述数据引擎类型名称和动态链接库的存储路径保存到数据引擎类型元数据表中,完成数据引擎统一通信接口库的动态装载;

本实施例的适用时机为:

步骤100的启动后,即用户发出注册引擎服务指令、用户发出启动多引擎服务指令或者用户发出重启多引擎服务指令后,判断引擎接口库是否被初始化和注册载入,对于引擎接口库没有被初始化和注册载入的情况,(若存在错误信息,应在清空错误信息后适用本实施例)适用本实施例的注册数据引擎类型、接口方法、存储地址、动态装载步骤。

可选地,本实施例中,接口方法注册完成后,判断被注册的接口库是否实现了规定的所有接口方法,若实现了规定的所有接口方法,则继续动态装载;若未实现规定的所有接口方法,则终止操作并输出错误信息。

本实施例的有益效果在于:

本实施例通过接收注册引擎类型指令后,经分析提取引擎类型名称和动态链接库的存储路径,随后注册接口方法、存储接口方法地址、保存引擎类型名称和动态链接库的存储路径,实现数据引擎统一通信接口库的动态装载,本实施例中,调用各类数据引擎的接口方法时,不需要重新编译数据库目标码来生成新版的可执行文件,能够提供接近于主程序函数的直接调用的效率,并在此基础上,简化了程序占用空间。

根据上述任一实施例,在本实施例中:

所述注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中的步骤包括:

读取数据引擎类型元数据表,提取数据引擎类型名称和动态链接库的存储路径;

以设定模式打开动态链接库文件,返回句柄给调用进程,并注册所有接口方法;

将所有接口方法的地址存储在与数据引擎类型对应的数据结构里以便后续调用,完成数据引擎统一通信接口库的动态装载。

本实施例的适用时机为:

步骤100的启动后,即用户发出注册引擎服务指令、用户发出启动多引擎服务指令或者用户发出重启多引擎服务指令后,判断引擎接口库是否被初始化和注册载入,对于引擎接口库已经被初始化和注册载入的情况,适用本实施例的读取数据引擎类型、注册接口方法、存储地址、动态装载步骤。

本实施例的有益效果在于:

本实施例通过读取引擎类型元数据表、注册所有接口方法、存储所有接口方法的地址供后续调用,实现数据引擎统一通信接口库的动态装载。本实施例中,调用各类数据引擎的接口方法时,不需要重新编译数据库目标码来生成新版的可执行文件,能够提供接近于主程序函数的直接调用的效率,并在此基础上,简化了程序占用空间。

根据上述任一实施例,在本实施例中:

所述接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息保存和/或删除的步骤包括:

接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息,包括IP地址、端口、用户名、密码以及数据库名称中的任一者或任多者组合,保存和/或删除。

本实施例中,数据引擎实例连接信息的获取方法包括:

接收用户输入的引擎实例注册语句,经过词法语法分析后获取引擎实例连接信息。

本实施例的有益效果在于:

本实施例通过采用动态方式进行引擎管理的机制,可以动态添加或删除指定的数据引擎类型与数据引擎实例,调用各类数据引擎的接口方法时,不需要重新编译数据库目标码来生成新版的可执行文件,能够提供接近于主程序函数的直接调用的效率,并在此基础上,简化了程序占用空间。

根据上述任一实施例,在本实施例中:

所述接收用户输入的查询语句,生成查询计划树,并将查询计划树逆解析成统一抽象SQL语句保存到查询任务中的步骤包括:

接收用户输入的SQL语句,进行词法分析、语法分析以及语义分析后生成逻辑查询计划树,将逻辑查询计划树逆解析成统一抽象SQL语句保存到查询任务中。

本实施例中,用户输入的查询语句包括多种类型的数据引擎查询,例如,查询语句可以同时包括关系型表查询和图结构表查询。

本实施例中,逻辑查询计划树的生成步骤具体包括:

接收用户输入SQL语句或类SQL语句;

对SQL语句或类SQL语句进行传统的词法语法分析生成语法树;

对语法树进行语义分析,根据表关系元数据表,为语法树的各个节点附上详细信息;

从根节点开始遍历语法树,搜索目标链表与关系列表,生成逻辑查询计划树;

本实施例中,查询任务是指对每个逻辑查询计划树叶节点生成相应的查询任务的集合,查询任务的构建步骤包括:

从根节点开始遍历逻辑查询计划树,获取关系列表,读取各个关系表的分布元数据表,获取每个关系表的引擎存储位置信息。

从根节点开始遍历逻辑查询计划树生成物理查询计划,对所述每个逻辑计划树叶节点生成相应的查询任务,将查询任务树叶节点翻译为统一语法规则的抽象SQL语句,保存到查询任务结构体中,同时保存需要执行该查询任务的引擎实例信息;

其中,所述从根节点开始遍历逻辑查询计划树,获取关系列表,读取各个关系表的分布元数据表,获取每个关系表的引擎存储位置信息的步骤中,存在如下可选的优化步骤:

对存储在同一数据引擎上的表可以进行查询计划优化,将叶节点的查询计划下推到各引擎节点执行,将过滤条件、子查询等操作尽量下推到接近数据源的位置,利用原生数据引擎计算优势,同时减少核心调度引擎聚合操作涉及的数据量,提高数据处理的效率。

本实施例的有益效果在于:

本实施例能够实现业务数据的统一管理和数据融合,应对多种数据存储模式需求,提供统一的SQL或类SQL语法,整合各引擎实例入口操作,解决多类型数据存储引擎与核心调度引擎的有机融合的问题以及核心调度引擎管理异构多数据引擎的性能问题。

本实施例支持统一SQL语法进行融合查询,既适用于多模数据库系统,也适用于多引擎融合查询框架。

根据上述任一实施例,在本实施例中:

所述将所述符合数据引擎类型的本地操作转发到各个数据引擎中执行,实现执行任务的步骤包括:

将所述符合数据引擎类型的本地操作转发到各个数据引擎中;

基于异步事件驱动,将核心调度引擎与各数据引擎解耦合,各数据引擎调用数据引擎动态装载时注册的接口方法,并发实现执行任务。

本实施例的有益效果在于:

本实施例中,抽象SQL语句与对应数据库操作方式的转换通过快速调用方式实现了并行计算,提升了运行效率。

根据上述任一实施例,在本实施例中:

所述基于多数据引擎动态装载的查询方法可以应用到多数据引擎计算框架和多模数据库的多引擎动态接入中,通过动态装载统一通信接口库和动态注册引擎实例的方式载入多引擎接口方法与服务,解析用户输入的统一SQL语法,生成查询任务抽象SQL语句,后将抽象SQL语句解释为引擎类型的本地操作,通过所述加载的接口方法本地化执行。

本实施例的有益效果在于:

本实施例提供了一种既适用于多数据引擎计算框架,又适用于多模数据库的多引擎动态接入的多数据引擎动态管理方法,本实施例的方法能够在减小程序空间的基础上,保证性能、效率、扩展性以及容错性。

根据上述任一实施例,在本实施例中:

本实施例公开了一种多引擎动态管理与抽象SQL映射方法,既适用于多模数据库也适用于多引擎计算框架,具体包括:

用户输入标准SQL语句,经过常规的词法语法分析、语义分析、逻辑查询计划生成后,在物理计划生成的步骤将多引擎任务生成为抽象SQL,然后抽象SQL解析与模型映射模块通过读取各引擎实例任务对应的数据引擎类型与连接参数信息,将抽象SQL语句转换成对应引擎类型的查询语句或者查询函数。然后通过动态引擎管理载入的统一通信接口库,按照引擎连接、引擎语句执行、引擎结果获取、引擎连接关闭的顺序,将查询任务下发至各引擎执行后获取结果返回给核心调度引擎。

本实施例的有益效果在于:

本实施例与现有技术相比通过动态装载接口库方式简化了程序的占用空间,并且通过抽象SQL解析和模型映射方式解决了核心调用层构造任务的效率瓶颈,支持用户使用统一的SQL语法编写查询语句,降低了学习成本。

根据上述任一实施例,在本实施例中:

多引擎动态管理采用统一的接口规范,对应用层屏蔽数据存储引擎实例的物理拓扑和使用差异,使用动态装载库实现多引擎统一接口库的动态载入,采用异步事件驱动模型,实现数据库协调节点和各类引擎工作节点的解耦合。生成物理查询计划的时候,将查询任务直接映射到具体的查询引擎上,生成高效的针对查询类型与查询引擎类型优化过的抽象SQL语句。

本实施例方法包括如下内容:

接收用户注册引擎类型指令,经过词法分析、语法分析后提取注册引擎类型名称和动态链接库的存储路径。

根据解析得到的引擎类型信息,使用指定模式打开动态链接库文件,注册所有接口方法,并且返回句柄给调用进程。

将上述注册引擎类型名称和动态链接库的存储路径保存到引擎类型元数据表中,完成数据引擎统一通信接口库的动态装载。

可选的,本实施例方法还包括启动多引擎数据服务时,通过读取引擎类型元数据表,重复上述步骤,将已经注册过的引擎类型重新加载到数据库服务中。

接收用户注册引擎实例指令,将引擎实例连接信息,包括但不限于IP地址、端口、用户名、密码等,保存到引擎实例元数据表中。

接收用户输入的SQL语句,进行词法语法分析和语义解析后生成逻辑查询计划树,将逻辑查询计划树逆解析成统一抽象SQL语句保存到查询任务中。

遍历查询任务列表,构造执行任务,将上述步骤生成的抽象SQL语句转换成符合引擎类型的本地操作,所述本地操作包括SQL语句或者数据引擎接口调用。

实现执行任务,调用所述数据引擎动态装载时注册的接口方法,将上述的符合引擎类型的本地操作转发到各个数据引擎中执行。

可选的,所述实际查询任务执行可以实现与核心调度引擎的解耦合,并发执行。

本实施例的有益效果在于:

本实施例提供了一种通用的SQL和NoSQL数据库引擎的统一管理方案,在性能、扩展性、容错能力等方面均有良好表现。本实施例可以实现业务数据的统一管理和数据融合,应对多种数据存储模式需求,提供统一的SQL或类SQL语法,整合各引擎实例入口操作,解决多类型数据存储引擎与核心调度引擎的有机融合的问题以及核心调度引擎管理异构多数据引擎的性能问题。本实施例支持统一SQL语法进行融合查询,既适用于多模数据库系统,也适用于多引擎融合查询框架。

根据上述任一实施例,在本实施例中:

本实施例提供一种多引擎动态管理与抽象SQL映射方法,它包括如下步骤:

步骤一:数据引擎动态装载。

步骤二:查询任务的生成。

步骤三:查询任务的抽象SQL解析与模型映射。

步骤四:调用引擎动态装载库的函数执行查询任务。

具体地,如图2所示,步骤一采用多引擎统一通信接口库的动态装载,包括如下步骤:

步骤101:初次注册引擎类型,接收用户输入注册引擎语句,对用户指令进行词法分析、语法分析、语义分析后,获取所述引擎类型对象信息,包括:引擎类型、引擎版本、动态链接库存储路径;

步骤102:计算获取动态链接库的md5校验码,将以上信息保存到引擎注册元数据表中;

步骤103:根据路径,以指定模式打开指定的动态链接库文件,并返回一个句柄给调用进程;

步骤104:分配内存并初始化接口数据结构,根据所有接口方法定义这个数据结构;

步骤105:检查并注册它支持的所有接口方法,将所有接口方法的地址存储在与引擎类型对应的数据结构里以便后续调用;

可选的,如果检查后不支持所有预定义的接口方法,向输出错误信息,操作结束。

步骤106:将所述的引擎类型名称和动态链接库存储路径信息保存到引擎类型管理元数据表中,完成多引擎统一通信接口库的动态装载。

可选的,启动多引擎服务时,读取引擎类型管理元数据表,检查核对当前动态链接库的校验码,依次重复步骤103至步骤105,将已经注册过的引擎类型加载到多引擎服务中。

步骤107:接收用户输入的引擎实例注册语句,经过词法语法分析后获取引擎实例连接参数信息,包括但不限于引擎实例IP地址、端口、用户名、密码、数据库名称等信息;

步骤108:将该引擎实例连接信息保存到引擎实例元数据表中。

步骤二中,多引擎数据库将业务数据拆分成多个数据堆打散到各个引擎实例上。当收到用户的查询请求时,数据库或计算框架核心调度引擎会根据查询特点与数据分布生成并行查询计划,形成查询任务。

如图3所示,本实施例中,步骤2具体包括:

步骤201:接收用户输入SQL语句或类SQL语句;

下面给出多引擎融合查询的一个示例:

SELECT pi.name, pi.address FROM friendship fs

JOIN person_info pi ON fs.TOID = pi.name

WHERE fs.FROMID = ‘Tom’;

以上查询语句同时包含关系型表和图结构表查询,其中加粗部分为图结构表。传统的关系型数据库只支持单一类型数据引擎查询,本发明的一个实施例支持统一语法的多类型引擎SQL查询。

步骤202:将上述SQL语句进行传统的词法语法分析生成语法树,对上述步骤产生的语法树进行语义分析,根据表关系元数据表,为语法树的各个节点附上详细信息;

步骤203:从根节点开始遍历语法树,搜索目标链表与关系列表,生成逻辑查询计划树;

步骤204:从根节点开始遍历逻辑查询计划树,获取关系列表,读取各个关系表的分布元数据表,获取每个关系表的引擎存储位置信息。

可选的,对存储在同一数据引擎上的表可以进行查询计划优化,将叶节点的查询计划下推到各引擎节点执行,将过滤条件、子查询等操作尽量下推到接近数据源的位置,利用原生数据引擎计算优势,同时减少核心调度引擎聚合操作涉及的数据量,提高数据处理的效率。

步骤205:从根节点开始遍历逻辑查询计划树生成物理查询计划,对所述每个逻辑计划树叶节点生成相应的查询任务,将查询任务树叶节点翻译为统一语法规则的抽象SQL语句,保存到查询任务结构体中,同时保存需要执行该查询任务的引擎实例信息;

将所述生成的数据引擎的查询任务添加到查询任务列表。

如图4所示,步骤三中,经过所述物理查询计划阶段生成查询任务后,对查询任务的抽象SQL进行引擎类型本地化翻译和引擎模型映射生成执行任务。

本实施例步骤三包括:

步骤301:遍历查询任务列表,依次为所述查询任务构造执行任务;

步骤302:参照首个查询任务中记录的引擎信息,将抽象SQL语句进行词法语法解析后转换成所述引擎类型的本地操作形成执行任务,所述本地操作包括所述引擎类型的查询语言和接口方法调用;

步骤303:检索引擎实例元数据表,匹配所述查询任务的数据引擎实例,获取所述引擎实例连接参数信息,添加到执行任务中;

步骤304:遍历其他查询任务,按照步骤302与步骤303构造执行任务,将抽象SQL语句转换成数据引擎的本地操作,并获取引擎实例连接信息,生成执行任务列表。

步骤四根据步骤三构造的执行任务,将任务分发到各个数据引擎执行,具体包括:

步骤401:遍历所有执行任务获取引擎实例连接参数,调用连接函数接口与数据引擎建立连接,返回并保存数据引擎连接句柄;

步骤402:分别执行每个查询任务,调用SQL语句执行函数接口,通过步骤401返回的连接句柄,在所述数据引擎中执行本地化的查询任务语句,返回并保存查询执行句柄;

可选的,对于无法使用查询命令语句执行的任务,调用数据引擎查询任务相关执行接口进行查询。

步骤403:依次遍历查询任务,获取所述查询任务的执行状态,若数据引擎实例已完成当前查询任务,调用查询结果获取接口,以指定数据格式保存数据引擎返回的查询结果集;若当前查询任务没有完成,则获取下一查询任务的执行状态;

可选的,所述结果集保存可采取流方式落盘到临时数据文件或者在核心调度引擎采用临时表方式保存。

步骤404:循环执行步骤403,直到各引擎实例的所有查询任务全部执行完毕,并且所有执行查询任务的引擎实例返回的查询结果集已经全部保存;

步骤405:遍历查询任务,调用查询执行句柄释放函数,调用连接句柄释放函数,关闭与所述引擎的连接,释放内存。

协调节点核心调度引擎保存所有查询结果后,根据后续的结果集汇总查询计划,整理从各个数据引擎获取到的查询结果,所述整理操作包括但不限于排序、求和、连接等操作,将最终查询结果返回给用户。

本实施例的有益效果在于:

本实施例通过采用动态方式进行引擎管理的机制,可以动态添加或删除指定的数据引擎类型与数据引擎实例,调用各类数据引擎的接口方法,不需要重新编译数据库目标码来生成新版的可执行文件。本发明在效率上可以接近主程序函数的直接调用,而且通过动态装载方式简化了程序的占用空间。

另外,本实施例采用抽象SQL语句解析与统一模型映射方法,在生成物理查询计划过程中将逻辑查询计划按照通讯协议规范下生成统一的抽象SQL和统一的函数接口调用,在抽象SQL解析和模型映射模块,将统一SQL和函数接口调用转至数据引擎原语,下发至计算节点引擎,可动态接入引擎执行本地化解释,避免了核心调度引擎的修改。

同时,本实施例中抽象SQL语句与对应数据库操作方式的转换通过快速调用方式实现了并行计算,提升了运行效率。

下面对结合图5对本发明提供的抽象SQL映射的多数据引擎动态管理系统进行描述,下文描述的抽象SQL映射的多数据引擎动态管理系统与上文描述的抽象SQL映射的多数据引擎动态管理方法可相互对应参照。

本发明实施例还提供一种基于多数据引擎动态装载的查询系统,包括数据引擎动态装载模块11、查询任务生成模块12、抽象SQL解析与模型映射模块13以及查询任务执行模块14;

所述数据引擎动态装载模块11能够:

注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中;

接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息保存和/或删除;

所述查询任务生成模块12能够接收用户输入的查询语句,生成查询计划树;

所述抽象SQL解析与模型映射模块13能够将查询计划树逆解析成统一抽象SQL语句保存到查询任务中,并遍历查询任务列表,将抽象SQL语句转换成符合数据引擎类型的本地操作,构造执行任务;

所述查询任务执行模块14能够将所述符合数据引擎类型的本地操作转发到各个数据引擎中执行,实现执行任务;

所述本地操作包括SQL语句或者数据引擎接口调用。

本实施例的有益效果在于:

本实施例通过采用动态方式进行引擎管理的机制,可以动态添加或删除指定的数据引擎类型与数据引擎实例,调用各类数据引擎的接口方法,不需要重新编译数据库目标码来生成新版的可执行文件。本发明在效率上可以接近主程序函数的直接调用,而且通过动态装载方式简化了程序的占用空间。

另外,本实施例采用抽象SQL语句解析与统一模型映射方法,在生成物理查询计划过程中将逻辑查询计划按照通讯协议规范下生成统一的抽象SQL和统一的函数接口调用,在抽象SQL解析和模型映射模块,将统一SQL和函数接口调用转至数据引擎原语,下发至计算节点引擎,可动态接入引擎执行本地化解释,避免了核心调度引擎的修改。

根据上述任一实施例,在本实施例中:

所述数据引擎动态装载模块11能够:

接收用户注册数据引擎指令,并打开动态链接库获取接口方法,按照接口规范初始化所有预定义的接口方法,返回句柄给调用进程;

将注册数据引擎类型和读取数据引擎类型中,名称和动态链接库的存储路径保存到引擎类型元数据表中,完成数据引擎统一通信接口库的动态装载;

接收用户的注册数据引擎实例指令,保存引擎实例连接信息到引擎实例元数据表;

所述查询任务生成模块12能够获取用户查询语句,并进行词法分析、语法分析、语义分析生成语法树,根据所述语法树生成逻辑查询计划,记为查询计划树;针对所述查询计划树进行查询计划优化后,构造查询任务;所述查询计划优化包括将查询计划树叶节点的查询计划下推到各数据引擎执行;所述查询计划下推是指将设定的查询操作下推至设定位置;所述设定的查询操作包括过滤条件、聚合计算、排序、去重、函数计算、子查询以及JOIN连接中的任一者或任多者组合;所述设定位置包括距离数据源最近的位置;

所述抽象SQL解析与模型映射模块13能够将查询计划树逆解析成统一抽象SQL语句保存到查询任务中,根据查询任务对任务的抽象SQL进行引擎类型的本地化翻译和统一引擎模型映射,构造执行任务;

所述查询任务执行模块14能够根据抽象SQL解析与模型映射模块13生成的执行任务中的统一引擎模型映射,调用数据引擎动态装载模块11加载的统一通信接口库,将所述查询任务相关的SQL语句或者引擎实例本地操作,送入查询任务所述引擎实例中执行,获取查询结果并整理后返回给用户。

本实施例的有益效果在于:

本实施例能够实现业务数据的统一管理和数据融合,应对多种数据存储模式需求,提供统一的SQL或类SQL语法,整合各引擎实例入口操作,解决多类型数据存储引擎与核心调度引擎的有机融合的问题以及核心调度引擎管理异构多数据引擎的性能问题。

本实施例支持统一SQL语法进行融合查询,既适用于多模数据库系统,也适用于多引擎融合查询框架。

根据上述任一实施例,在本实施例中:

本实施例提供一种多引擎动态管理与抽象SQL映射系统,它包括如下模块:

数据引擎动态装载模块11,用于接收用户注册引擎指令,并打开动态链接库获取接口方法,按照接口规范初始化所有预定义的接口方法,返回句柄给调用进程;接收用户的注册引擎实例指令,保存引擎实例连接信息到引擎实例元数据表。

查询任务生成模块12,用于获取用户查询语句,并进行词法分析、语法分析、语义分析生成语法树,根据所述的语法树生成逻辑查询计划,根据所述逻辑查询计划进行查询计划优化后,构造查询任务。

抽象SQL解析与模型映射模块13,用于根据查询任务生成模块生12成的查询任务对任务的抽象SQL进行引擎类型的本地化翻译和统一引擎模型映射,构造执行任务。

查询任务执行模块14,用于根据抽象SQL解析与模型映射模块13生成的执行任务中的统一引擎模型映射,调用数据引擎动态装载模块11加载的统一通信接口库,将所述查询任务相关的SQL语句或者引擎实例本地操作,送入查询任务所述引擎实例中执行,获取查询结果并整理后返回给用户。

本实施例的有益效果在于:

本实施例提供了一种通用的SQL和NoSQL数据库引擎的统一管理方案,在性能、扩展性、容错能力等方面均有良好表现。本实施例可以实现业务数据的统一管理和数据融合,应对多种数据存储模式需求,提供统一的SQL或类SQL语法,整合各引擎实例入口操作,解决多类型数据存储引擎与核心调度引擎的有机融合的问题以及核心调度引擎管理异构多数据引擎的性能问题。本实施例支持统一SQL语法进行融合查询,既适用于多模数据库系统,也适用于多引擎融合查询框架。

根据上述任一实施例,在本实施例中:

如图5所示,数据引擎动态装载模块11,用于接收用户注册引擎指令,并打开动态链接库获取接口方法,按照接口规范初始化所有预定义的接口方法,并将引擎注册信息保存在数据库系统元数据表中,返回句柄给调用进程。可选的,在启动多引擎数据服务时,自动重新载入已注册过的引擎,返回接口方法句柄给调用进程。

查询任务生成模块12,用于获取用户查询语句,并进行词法分析、语法分析、语义分析生成语法树,根据所述的语法树生成逻辑查询计划,根据所述逻辑查询计划构造物理查询任务,通过逆解析处理,将查询树翻译生成统一的抽象SQL语句。

抽象SQL解析与模型映射模块13,用于根据查询任务生成模块12生成的物理查询任务对查询任务的抽象SQL进行引擎类型的本地化翻译和统一引擎模型映射,构造执行任务。

查询任务执行模块14,用于根据抽象SQL解析与模型映射模块13生成的执行任务中的统一引擎模型映射,调用数据引擎动态装载模块11加载的接口库,将所述查询任务相关的SQL语句,送入查询任务所述引擎中执行,获取查询结果并保存。

本实施例的有益效果在于:

本实施例通过采用动态方式进行引擎管理的机制,可以动态添加或删除指定的数据引擎类型与数据引擎实例,调用各类数据引擎的接口方法,不需要重新编译数据库目标码来生成新版的可执行文件。本发明在效率上可以接近主程序函数的直接调用,而且通过动态装载方式简化了程序的占用空间。

另外,本实施例采用抽象SQL语句解析与统一模型映射方法,在生成物理查询计划过程中将逻辑查询计划按照通讯协议规范下生成统一的抽象SQL和统一的函数接口调用,在抽象SQL解析和模型映射模块,将统一SQL和函数接口调用转至数据引擎原语,下发至计算节点引擎,可动态接入引擎执行本地化解释,避免了核心调度引擎的修改。

同时,本实施例中抽象SQL语句与对应数据库操作方式的转换通过快速调用方式实现了并行计算,提升了运行效率。

图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)610、通信接口(Communications Interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行基于多数据引擎动态装载的查询方法,该方法包括:注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中;接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息保存和/或删除;接收用户输入的查询语句,生成查询计划树,并将查询计划树逆解析成统一抽象SQL语句保存到查询任务中;遍历查询任务列表,将抽象SQL语句转换成符合数据引擎类型的本地操作,构造执行任务;将所述符合数据引擎类型的本地操作转发到各个数据引擎中执行,实现执行任务;所述本地操作包括SQL语句或者数据引擎接口调用。

此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的基于多数据引擎动态装载的查询方法,该方法包括:注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中;接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息保存和/或删除;接收用户输入的查询语句,生成查询计划树,并将查询计划树逆解析成统一抽象SQL语句保存到查询任务中;遍历查询任务列表,将抽象SQL语句转换成符合数据引擎类型的本地操作,构造执行任务;将所述符合数据引擎类型的本地操作转发到各个数据引擎中执行,实现执行任务;所述本地操作包括SQL语句或者数据引擎接口调用。

又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的基于多数据引擎动态装载的查询方法,该方法包括:注册数据引擎类型和/或读取数据引擎类型,并基于统一通信接口库将数据引擎类型动态装载至数据库服务中;接收用户注册和/或删除数据引擎实例的指令,在数据引擎实例元数据表中将指令对应的数据引擎实例连接信息保存和/或删除;接收用户输入的查询语句,生成查询计划树,并将查询计划树逆解析成统一抽象SQL语句保存到查询任务中;遍历查询任务列表,将抽象SQL语句转换成符合数据引擎类型的本地操作,构造执行任务;将所述符合数据引擎类型的本地操作转发到各个数据引擎中执行,实现执行任务;所述本地操作包括SQL语句或者数据引擎接口调用。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

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

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 基于多数据引擎动态装载的查询方法和系统
  • 基于多数据引擎动态装载的查询方法和系统
技术分类

06120112986306