首页> 中国专利> 增强对关系型数据库的查询处理的系统和方法

增强对关系型数据库的查询处理的系统和方法

摘要

一种用于增强对关系型数据库的查询处理的系统包括与包括多个元组的数据库相关联的服务器,所述服务器用于执行查询引擎,所述查询引擎用于接收包括一个或多个算子和任选地一个或多个条件的查询,所述一个或多个算子和所述一个或多个条件与组成所述多个元组中的每一个的多个列中的一个或多个有关;将所述算子和任选地所述条件传播到存储引擎,所述存储引擎还用于将所述算子和任选地所述条件传播到存储器管理模块,将所述存储器管理模块调整为处理从存储所述数据库的存储介质检索到的所述多个元组并且返回所述多个元组中符合所述算子和任选地所述条件的每一个相符元组;以及输出从所述存储引擎接收到的所述相符元组。

著录项

说明书

技术领域

本公开涉及一种利用基于软件的近数据处理技术来增强对关系型数据库的查询处理的系统和方法。

背景技术

由于信息时代(数字时代)和数字信息的开始已经成为几乎任何类型的行业和市场细分的基础,数字信息量正以爆炸性增长率不断地增长,数据量每12至18个月翻一番。

一般的数据库,尤其是由关系型数据库管理系统(Relational DatabasesManagement System,RDBMS)管理的关系型数据库提供结构化语义,以从大型数据集中获取信息。因此,例如Oracle数据库、微软SQL服务器、SAP HANA、IBM Db2、MySQL、PostgreSQL等的RDBMS已成为广泛应用于众多行业和应用的基本构件,从政府信息管理基础架构、金融平台和商务智能到行业管理系统,再到移动应用程序。

RDBMS根据关系模型构建数据,在所述关系模型中,数据被组织在各自包含许多记录和元组的表中。每个元组随后由数量可变的属性(或列)组成。针对从RDBMS检索数据的查询是用例如结构化查询语言(Structured Query Language,SQL)等的高级声明式查询语言来编写的,所述查询随后被转换成一个或多个关系算子,所述关系算子被提交到由RDBMS管理的关系型数据库。

RDBMS通常在基于模块化编程范式来进行设计和构造的,使得可能非常复杂的RDBMS通常由几个明显不同的独立模块组成,所述模块用于根据从针对DB的查询中所提取的算子和可选的条件来处理DB数据。此外,RDBMS通常使用由存储器管理模块提供的存储介质访问服务,所述存储器管理模块可能是操作系统(Operating System,OS)固有的或者部署为附加模块。由于RDBMS的高度分层和模块化结构,从存储介质中检索到的数据库(database,DB)数据可遍历许多软件模块,以到达处理DB数据的模块。由于通常只有非常小的一部分DB元组可能符合提交给RDBMS的查询,所以遍历分层结构的大多数数据都是无关的。

发明内容

本公开实施例的目的是提供一种解决方案,减轻或解决传统解决方案中的缺点和问题。

通过独立权利要求的主题解决上述和进一步目的。在从属权利要求中可能找到进一步有利实施例。

本公开旨在提供一种通过显著减少DB数据量来改善RDBMS的性能的解决方案,所述DB数据遍历对存储DB的至少一部分的存储介质进行管理的软件模块与根据针对RDBMS的查询来处理DB数据的软件模块之间的RDBMS分层结构。

根据本发明的第一方面,提供了一种用于增强对关系型数据库的查询处理的系统,包括服务器的至少一个处理电路,所述服务器的至少一个处理电路与包括多个元组的数据库相关联,所述至少一个处理电路用于:

执行查询引擎,所述查询引擎用于接收查询,所述查询包括一个或多个算子和可选的一个或多个条件,所述一个或多个算子和可选的所述一个或多个条件与组成所述多个元组中的每一个元组的多个列中的一个或多个有关;

将所述算子和可选的所述条件传播到存储引擎,所述存储引擎用于进一步将所述算子和可选的所述条件传播到存储器管理模块,将所述存储器管理模块调整/配置成处理从存储所述数据库的至少一部分的存储介质中检索到的所述多个元组并且返回所述多个元组中符合所述算子和可选的所述条件的每一个相符元组。

输出从所述存储引擎接收到的所述相符元组中的每一个。

根据本发明的第二方面,提供了一种增强对关系型数据库的查询处理的计算机实施的方法,包括使用与包括多个元组的数据库相关联的服务器的至少一个处理电路,所述处理电路用于:

执行查询引擎,所述查询引擎用于接收查询,所述查询包括一个或多个算子和可选的一个或多个条件,所述一个或多个算子和可选的所述一个或多个条件与组成所述多个元组中的每一个元组的多个列中的一个或多个有关;

将所述算子和可选的所述条件传播到存储引擎,所述存储引擎用于进一步将所述算子和可选的所述条件传播到存储器管理模块,将所述存储器管理模块调整/配置成处理从存储所述数据库的至少一部分的存储介质中检索到的所述多个元组并且返回所述多个元组中符合所述算子和可选的所述条件的每一个相符元组。

输出从所述存储引擎接收到的所述相符元组中的每一个。

所述数据库可存储在一个或多个存储介质中。在后一种替代方案中,存储介质可以存储所述数据库的至少一部分。

根据本发明的第三方面,提供了一种具有程序代码的计算机程序,所述程序代码用于执行根据第二方面所述的增强对关系型数据库的查询处理的方法。

根据本发明的第四方面,提供了一种计算机可读存储介质,包括计算机程序代码指令,所述计算机程序代码指令可由计算机执行以用于执行根据第二方面所述的增强对关系型数据库的查询处理的方法。

在通常用于从存储介质中检索数据的存储器管理模块中处理元组,并且仅将相符元组返回到查询引擎,这实现了仅将符合算子和可选的条件的相符元组从存储管理器传送到查询引擎,而不是像通过现有RDBMS实施方案那样传送所有元组。这可能显著减少并且可能防止RDBMS层之间的数据传送瓶颈,并且可因此显著减少查询响应延迟。此外,所述解决方案是一种软件解决方案,不需要额外的复杂、昂贵且通常为定制的硬件元件,可以通过某些现有RDBMS实施方案来实现。作为软件解决方案,其可以容易地集成,移植和/或在为多个应用程序、系统、平台和服务部署的许多RDBMS中使用。

在第一和/或第二方面的可选的实施形式中,查询引擎用于将所述查询中包括的一个或多个其它算子应用于从存储引擎接收到的所述相符元组中的一个或多个,以识别并输出符合所述其它算子的每一个相符元组。分割对查询引擎与存储引擎之间的元组进行拆分处理可以使RDBMS和OS的不同层中的数据处理利用率以及处理利用率和传播数据量之间进行权衡方面具有高度灵活性。例如,可能导致相符元组数量大大减少的算子和条件可由存储管理器向下传播并进行处理。存储管理器可将这些占元组总量的极小一部分的相符元组返回到查询引擎。查询引擎接着还可以根据由查询定义的并未向下传播的其它算子和可选的其它条件来处理相符元组。这可能允许对存储管理器以及RDBMS与OS之间的编程接口进行最小程度的修改、调整和/或重新设计,从而可以减少对采用所提出的解决方案的所付出的努力。这还可以显著减少从存储管理器传送到查询引擎的元组数量(数据量),而从查询引擎向下传播至存储管理器的数据量(即,算子和条件)也保持在最小。

在第一和/或第二方面的又一实施形式中,使用扩展查询语义应用程序编程接口(Application Programming Interface,简称API)将所述算子和可选的所述条件传播到所述存储引擎,将所述API定义为支持将所述查询所使用的查询语言的查询语义从所述查询引擎传输到所述存储引擎。扩展RDBMS的查询引擎和RDBMS的存储引擎模块之间的API对于促进查询语义(即,在RDBMS模块,特别是查询引擎和存储引擎,之间的查询中定义的算子和可选的条件)的传播而言可能至关重要。

在第一和/或第二方面的又一实施形式中,存储引擎使用扩展OS API,将所述扩展OS API定义为支持将所述算子和可选的所述条件传播到由所述处理电路执行的OS固有的调整后存储管理器。存储管理器用于将从存储介质中检索到的数据存储在分配缓冲器中并将所述算子和可选的所述条件传播到存储器管理模块。仅举例来说,存储器管理模块可为OS固有的。扩展RDBMS之间的API,特别是在存储引擎(RDBMS的低级模块)与OS之间的API,对于向下传播查询语义(即,所述查询中定义的所述算子和可选的所述条件)是至关重要的。此外,OS固有的存储器管理模块可在从存储介质中检索数据时表现出高性能,因此使用所述存储器管理模块来处理元组可以表现出很高的元组处理性能。

在第一和/或第二方面的又一实施形式中,所述调整后存储器管理模块包括所述OS的调整后页面缓存管理模块,所述调整后页面缓存管理模块扩展传统页面缓存管理模块的功能,所述传统页面缓存管理模块用于将存储在所述存储介质中的数据页加载至所述OS的页面缓存,以进一步处理加载至所述页面缓存的一个或多个页面中所存储的所述多个元组中的一个或多个,从而识别所述相符元组中的一个或多个。页面缓存是用于存储管理的最常见、最普遍的实施方案之一,并且被许多OS采用。因此,调整页面缓存管理模块可以鼓励并增加增强型RDBMS结构在为多个应用程序、系统、平台和服务部署的许多RDBMS中的采用和集成。

在第一和/或第二方面的又一实施形式中,动态地加载所述调整后页面缓存管理模块以代替传统页面缓存管理模块。为存储管理器和存储器管理模块动态地加载支持查询语义传播和元组处理的调整后软件模块可以容易地加载调整后软件模块而不需要重新部署整个RDBMS和/或OS。这还可以简化现有RDBMS中增强型RDBMS结构的采用和集成。

在第一和/或第二方面的又一实施形式中,所述调整后存储器管理模块包括用于将存储在所述存储介质中的数据页加载至缓冲池的调整后缓冲池管理模块,所述调整后缓冲池管理模块还用于接收所述算子和可选的所述条件并且处理加载至所述缓冲池的一个或多个页面中所存储的所述多个元组中的一个或多个,以识别所述相符元组中的一个或多个。缓冲池是用于存储管理的其它常见、普遍的实施方案,并且可被许多RDBMS采用。因此,调整页面缓存管理模块可以鼓励并增加增强型RDBMS结构在为多个应用程序、系统、平台和服务部署的许多RDBMS中的采用和集成。

附图说明

本文仅通过示例参考附图描述本发明的一些实施例。现特定详细地参考附图,强调所展示的细节是作为示例且出于对本发明的实施例进行说明性论述的目的。就此而言,结合附图进行的描述使可以如何实践本发明的实施例对所属领域的技术人员而言变得显而易见。

在附图中:

图1是根据本发明的一些实施例的通过将查询算子和可选的条件传播到调整后存储器管理模块来处理对关系型数据库的查询的示范性过程的流程图,所述调整后存储器管理模块用于处理从存储介质检索到的数据库的元组;

图2是根据本发明的一些实施例的通过将查询算子和可选的条件传播到调整后存储器管理模块来处理对关系型数据库的查询的示范性系统的示意图,所述调整后存储器管理模块用于处理从存储介质检索到的数据库的元组;

图3A和图3B是根据本发明的一些实施例的通过将查询算子和可选的条件传播到调整后存储器管理模块来处理对关系型数据库的查询的示范性软件模型的示意图,所述调整后存储器管理模块用于处理从存储介质检索到的数据库的元组;

图4是根据本发明的一些实施例的被应用于将示范性查询算子和条件从查询引擎传播到存储引擎的示范性查询语义API的示意图;

图5是根据本发明的一些实施例的示范性OS API的示意图,所述OS API被扩展以支持查询算子和条件从存储引擎到调整后VFS和/或类似存储管理器的传播;

图6是根据本发明的一些实施例的示范性调整后页面缓存管理模块的示意图,所述调整后页面缓存管理模块被调整后存储管理器(VFS等)用于处理从存储介质检索到的数据库的元组;

图7是根据本发明的一些实施例的示范性调整后缓冲池管理模块的示意图,所述调整后缓冲池管理模块被存储引擎用于使用存储管理器(VFS等)处理从存储介质检索到的数据库的元组;和

图8A、图8B和图8C是根据本发明的一些实施例的将查询算子和条件从查询引擎通过存储引擎传播到调整后存储器管理模块的示范性过程的流程图,或者根据本发明的一些实施例的调整后存储引擎缓冲池管理模块,将其调整为处理从存储管理器(VFS等)检索到的数据库的元组。

具体实施方式

本发明在一些实施例中涉及增强对关系型数据库的查询处理,且尤其(而非唯一)涉及通过将查询算子和条件传播到调整后存储器管理模块而增强对关系型数据库的查询处理,所述调整后存储器管理模块用于对从存储关系型数据库的至少一部分的存储介质检索到的元组进行处理。

用于管理存储在计算节点,例如,服务器,节点,节点集群等的存储介质中的关系型数据库的RDBMS的架构通常根据模块编程的普遍最佳和经证明的编程实践来设计和构造。还适用于存储在多个存储介质中的关系型数据库(即,关系型数据库以分布式方式存储在多个存储介质中)。多个存储介质可以部署在一个或多个计算节点中。

基于将整个程序的功能分离为独立且可互换的软件模块的模块化编程可以提供许多好处,例如,代码可重用性、软件设计的简易性和简化的代码维护等,所述每个模块专门用于执行整体功能的子集。这些软件模块通过抽象的应用程序编程接口(API)展现其功能,所述API可用于在独立软件模块之间通信和传输数据。

遵循模块化编程范式,非常复杂的RDBMS通常由四个明显不同的独立模块组成,分别是请求管理器、解析器、查询引擎和存储引擎。请求管理器接收查询请求,例如SQL查询,并且可以分配并调度资源以执行查询。接着,解析器使用正则表达式来解析并分析SQL查询。查询引擎生成查询计划,所述查询计划由关系算子和表的抽象语法树(AbstractSyntax Tree,AST)组成。存储引擎管理所述表和元组。

在RDBMS软件模块中,查询引擎和存储引擎是最重要的模块,因为RDBMS大部分执行时间都花费在这两个模块上。

查询引擎专门处理所述数据(即,从存储在存储介质中的数据库中检索到的元组),而存储引擎专门用于数据访问(即,访问存储介质以检索和/或提交数据库中的元组)。传统查询与存储引擎之间的API(即,打开、下一个、关闭)通常是完全抽象的,没有任何处理语义从查询中显露或传递(传输)到存储引擎。因此,每一个关系算子都使用相同的确切接口来处理。

RDBMS通常在具有一个操作系统(OS)(例如,Linux、Windows、macOS等)的环境中执行,所述操作系统通常支持便携式操作系统接口(Portable Operating SystemInterface,POSIX)或类似API以向RDBMS提供硬件计算平台的进一步抽象化。由于数据库本身即与所述表有关的数据和信息通常是以文件的形式存储在安装于存储介质上的一个或多个文件系统上,因此使用由OS提供的服务、功能和/或特征或添加到OS,例如存储管理器,尤其是如文件系统、虚拟文件系统(Virtual file System,VFS)等的存储管理器上的补充服务来访问存储在存储介质中的数据。

由于传统上对存储介质的访问较慢,传统软件系统传统上将用于存储前述存储介质的数据块,例如,页、段等,的软件缓存集成到高速存储器,例如,易失性存储器(如随机存取存储器)和处理器集成缓存等中,以快速处理数据。RDBMS可通过实现其自身的软件缓存,例如,本领域中已知的缓冲池等,来将这种功能集成到存储引擎中。另外和/或可替代地,RDBMS可利用OS中集成(固有)的软件缓存机制,例如本领域中已知的页面缓存等。使用相应存储器管理软件模块,具体地,分别是页面缓存管理模块和缓冲池管理模块来实现页面缓冲和缓冲池。

因此,为了从存储在存储介质中的数据库中检索元组,存储引擎利用任一函数调用与存储器管理模块尤其是缓冲池管理模块进行交互,或利用OS的系统调用与存储管理器(VFS等)进行交互,这进而可采用页面缓存管理模块来访问存储介质。

类似于查询引擎与存储引擎之间的API,存储引擎与OS之间的API(即打开、读/写和关闭)也是抽象的,因此不携带软件栈的上层的信息或语义,尤其是查询语义,而仅携带与对存储在存储介质中的数据库的数据进行访问有关的信息。同样,存储引擎与其缓冲池管理模块之间的API是抽象的,并且类似地只携带与访问数据有关的信息。

其中RDBMS模块专用于其与抽象API耦合的指定功能的模块化实现的含义是数据库的每个元组都必须从数据所在的位置(即,页面缓存或缓冲池)一直遍历整个存储引擎再到查询引擎,而不管元组是否对最终计算有用,即是否符合由查询定义的算子和可选的条件。这种数据流来自于以下事实,在传统RDBMSE中,查询引擎是处理元组的功能模块,而所有其它模块仅用于从数据库中检索数据并将其传输到查询引擎,因此对于查询语义即,算子和其可选的条件是不了解的。

根据本发明的一些实施例,提供了通过传播查询语义即算子和可选的条件(若存在)到调整后的软件模块,尤其是调整后存储器管理模块来增强对关系型数据库的查询处理的方法、系统和计算机程序产品,其中所述调整后存储器管理模块用于处理从存储介质中检索到的数据库的元组。这种实施方案可由术语近数据处理(Near Data Processing,NDP)来指定,所述术语反映了在从存储介质中检索数据时,由存储器管理模块处理数据,而不是像在当前RDBMS架构中那样使数据遍历所有功能模块一直到查询引擎。

为此,可以调整查询引擎和存储引擎以支持扩展查询语义API,将所述API定义为支持查询引擎将查询语义传播到存储引擎。

此外,展现存储管理器(例如,VFS等)功能的OS API还可以扩展为支持将查询语义从存储引擎向下传播到存储器管理模块,例如,页面缓存管理模块。还将页面缓冲管理模块调整为根据所接收(传播)的查询语义来处理从数据库中检索到的元组。在存储引擎利用缓冲池的情况下,可以调整缓冲池管理模块以根据所接收(传播)的查询语义来处理从数据库中检索到的元组。在前述两种情况下,可调整和/或替换页面缓存管理模块和/或缓冲池管理模块,以支持在从存储在存储介质中的数据库中检索到元组并加载到用作软件缓存的高速存储器中之后立即对元组进行处理。

传统API使低级软件模块(例如,存储引擎、存储管理器、页面缓存管理模块和缓冲池管理模块)能够将数据向上移动到查询引擎。为此,这些API中的一个或多个可被扩展和/或调整以便支持仅传输符合向下传播的查询语义的相符元组,而不是传输所有元组。

可以在运行前和/或在运行时使用任何可用的技术、特征和/或服务例如,可以由OS和/或RDBMS支持的模块的动态加载和如eBPF等的虚拟机方法来预先静态地调整和/或替换页面缓存和/或缓冲池。

与现有RDBMS架构相比,用于RDBMS的近数据处理(NDP)实施方案可具有主要优势和益处。

首先,通过将至少一部分的查询处理委托给存储器管理模块,可以避免将所有数据库元组传输到查询引擎的需要,将所述存储器管理模块调整为处理元组的存储器管理模块并且仅将相符元组返回到查询引擎。将所有数据库元组传输到查询引擎的过程是通过使元组遍历存储引擎和查询引擎的大型复杂的软件栈来完成的(如目前现有的RDBMS所完成的),可能会造成主要瓶颈,从而造成显著的查询响应延迟和/或处理时间损失。相比之下,在支持NDP的RDBMS中,仅相符元组遍历回到查询引擎,从而大大减少了查询延迟和/或处理时间,所述相符元组符合向下推送(传播)的算子且符合可选的相应条件,因此通常数量有限。

例如,假设提交给RDBMS的SQL查询询问来自中国的人的姓名信息。在传统RDBMS中,数据库中的“tablePeople”表中的所有元组,无论所述元组是否满足(符合)条件“中国”,都被传输到查询引擎,所述查询引擎可以处理所述元组以识别并响应对符合条件“中国”的元组的查询。另一方面,在支持NDP的RDBMS中,数据所在的模块接收传播的查询语义,具体地,算子选择和条件“中国”可以识别符合条件“中国”的元组,因此可以只将相符元组传输回查询引擎。这同样可能适用于其它算子,例如,投影、聚合、联结等。

此外,某些现有RDBMS可应用专门的附加硬件来支持向下推送(传播)查询语义,以便减少遍历RDBMS和OS的软件模块层的数据量。例如,除了被称为Exadata数据库服务器的数据库计算节点(服务器)之外,Oracle Exadata数据库机还可以使用一个或多个附加计算节点(服务器)来部署被称为Exadata存储服务器的单独存储层。添加的存储服务器存储所述数据库。存储服务器可用于将有限的查询语义集(特别是只将选择算子语义)向下推送到单独存储层(即Exadata存储服务器)。在其它示例中,Ibex和IBM PureData RDBMS可以在存储介质与运行RDBMS的计算节点之间使用专用的现场可编程门阵列(Field ProgrammableGate Array,FPGA),以便将查询语义向下推送到FPGA,所述FPGA可在本地处理从存储介质中检索到的元组。在其它示例中,YourSQL采用支持处理的固态硬盘(Solid State Disk,SSD)以及可编程硬件加速器,以用于根据向下推送的查询语义处理从SSD中检索到的元组。

如本文中所描述的硬件方法可能存在几个缺点。第一,需要附加的通常昂贵的硬件,以致增加RDBMS的成本。第二,附加的硬件的设计和部署可能非常复杂,并且可能需要针对不同的RDBMS和/或不同的应用程序进行大量定制。第三,随着处理平台的性能持续显著改善,且由于技术规模的扩大,专用的硬件可能会在较短的时间内相对通用平台过时和/或性能显著降低。另外,虽然硬件方法可以改善存储介质中存在的数据的查询响应延迟方面的性能,但是这些硬件解决方案仍然需要大量数据在各种软件模块之间遍历,由于关系算子没有被推送到RDBMS服务器的临时存储器(例如,易失性存储器、暂时缓冲器等)中的数据,因此会产生明显的处理开销。应注意,由于局部性原理,在常见情况下,通常希望在RDBMS或OS的软件缓存中查找数据。

相比之下,支持NDP的RDBMS是纯软件解决方案,不需要附加的硬件资源和/或处理节点,因此部署成本大大降低。此外,支持NDP的RDBMS可具有高度可扩展性,因此无论其大小如何,都可以作为固有软件解决方案部署在数据库中。而且,支持NDP的RDBMS适用于存储介质中存在的数据以及临时存储器中存在的数据,因此适用于所有的数据访问,而不用考虑数据的当前位置。

另外,由于支持NDP的RDBMS是纯软件解决方案,因此支持NDP的RDBMS可以很容易地集成并广泛应用于各现有RDBMS平台和系统中,同时具有高度灵活性,且不需要花费太大努力。

虽然存在一些现有RDBMS实施方案,例如MySQL是通过向下推送查询语义和通过软件模型层只移动相符元组来优化性能的纯软件解决方案,但是即使在一定程度上改善了查询处理性能,这些解决方案仍具有很大的局限性。首先,此类移植局限于只向下推送“选择”算子,而不能向下推送其它算子。此外,这些实施方案使用辅助索引数据结构来映射向下推送的语义。索引机制可能存在主要的局限性。首先,索引可能并不总是可用于向下推送,并且在可用时,索引的效率极低,因为其数据集大小随着数据库中所访问的表的大小而变化。在最坏的情况下,索引的大小可能使数据库的大小增加一倍。另外,索引是基于指针的动态数据结构(例如,散列表、跳表等),使得在现代中央处理单元(Central Processing Unit,CPU)架构中索引的访问效率极低。再则,无用元组可能仍会遍历存储引擎的软件栈的很大一部分,因为这些技术并不能直接在缓冲池或页面缓存存储器管理模块中操作。因此,这些RDBMS实施方案无法减少无用元组的数据移动和其相关联的处理开销。

另一方面,支持NDP的RDBMS不需要使用此类索引机制和结构,而是扩展API以高效的方式将查询语义直接传播到存储器管理模块,这可能只会对传输到存储器管理模块的数据造成微不足道且通常可忽略的添加。另一方面,从存储器管理模块返回到查询引擎的数据量显著减少,从而显著减少了RDBMS软件层之间的数据移动并且显著改善了处理和/或查询响应时间性能。

在详细解释本发明的至少一个实施例之前,应理解,本发明在其应用中不必限于在以下描述中阐述和/或在附图和/或示例中所示的组件和/或方法的构造和布置的细节。本发明能够具有其它实施例或以各种方式实践或执行。

本发明可以是一种系统、一种方法和/或一种计算机程序产品。计算机程序产品可包括一个或多个计算机可读存储介质,其上具有计算机可读程序指令以使处理器执行本发明的各方面。

计算机可读存储介质可以是有形装置,可以保留和存储由指令执行设备使用的指令。计算机可读存储介质可以是例如但不限于:电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或前述的任意合适组合。计算机可读存储介质的更具体示例的非详尽列表包括以下内容:便携式计算机磁盘、硬盘、随机存取存储器(random accessmemory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(erasableprogrammable read-only memory,EPROM或闪存)、静态随机存取存储器(static randomaccess memory,SRAM)、便携式压缩盘只读存储器(portable compact disc read-onlymemory,CD-ROM)、数字多功能盘(digital versatile disk,DVD)、记忆棒、软盘、机械编码设备,例如其中记录有指令的穿孔卡或凹槽中的凸起结构),以及上述任意适当组合。本文所使用的计算机可读存储介质本身不应被解释为瞬态信号本身,例如无线电波或其它自由传播的电磁波、通过波导或其它传输介质传播的电磁波(例如,通过光纤电缆的光脉冲),或者通过电线传输的电信号。

本文中所描述的计算机可读程序指令可以从计算机可读存储介质下载到相应计算/处理装置,或通过例如因特网、局域网、广域网和/或无线网络等网络下载到外部计算机或外部存储装置。网络可包括铜传输电缆、光学传输光纤、无线传输、路由器、防火墙、交换器、网关计算机和/或边缘服务器。每个计算/处理装置中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并转发所述计算机可读程序指令以存储在相应计算/处理装置内的计算机可读存储介质中。

用于执行本发明的操作的计算机可读程序指令可以是以一种或多种编程语言的任何组合编写的汇编指令、指令集架构(instruction-set-architecture,ISA)指令、机器指令、机器相关指令、微码、固件指令、状态设定数据或源码或目标代码,所述一种或多种编程语言包括例如Smalltalk、C++等的面向对象的编程语言,以及例如“C”编程语言或类似编程语言的常规程序编程语言。

计算机可读程序指令可以完全在用户的计算机上执行,部分在用户的计算机上作为独立软件包执行,部分在用户的计算机上和部分在远程计算机或完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过包括局域网(local area network,LAN)或广域网(wide area network,WAN)的任何类型的网络而连接到用户的计算机,或者可以对外部计算机进行连接(例如,使用因特网服务供应商通过因特网连接)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(programmable logic array,PLA)的电子电路可以通过利用计算机可读程序指令的状态信息将电子电路个性化而执行计算机可读程序指令,以便执行本发明的各方面。

参考本发明的实施例的方法、装置(系统)和计算机程序产品的流程图说明和/或框图来描述本发明的各方面。应理解,可以通过计算机可读程序指令来实施流程图说明和/或框图中的每个框,以及流程图说明和/或框图中的框的组合。

图中的流程图和框图示出了根据本发明的各种实施例中的系统、方法和计算机程序产品的可能实现的架构、功能和操作。就此而言,流程图或框图中的每个框可以表示指令的模块、片段或部分,其中包括用于实现指定逻辑功能的一个或多个可执行指令。在一些替代性实施方案中,框中指出的功能可能不按图中指出的顺序进行。例如,连续显示的两个框实际上可以基本同时执行,或者根据所涉及的功能,有时可以以相反的顺序执行所述框。还应注意,框图和/或流程图说明中的每个框,以及框图和/或流程图说明中的框的组合可以通过专用的基于硬件的系统实施,所述系统执行指定功能或动作,或实行专用硬件和计算机指令的组合。

现在参考图式,图1是根据本发明的一些实施例中通过将查询算子和可选的条件传播到调整后存储器管理模块来处理对关系型数据库的查询的示范性过程的流程图,所述调整后存储器管理模块用于处理从存储介质中检索到的数据库的元组。

示范性过程100可由与关系型数据库相关联的一个或多个计算节点执行。具体地说,计算节点适用于接收输入查询并响应从关系型数据库中检索到的元组,所述元组符合一个或多个关系算子以及可选的由输入查询定义和/或表示的一个或多个条件。过程100可用于通过使用调整后传统低级软件模块来增强对提交到关系型数据库的查询处理,所述软件模块通常用于从存储数据库的存储介质中检索数据。可以调整低级软件模块以进一步处理从数据库中检索到的元组,识别符合算子和可选的由查询所定义的条件的元组,并返回相符元组。

这是通过将查询语义(即一个或多个算子和可选的由查询定义的条件)从高级软件模块向下传播(推送)到低级软件模块通常是存储器管理模块来完成,所述低级软件模块可能是由计算节点执行(代管)的OS和/或由计算节点执行的用以管理数据库的RDBMS的一部分。

为此,可以部署增强的软件基础设施,特别是扩展API,以启用和支持查询语义向下传播到低级软件模块,将所述低级软件模块调整为处理从存储介质中检索到的元组。作为补充,扩展API可以支持低级软件模块在响应于查询而传播回(向上)备份的相符元组。

还参考图2,图2是根据本发明的一些实施例中用于通过将查询算子和任选条件传播到调整后存储器管理模块来处理对关系型数据库的查询的示范性系统的示意图,所述调整后存储器管理模块用于处理从存储介质检索到的数据库的元组。

示范性数据库系统200(例如,与关系型数据库208相关联的计算机、服务器、计算节点、计算节点群集等)可以执行过程,例如,用于增强对提交给数据库208的查询的处理的过程100。数据库系统200可包括网络接口202、用于执行过程100的处理器204和用于存储代码和/或数据并且通常用于存储数据库208的存储器206。具体而言,数据库208可以是SQL数据库,例如Oracle、MySQL、微软SQL服务器、PostgreSQL等。

网络接口202可包括一个或多个网络接口,用于连接到一个或多个有线和/或无线网络(例如局域网(LAN)、广域网(WAN)、市域网(Municipal Area Network,MAN)、蜂窝网、因特网等),以促进与访问数据库208的一个或多个网络节点的通信。通过网络接口202,数据库系统200可以接收由网络中的其它节点提交给数据库208的一个或多个查询250,并在识别为符合算子和可选地符合由相应查询定义的条件之后,响应从数据库208中检索到的相符元组252。

处理器204(同质或异构的)可以包括布置为用于并行处理的一个或多个处理节点,作为集群和/或作为一个或多个多核处理器。

用于存储数据和/或程序代码的存储器206可包括一个或多个非暂时性存储器设备,可以是持久性非易失性设备(例如,硬盘驱动器、固态驱动器(solid state drive,SSD)、磁盘、闪存阵列等)和/或易失性设备(例如随机存取存储器(RAM)设备、高速缓存存储器等)。存储器206还可包括可通过网络接口202经由一个或多个网络访问的一个或多个网络存储资源,例如,存储服务器、附网存储器(Network Attached Storage,NAS)、网络驱动器等。

处理器204可执行一个或多个软件模块,例如进程、脚本、应用程序、代理、实用程序、工具、OS等,每个模块包括存储在如存储器206的非暂时性介质中并由如处理器204的一个或多个处理器执行的多个程序指令。例如,处理器204可执行用于管理数据库208的关系型数据库管理系统(RDBMS)210。RDBMS 210通常与OS 220(例如Linux、Windows等)一起执行,OS 220促进并提供RDBMS 210对存储介质(特别是存储数据库208的存储器206)的访问服务。

在一些部署中,数据库系统200由托管RDBMS 210和数据库208两者的单个计算节点使用。在这种情况下,数据库系统200可以执行RDBMS 210和提供对数据库208的访问的OS220两者。然而,在一些部署中,数据库系统200可分布在多个计算节点之间,使得RDBMS 210可由第一计算节点执行,并且数据库208可由第二计算节点代管。在此类部署中,第一计算节点可执行RDBMS 210(通常在OS环境中),而第二计算节点执行提供对数据库208的访问服务的OS 220。第一和第二计算节点可彼此通信,以促进RDBMS 210与OS 220之间的通信。

可选地,数据库系统200和/或RDBMS 210由一个或多个云计算服务提供,例如,基础设施即服务(Infrastructure as a Service,IaaS)、平台即服务(Platform as aService,PaaS)、软件即服务(Software as a Service,SaaS)和/或由一个或多个云基础设施和/或服务(例如,亚马逊网络服务(Amazon Web Service,AWS)、谷歌云、微软智能云、阿里云、华为云等。

现参考图3A和图3B,图3A和图3B是根据本发明的一些实施例中用于通过将查询算子和任选条件传播到调整后存储器管理模块来处理对关系型数据库的查询的示范性软件模型的示意图,所述调整后存储器管理模块用于处理从存储介质检索到的数据库的元组。

示范性软件模型300A和300B是分层模型,其中RDBMS(例如被部署用于管理数据库(例如数据库208)的RDBMS 210)由一个或多个软件模块构成,例如,请求管理器310、解析器312、查询引擎314和存储引擎316。请求管理器310可用于接收查询,例如针对数据库208的查询250。使用本领域中已知的查询语言(例如,SQL等)构造查询250。解析器312可用于使用正则表达式来解析(分析)查询250并识别如本领域中已知的查询的元素。查询引擎314可用于提取由查询元素表示的一个或多个算子和一个或多个条件(若存在)。查询引擎314还可生成查询计划,其由本领域中已知的所提取的关系算子和表的AST组成。存储引擎316可用于从如本领域中已知的数据库208中检索元组。

如模型300A和300B所示,查询引擎314还可用于和/或调整成将查询语义(特别是算子和可选的条件)传输(向下传播)到存储引擎316,并且作为响应接收符合相应算子和任选条件的元组。

RDBMS 210通常可在OS(例如OS 220)的环境中执行。因此,RDBMS 210(特别是存储引擎316)可以利用存储和/或存储器访问管理模块和/或由OS 220提供的服务来访问存储在存储介质206中的数据库208,如模型300A和300B所示。

特别是,OS 220可以包括存储管理器320以及其它软件模块,所述存储管理器320例如是安装在存储器206上的文件系统、虚拟文件系统(VFS)等,所述虚拟文件系统在一个或多个文件系统等上提供抽象层,所述抽象层可用于访问存储器206以进行从存储器206/到存储器206的读和/或写操作。

如模型300A所示,存储引擎316利用调整后存储器管理模块322,特别是用于将数据(特别是来自存储器206的数据库208的元组)加载到处理元组的高速存储器(例如,RAM、高速缓存等)的页面缓存管理模块322A。

如模型300A中所呈现的实施方案,存储引擎316还可用于和/或调整成将查询语义(特别是算子和可选的条件)传输(传播)到存储管理器320,并且作为响应接收符合相应算子和可选的条件的元组。此外,可以调整存储管理器320以进一步将查询语义传播到OS 220的调整后存储器管理模块322,例如,页面缓存管理模块322A适于处理从数据库208中检索到的元组,并识别符合从存储管理器320A接收到的算子和可选的条件的元组。

在处理所检索到的元组之后,页面缓存管理模块322A可将相符元组传输到存储管理器320,所述存储管理器320进而可以用相符元组来响应存储引擎316。存储引擎316还可将相符元组向上传播到查询引擎314,所述查询引擎314还将相符元组传播到可输出相符元组252的请求管理器310。

如模型300B所示,其中存储引擎316绕过OS 220的至少一些模块和服务以将从存储器206中检索到的数据加载到高速存储器中,存储引擎316可以集成调整后直接存取存储器管理模块322,例如,缓冲池管理模块322B等,其适于处理从数据库208中检索到的元组并识别符合从查询引擎314接收的算子和可选条件的元组。由于缓冲池管理模块322B通常可以集成在存储引擎316中,因此从查询引擎314接收到的查询语义从内部(在存储引擎316内)传输到缓冲池管理模块322B。缓冲池管理模块322B可使用存储管理器320来检索数据,特别是检索来自存储器206的数据库208的元组。

在处理所检索到的元组之后,缓冲池管理模块322B可以将相符元组传输到存储引擎316,其进而可将相符元组向上传播到查询引擎314。查询引擎314还可以将相符元组传输到可以输出相符元组252的请求管理器310。

可选地,如模型300A和300B两者所示,在查询引擎314与存储器管理模块322之间,特别是在页面缓存管理模块322A和/或缓冲池管理模块322B之间,元组处理被拆分。

在这些情况下,查询引擎314可以仅将一部分算子和/或由输入查询250定义的条件向下传播到存储引擎,同时应用由输入查询250定义的未向下传播到存储引擎316的一个或多个其它算子和/或条件。在这种情况下,由存储器管理模块322(例如,页面缓存管理模块322A和/或缓冲池管理模块322B)识别的符合所传播的算子且符合可选的条件的部分元组为进一步被查询引擎314处理的相符元组,所述查询引擎314识别最终相符元组252并将其提供给适于输出所述元组的请求管理器310。

可以由RDBMS 210中的一个或多个模块(例如,查询引擎314、存储引擎316或集成在RDBMS 210中的专用软件模块)来做出向下传播哪些算子和条件到存储器管理模块322以及查询引擎314应用(处理)哪些算子/条件的决定。

在从存储引擎316接收到相符元组并且可选地根据不向下传播的一个或多个算子和/或条件处理所接收的元组之后,查询引擎314可将相符元组252传递到请求管理器310,所述请求管理器310可以响应于查询250来输出相符元组252。

再次参考图1。

如102所示,过程100始于请求管理器310接收针对数据库208的查询250。查询250通常可以使用高级声明性查询语言、SQL等来构造。根据RDBMS 210的类型自然构造查询250。

请求管理器310还可以分配并调度用于执行如本领域中已知的查询250的资源。接着,请求管理器310可将查询250传输到解析器312,所述解析器312可使用正则表达式来解析并分析查询250,例如本领域中已知的SQL查询。

在通过解析器312解析之后,查询引擎314可从查询250中提取一个或多个关系算子和可选的一个或多个条件,每个条件与算子中的相应一个相关联。例如,这些关系算子可以包括可各自与一个或多个条件相关联的选择、投影、聚合、联结等。查询引擎314还可生成查询计划,其由本领域中已知的所提取的关系算子和表的AST组成。

如104所示,查询引擎314可将算子中的一个或多个和其相应条件(若存在)向下传播(传输)到存储引擎316。可选地,查询引擎314同时将多个算子和其相应条件(若存在)传输到存储引擎316。

通常,在传统RDBMS实施方案中,查询引擎314请求存储引擎316从数据库208中检索元组,并且查询引擎314处理所检索的元组以识别符合算子且符合可选的条件的相符元组352。

然而,查询引擎314与存储引擎316之间的API可扩展以包括支持查询语义(即,算子和可选条件)从查询引擎314到存储引擎316的传播(传输)的查询语义API。此外,应用查询语义API以支持符合所传播的算子且符合可选的条件的元组从存储引擎316到查询引擎314的传输。因此,可将查询引擎314和存储引擎316两者都调整为支持查询语义API。

现参考图4,图4呈现根据本发明的一些实施例中用于将示范性查询算子和条件从查询引擎例如查询引擎314传播到存储引擎例如,存储引擎316的示范性查询语义API的示意图。

如402所示,使用查询语义API,查询引擎314可使用添加到传统RDBMS的应用程序编程接口(API)的cond()函数将选择算子的条件传输(传播)到存储引擎316,所述cond()函数通常包括open()、next()和close()函数。因此,在传统RDBMS中,查询引擎可请求存储引擎来提供元组表,并且接着可处理所接收的元组以识别符合选择算子的条件的元组252。相比之下,调整后存储引擎316可以只将符合与选择算子相关联的条件的元组提供给查询引擎314。

如404所示,使用查询语义API,查询引擎314可使用添加到传统RDBMS的API的proj()函数将投影算子的条件传输(传播)到存储引擎316,所述proj()函数通常包括open()、next()和close()函数。因此,在传统RDBMS中,查询引擎可请求存储引擎来提供元组表,并且接着可处理所接收的元组以识别符合投影算子的条件的元组252。相比之下,调整后存储引擎316可以只将符合与投影算子相关联的条件的元组提供给查询引擎314。

如406所示,使用查询语义API,查询引擎314可使用添加到传统RDBMS的API的aggr()函数将聚合算子(例如,最大、最小、平均值等)的条件传输(传播)到存储引擎316,所述aggr()函数通常包括open()、next()和close()函数。因此,在传统RDBMS中,查询引擎可请求存储引擎来提供元组表,并且接着可处理所接收的元组以识别符合聚合算子的条件的元组252。相比之下,调整后存储引擎316可以只将符合与聚合算子相关联的条件的元组提供给查询引擎314。

如408所示,使用查询语义API,查询引擎314可使用添加到传统RDBMS的应用程序编程接口(API)的join_cond()函数将联结算子的条件传输(传播)到存储引擎316,所述join_cond()函数通常包括open()、next()和close()函数。因此,在传统RDBMS中,查询引擎可请求存储引擎来提供元组表,并且接着可处理所接收的元组以识别符合联结算子的条件的元组252。相比之下,调整后存储引擎316可以只将符合与联结算子相关联的条件的元组提供给查询引擎314。

任选地,查询引擎314用于响应于向下传播到存储引擎316的一个或多个其它算子,将查询中所包括的一个或多个算子应用于从存储引擎316接收到的一个或多个元组。这意味着,根据查询的算子和条件对数据库208中的元组的处理可以在查询引擎314与低级软件模块,例如在存储器管理模块322,例如存储器管理模块322A和/或322B之间分割。例如,假设为某一查询250构造的SQL查询包括两个算子,例如,选择算子(具有一个或多个条件)和聚合算子。在这种情况下,查询引擎314可以将选择算子可选地,以及其条件传输到存储引擎316,并且作为回报,接收符合选择算子的一个或多个元组。查询引擎314接着可将聚合算子应用于从存储引擎316接收到的元组,以产生响应,即,相符元组252。

再次参考图1。

如106所示,存储引擎316可将查询语义即,一个或多个算子和其相应条件(若存在)传播到存储器管理模块322,例如,页面缓存管理模块322A或缓冲池管理模块322B。

在存储器管理模块322例如页面缓冲管理模块322A是OS 220固有的情况下,存储引擎316可用于将查询语义传输到存储管理器320,其进而可将查询语义传播到页面缓存管理模块322A。

通常,在传统RDBMS实施方案中,存储引擎316请求OS存储管理器320从存储器206例如,页面、缓冲器等中检索数据,特别是一个或多个数据段。存储引擎316接着可从检索到的数据中提取数据库208的元组。存储引擎316将元组传输到可以处理所述元组以识别相符元组252的查询引擎314。

然而,查询引擎316与存储引擎320之间的OS API可扩展以支持查询语义即,算子和可选条件从存储引擎316到存储管理器320的传播(传输)。此外,应用扩展OS API以支持符合所传播的算子的元组从存储管理器320到存储引擎316的传输。可以将存储引擎316和存储管理器320两者都调整为支持扩展OS API。

例如,假设存储管理器320是VFS,扩展OS API可能包括一个或多个调整后和/或扩展系统调用,以支持查询语义即,算子和其可选条件(若存在)的传播(传输)。

现参考图5,图5是根据本发明的一些实施例中的示范性OS API的示意图,所述OSAPI被扩展以支持查询算子和条件从存储引擎到调整后存储管理器的传播。

通常,部署了诸如存储管理器320的传统存储管理器(例如VFS等)来管理对如存储器206的存储介质的访问,特别用于访问如存储在存储器206中的数据库208的数据库。这种传统存储管理器320可支持包括一个或多个系统调用的OS API,所述系统调用允许高级软件模块例如存储引擎316来访问存储器206并检索存储在数据库208中的元组。

然而,可将调整后存储管理器320调整为支持扩展OS API,所述扩展OS API支持将查询语义即算子和可选条件从存储引擎316向下传播(传输)到存储管理器320。例如,针对访问传统存储管理器320,例如用于从数据库208读取数据的VFS,的OS 220的传统sys_read()系统调用通常可将从存储器206中检索到的数据返回分配用于高级软件模块(例如存储引擎316)的user_buff(用户缓冲器)中。传统sys_read()系统调用可扩展至相应sys_read_ndp()系统调用,以便还包括一个或多个参数,例如ndp_argc、ndp_argv等。所述参数可用于映射一个或多个变元,特别是由查询250定义和/或从查询250提取的算子和可选条件。如此,使用扩展OS API,特别是sys_read_ndp()系统调用,存储引擎316可将参数即一个或多个查询算子和条件传输到存储管理器320。此外,相符元组可返回到为存储引擎316分配的用户缓冲器中的存储引擎316。

可使用一个或多个实施方案在扩展OS API中调整、构造和/或定义sys_read_ndp()系统调用。例如,类似于在C编程语言中所完成的,参数ndp_argc可以指定变元的数量、变元计数等。类似地,参数ndp_argv可以指定变元的指针阵列、变元向量等。下文在示范性代码摘录1中呈现sys_read_ndp()系统调用的这种实施方案。自然,对于本领域技术人员来说,用于调整系统调用的其它实施方案可能是显而易见的。

ssize_t sys_read_ndp(int fd,void*buf,size_t count,char**ndp_argv,ssize_tndp_argc);

类似地,可在扩展OS API中调整、构造和/或定义sys_write_ndp()系统调用。

如上文中所述,存储管理器320进而可将查询语义传播到页面缓存管理模块322A。

现参考图6,图6是根据本发明的一些实施例中的示范性页面缓存管理模块的示意图,所述页面缓存管理模块被调整后存储管理器(VFS等)用于处理从存储介质中检索到的数据库的元组。可将例如页面缓存管理模块322A的示范性页面缓存管理模块调整为处理所加载页面中的元组,以识别符合从诸如VFS存储管理器320A的存储管理器,例如VFS等向下传播的符合算子和条件的元组。存储管理器320可采用扩展页面缓存API将查询语义特别是算子和可选条件)传播到页面缓存管理模块322A。

传统页面缓存管理模块通常用于将数据块尤其是页面从例如存储器206的存储介质加载到高速存储器。调整后页面缓存管理模块322A扩展了传统页面缓存管理模块的功能,因为所述页面缓存管理模块用于处理从数据库208中加载并存储在页面缓存中的一个或多个页面中的元组,以识别符合算子和条件的元组。页面缓存管理模块322A可将一个或多个函数例如,init()、iter()、fini()等用于从存储管理器320接收查询语义并处理加载的页面中的元组。

调整后页面缓存管理模块322A特别是init()、iter()、fini()等函数可以通过动态地加载实施为支持向下推送的关系算子的查询语义处理模块来实现。将查询语义处理模块设计并配置成识别查询语义和其上下文以及页面和元组结构,以便支持对加载的页面的处理,从而搜索符合从查询引擎314一直向下传播到存储引擎316和存储管理器320的算子和可选条件的元组。

由于可以在OS 220的内核模块内实施init()、iter()和fini()函数,因此可以使用OS 220提供的一个或多个函数、特征和/或服务来动态地加载包括调整后函数的查询语义处理模块。例如,在OS 220是Linux的情况下,可以使用“insmod”命令来动态地加载查询语义处理模块,以将模块插入到可选地与“rmmod”命令结合的Linux内核中以便移除模块。在其它示例中,再次假设OS 220是Linux,可以使用eBPF虚拟机来动态地加载查询语义处理模块,以在Linux内核页面缓存中部署查询语义处理模块。

可以将查询语义处理模块动态地加载到数据库系统200,特别是加载到OS 220的内核,同时RDBMS 210也被加载。然而,可以在加载RDBMS 210之前将查询语义处理模块加载到OS 220的内核。

OS 220的页面缓存管理模块因此可以输出函数,模块(包括内核模块)可使用所述函数来例示调整后init()、iter()和fini()函数的实施。

调整后页面缓存管理模块322A可以不受init()、iter()和fini()函数内部执行的代码影响,所述函数包括对加载的页面进行附加处理,以使用一种或多种l类型的计算来搜索相符元组252,而不必局限于与RDBMS 210有关的查询算子。然而,在RDBMS 210的实施方案中,可将init()、iter()和fini()函数设计并用于根据向下推送的查询语义来处理元组。

页面缓存管理模块322A可在访问第一加载页面以读取加载的元组之前发起(调用)init()函数。init()函数可以初始化所需数据结构,以存储查询语义,即算子和可选条件。

页面缓存管理模块322A接着可针对由NDP系统调用所请求的每一页面发起(调用)调整后iter()函数。页面缓存管理模块322A可以在被加载到页面缓存中后对每个页面执行iter()函数,以根据存储的算子和可选的条件处理相应页面中的元组,以便识别符合算子和条件的元组。执行iter()函数时,页面缓存管理模块322A可以将结果即识别的元组存储在缓冲器中,所述缓冲器可以进一步复制到分配给存储引擎316的用户缓冲器中。

在执行最后的iter()函数并因此处理页面缓存中加载的最后一个页面之后,页面缓存管理模块322A可以发起(调用)fini()函数,以释放用于存储查询语义即算子和可选的条件的数据结构。

在存储器管理模块322绕过OS 220的固有存储器管理模块的情况下,例如,在存储引擎316采用直接I/O等的情况下,存储引擎316可以被配置和/或调整为将查询语义传输到缓冲池管理模块322B。在这些情况下,如图7所述,可将API调整和/或扩展为支持查询语义(即,算子和可选条件)从存储引擎316到缓冲池管理模块322B的传播。此外,可应用扩展API以支持符合所传播的算子的元组从缓冲池管理模块322B到存储引擎316的传输。当然,可以将存储引擎316和缓冲池管理模块322B调整为支持扩展API。需注意,在这种情况下,缓冲池管理模块322B与存储管理器320之间的接口相对于传统RDBMS并未改变。

现参考图7,图7是根据本发明的一些实施例中的示范性调整后缓冲池管理模块的示意图,所述调整后缓冲池管理模块被存储引擎用于使用存储管理器(VFS等)处理从存储介质中检索到的数据库的元组。调整后缓冲池管理模块322B可用于支持从存储引擎(例如存储引擎316)传播算子和可选条件。

类似于针对调整后页面缓存管理模块322A所描述的,通常集成了缓冲池管理模块322B的存储引擎316可以使用一个或多个函数(例如,init()、iter()和fini()函数)来接收查询语义并处理从存储介质206中检索到的元组。

缓冲池管理模块322B可以使用OS(例如OS 220)的一个或多个服务,特别是使用存储管理器(例如存储管理器320),访问存储器206并检索数据,特别是检索数据库(例如存储在存储器206中的数据库208)中的元组。

如针对页面缓存管理模块322A所描述的,调整后缓冲池管理模块322B(特别是init()、iter()和fini()函数)可以通过使用由现有工具链(编译器、链接器等)提供的动态加载函数、特征和/或服务来动态加载查询语义处理模块来实现。如针对页面缓存管理模块322A所描述的,查询语义处理模块可以包括init()、iter()和fini()函数和逻辑,以支持将查询语义传输(传播)到低级软件模块,即,缓冲池管理模块322B,并且可选地用于将相符元组传输回存储引擎316并进一步传输到查询引擎314。

再次参考图1。

如108所示,存储器管理模块322(例如,页面缓存管理模块322A和/或缓冲池管理模块322B)可以根据从存储引擎316向下传播的算子以及可选地根据条件处理从数据库208中检索到的元组,并且识别符合所传播的算子且符合可选的条件的元组。

在检索到数据之后,特别是检索到来自存储器206的数据库208的元组后,存储器管理模块322可以根据本领域中已知的所传播的算子和可选的条件来处理所检索到的元组,以识别相符元组252。

例如,在通过页面缓存管理模块322A处理元组的情况下,可以将通常由传统OS使用以将数据页从存储器206加载到高速存储器的页面缓存管理模块322A调整为进一步处理加载的页面中的元组,以识别符合通过存储管理器320从存储引擎316向下传播的算子和条件的元组。

在其它示例中,在通过调整后缓冲池管理模块322B处理元组的情况下,调整后缓冲池管理模块322B可以处理检索到的元组,以识别符合所传播的算子且符合从存储引擎316向下传播的可选的条件的元组。

如110所示,存储器管理模块322可将相符元组(若找到)返回存储引擎316。如此,存储引擎316可以只接收符合算子且符合可选的条件的元组,而不是像现有RDBMS架构那样接收从数据库208中检索到的所有元组,其中通过传统存储器管理模块将所有元组返回到传统存储引擎。

例如,在通过OS固有页面缓存管理模块322A处理元组的情况下,调整后页面缓存管理模块322A可以将相符元组传输到存储管理器320,所述存储管理器320可以应用扩展OSAPI将相符元组传输到存储引擎316,例如,传输到分配给存储引擎316的用户缓冲器。

在其它示例中,在通过直接I/O访问缓冲池管理模块322B处理元组的情况下,通常集成在存储引擎316中的调整后缓冲池管理模块322B可以从内部将相符元组传输到存储引擎316,所述存储引擎316可将所述元组存储在分配给存储引擎316的用户缓冲器中。

如112所示,存储引擎316使用查询语义API将存储器管理模块322所识别的符合向下传播的算子和可选的条件的元组返回到查询引擎314。

如114所示,查询引擎314可以将相符元组252传输到可以输出相符元组252的请求管理器310。

可选地,如前所述,查询引擎314只将从查询250提取的部分算子向下传播到存储管理器。在从存储引擎316接收到符合所传播的算子的元组之后,查询引擎314可以将并未向下传播的一个或多个其它算子应用于返回的元组,以识别相符元组252。

现参考图8A、图8B和图8C,图8A、图8B和图8C呈现根据本发明的一些实施例中将查询算子和条件从查询引擎通过存储引擎传播到调整后存储器管理模块的示范性过程的流程图,将所述存储器管理模块调整为处理从存储介质中检索到的数据库的元组。作为例如过程100的过程的变形,两个示范性过程800A和800B可以有如数据库系统200的数据库系统执行。具体而言,过程800A和800B由数据库系统200执行,所述数据库系统200执行如RDBMS210的调整后RDBMS,以管理存储在如存储介质206的存储介质中的关系型数据库,例如数据库208。RDBMS 210包括查询引擎,例如查询314,将所述查询引擎调整为将查询语义(即,算子和可选的条件)传播到采用一个或多个存储器管理模块的存储引擎(例如存储引擎316),将所述存储器管理模块调整为将所传播的算子和可选的条件应用于从数据库208中检索到的元组,以便识别相符元组并使用这些相符元组来响应存储引擎。

过程800A可由RDBMS 210执行,所述RDBMS 210包括存储引擎(例如存储引擎316),所述存储引擎利用调整后存储管理器,例如OS(例如OS 220)的存储管理器320,如VFS存储管理器,其使用OS 220固有的调整后存储器管理模块,特别是被调整为通过访问存储介质206来处理从数据库208中检索到的元组的页面缓存管理模块,例如页面缓存管理模块322A。

过程800B可通过RDBMS 210来执行,所述RDBMS 210包括存储引擎316,所述存储引擎316集成了如缓冲池管理模块322B的存储器管理模块,将所述存储器管理模块调整为使用存储管理器320处理从数据库208中检索到的元组,以访问存储介质206。

如前所述,过程800A和800B的大多数步骤都是相似的。通过查询引擎314和存储引擎316执行步骤802和830,所述查询引擎314和存储引擎316与RDBMS 210的两个实施方案中的相同并且因此与过程800A和800B中相似。在第一实施方案中(即在过程800A中)的下级中,存储引擎316将查询语义传输到存储管理器320,而在第二实施方案中(即在过程800B中),存储引擎316(从内部)将查询语义传输到通常集成在存储引擎316中的缓冲池管理模块322B。因此,相应步骤832A和832B中的语法是不同的,以符合相应软件模块。

另外,由于过程800A中应用的页面缓存存储器管理模块322A是处理元组并且还访问存储介质206的软件模块,因此页面缓存存储器管理模块322A从存储介质208中检索页面,如步骤842A中所述。这不同于过程800B,在过程800B中,缓冲池管理模块322A在存储管理器320检索到元组之后对所述元组进行处理。因此,如步骤842B中所述,缓冲池管理模块322A使用存储管理器320检索页面。

如802所示,过程800A和800B从请求管理器(例如请求管理器310)接收例如查询250的查询开始,如过程100的步骤102所述。请求管理器310还可以分配并调度用于处理查询250的资源。

如804所示,使用正则表达式,解析器(例如解析器312)可以解析本领域中已知的所接收的查询250,以识别查询250所定义的查询元素。

如806所示,查询引擎314可针对从解析器312识别的从查询元素中提取的一个或多个算子产生查询计划,如过程100的步骤102所述。查询引擎314还可使一个或多个算子与进一步从查询元素中提取的一个或多个条件(若存在)相关联。

如808所示,查询引擎314根据查询计划指示处理数据库208中的元组,将所述查询计划定义为抽象语法树(AST),所述抽象语法树包括分别可为本领域中已知的关系算子或表访问的多个节点。每个节点使用同一API(即打开、下一个、关闭)与其子节点通信。AST中的调用的传播从顶部算子(根)开始,所述算子接收调用并递归地进行传播。为了清楚起见,不显示初始的open()调用和结束的close()调用。next()调用指示下一个算子用下一个元组进行回复。如此,AST的根(即第一算子)调用其子级的next()API函数,以返回所述子级的第一元组。这通过AST的每个分支递归地完成,直到到达作为表访问的子节点,即需要访问数据库208的元组。

如条件步骤810所示,在AST中的(目前所处理的)节点是关系算子(即查询引擎调用)的情况下,过程800A/800B分支到812。在下一个节点并非关系算子(即,是由存储引擎316所处理的表访问)的情况下,需要调用存储引擎316,并且过程800A/800B分支到814。通常,AST的顶层是算子,而只有底层是表访问。因此,实际上基本只有底部关系算子需要从数据库208中读取元组,而剩余的算子取决于查询计划可以从低级关系算子的next()函数中读取元组。因此,在AST中的下一个节点是关系算子的情况下,过程分支到812,而在AST中的下一个节点是表访问的情况下,需要调用存储引擎316,并且过程分支到814。

如812所示,由于当前节点是算子,因此可以从下一个低级算子中检索将根据当前算子处理的元组,并且过程分支回到810以继续向下传播AST。

如814所示,查询引擎314已完成向下传播AST,并且因此已找到表访问,在这种情况下,控件过渡到存储引擎316以用于检索数据库表的下一个元组。存储引擎开始于探寻存储引擎316中的下一个表;换句话说,判断是否仍有符合所传播的算子且符合可选的条件的元组要从表中读取,以及表的下一个元组是否已经驻留在存储引擎316中。

如条件步骤816所示,在数据库208中(特别是在数据库208的相应表中)不再有要处理的且符合所传播的算子和条件的元组的情况下,过程800A/800B分支到步骤818。在数据库208的相应表中可能存在附加元组的情况下,过程800A/800B分支到步骤820。

如818所示,数据库中不再有符合所传播的算子和条件的元组,因此存储引擎316返回空元组。

如条件步骤820所示,检查元组命中以确定存储引擎314中是否有符合所传播的算子和条件的下一个可用元组。在下一个元组在存储引擎314中可用的情况下,过程800A/800B分支到步骤822。例如,假设先前已检索到页面集,响应于向下传播的算子和条件,从相应存储器管理模块中(即针对过程800A从页面缓存管理模块322A或针对过程800B从缓冲池管理模块322B中)接收到符合算子且符合可选的条件的一个或多个元组。在下一个元组在存储引擎314中不可用的情况下,过程800A/800B分支到步骤828。

如822所示,符合所传播的算子和条件的下一个元组在存储引擎314中可用。因此,存储引擎314仅将下一个元组返回到查询引擎314。

如条件步骤824所示,查询引擎314检查从存储引擎314返回的元组是否为空元组。在这种情况下,过程800A/800B分支到步骤826。在下一个元组并非空元组,因此至少存在其它元组符合算子且符合可选的条件的情况下,过程800A/800B分支到步骤828。

如826所示,空元组可能表示不存在待处理的元组。因此,查询引擎314可以返回包括元组的结果表,所述元组符合向下传播的算子和可选的条件并且符合由查询引擎314处理的算子和可选的条件。这个步骤表示查询引擎314已完成所有元组的处理。因此,查询的整个处理已完成,并且可以返回结果表作为查询的回复。

如步骤828所示,在元组不为空的情况下,通过向后应用查询引擎314的算子(即展开递归)来生成结果元组,以便最终生成符合查询的所有算子和条件的元组。应注意,在查询引擎中应用算子仅仅是指未向下传播的算子。非空元组已符合向下传播的算子和可选的条件。

如前所述,在查询的初始处理期间,RDBMS 210的一个或多个软件模块(例如查询引擎314)可以决定(选择)哪个算子和可选的哪个条件将向下传播并且将由存储器管理模块322应用,以及哪个算子和可选的哪个条件将由查询引擎314本身应用。因此,步骤812处的算子(next())仅针对选定以由查询引擎314应用的算子而调用并开始查询引擎314中的递归。此外,可以在生成查询计划之后将仅被选定以由存储器管理模块322应用的算子和可选的条件向下传播一次到存储引擎,并且因此假设已针对对存储引擎316的后续调用中的每一个向下传播(对于同一查询)。

如步骤830所示,将所生成的元组添加到结果表。过程800A/800B可以分支回到步骤808以再次重复整个过程。换句话说,将前述算子集应用于数据库208的下一个元组,特别是应用于从数据库208加载的元组表。

过程800A/800B接着分支回到步骤808,其中查询引擎314的根算子再次针对下一个元组发起整个过程。

如作为过程800A的一部分的832A所示,在下一个元组在存储引擎316中不可用的情况下,使用添加的系统调用sys_read_ndp(),存储引擎316将查询语义(即从查询引擎314中接收到的算子和可选的条件)传输到存储管理器320,例如VFS层。存储管理器320进而将查询语义传输到存储管理器320所使用的页面缓存管理模块322A,以访问存储介质206,特别是数据库208。如先前步骤828所述,被选定以由页面缓存管理模块322A应用并处理的算子和可选的条件可以在对页面缓存管理模块322A的第一调用期间仅向下传播一次,并且因此不应再次向下传播以用于对页面缓存管理模块322A的后续访问(对于同一查询)。

如作为过程800B的一部分的832B所示,在下一个元组在存储引擎中不可用的情况下,存储引擎316将查询语义(即从查询引擎314中接收到的算子和可选条件)传输到缓冲池管理模块322B。然而,由于通常缓冲池管理模块322B是存储引擎316的一部分,查询语义的这种传输通常可以是在存储引擎316内执行的内部操作,例如函数init()、iter()和fini()。

类似于步骤832A中针对页面缓存管理模块322A所述,可以在生成查询计划之后将被选定以由缓冲池管理模块322B应用并处理的算子和可选条件仅向下传播一次到存储引擎,并且因此不再向下传播以用于对存储引擎316的后续访问(对于同一查询)。

如834所示,存储器管理模块322(过程800A中的页面缓存管理模块322A或过程800B中的缓冲池管理模块322B)探寻数据库208的数据的下一个页面,特别是包括相应表的数据的页面。

如条件步骤836所示,在将数据库208的所有页面(特别是包括相应表的数据的页面)加载到存储器并进行处理的情况下,过程800A/800B分支到步骤836。在存在附加页面(其包括未加载到存储器的相应表的数据)的情况下,过程800A分支到步骤838。

如838所示,在存储器管理模块322(即页面缓存管理模块322A或缓冲池管理模块322B)完成对从数据库208加载相应表的所有元组的处理之后,存储器管理模块322可以将存储在分配给存储器管理模块322的系统缓冲器中的相符元组复制到分配给存储引擎316的用户缓冲器。过程800A/800B接着可分支回步骤820,以将控件传输到查询引擎314,所述查询引擎314可以发起对下一个元组的处理。

如条件步骤840所示,在页面命中的情况下,即包括下一个元组的下一个页面在页面缓存中可用(加载)的情况下,过程800A/800B分支到步骤846。在无页面命中的情况下,即,包括下一个元组的下一个页面在加载的页面中不可用的情况下,过程800A和800B分别分支到步骤842A和842B。

如作为过程800A的一部分的842A所示,页面缓存管理模块322A从存储器206中检索下一个页面。

如作为过程800B的一部分的842B所示,缓冲池管理模块322B使用存储管理器320(例如VFS)从存储器206中检索下一个页面。

如844所示,分别将从存储器206中检索到的页面插入(加载)到页面缓存或缓冲池中。

如846所示,页面缓存管理模块322A或缓冲池管理模块322B分别从页面缓存或缓冲池获取下一个页面。

如848所示,页面缓存管理模块322A或缓冲池管理模块322B对当前处理的页面中的所有元组进行处理,以识别符合从存储管理器320中接收到的算子和可选的条件的元组。

如850所示,页面缓存管理模块322A或缓冲池管理模块322B将从所处理的页面中识别的相符元组复制到分配给存储器管理模块322(特别是页面缓存管理模块322A或缓冲池管理模块322B)的系统缓冲器。

过程800A和800B自然是迭代过程,其可继续处理从数据库208中检索到的所有元组。

在根据本申请案而成熟的专利中,将开发许多相关系统、方法和计算机程序,并且术语查询语义和查询算子的范围旨在包括所有此类先验的新技术。

如本文中所使用,术语“约”是指±10%。

术语“包括”、“包含”、“具有”以及其变形表示“包括但不限于”。

术语“由…构成”表示“包括且限于”。

除非上下文另有清晰指示,否则本文所使用的单数形式“一”和“所述”包括复数指代物。例如,术语“化合物”或“至少一个化合物”可以包括多个化合物,包括其混合物。

本申请中,本发明的各种实施例可以以范围格式呈现。应理解,范围格式中的描述仅仅是为了方便和简洁起见,并且不应理解为对本发明的范围的固定限制。因此,范围的描述应被认为是已经确切地公开了所有可能的子范围以及所述范围内的单个数字值。例如,对例如从1到6的范围的描述应被认为是已经具体地公开子范围,例如从1到3、从1到4、从1到5、从2到4、从2到6、从3到6等,以及所述范围内的个别数字,例如1、2、3、4、5和6。不管范围的宽度如何,这都适用。

本文中每当指示数字范围时,其意味着包括所指示范围内的任何引用数字(分数或整数)。短语“在第一指示数字与第二指示数字之间的范围变化/范围”以及“从第一指示数字到第二指示数字的范围变化/范围”在本文中互换使用并且旨在包括第一指示数字和第二指示数字以及其间的所有分数和整数数字。

应了解,为了清楚起见而在单独的实施例的上下文中描述的本发明的某些特征还可以单个实施例中组合提供。相反,本发明出于简洁的目的在单个实施例的上下文中描述的各个特征还可以单独地或以任何合适的子组合或如在本发明的任何其它所述的实施例中适当地提供。在各种实施例的上下文中描述的某些特征不应被认为是那些实施例的基本特征,除非所述实施例在不具有那些元件的情况下不起作用。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号