一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

将数据存储桶化到存储桶中以供代码模块处理的制作方法

2021-10-29 19:23:00 来源:中国专利 TAG:专利申请 美国 所述 以供 数据存储

将数据存储桶化到存储桶中以供代码模块处理
1.相关申请的交叉引用
2.本技术要求于2019年1月18日提交的申请号为16/251,760的美国专利申请的优先权,所述美国专利申请的标题为“将数据存储桶化到存储桶中以供代码模块处理(bucketizing data into buckets for processing by code modules)”,所述美国专利申请的全部内容以引用的方式并入本文中。


背景技术:

3.关系数据库将数据存储在被结构化为行和列的关系表中。为了访问存储在关系数据库的表格中的数据,可以将数据库查询提交到数据库管理系统(database management system,dbms),所述dbms处理数据库查询以访问这些表格。表格访问可以包括从表格读取数据和/或将数据写入到表格,其中写入数据可以包括添加数据、删除数据或修改数据。处理对大型数据库的查询可能会消耗大量的处理资源,并且可能会耗费相对较长的时间。


技术实现要素:

4.根据本公开的各方面,为了减少执行数据库管理系统(dbms)的主机处理器的处理资源,可以执行存储在存储器中的数据项目的存储桶化。存储桶化会产生数据项目的存储桶。每个存储桶包括共享共同特性的数据项目,其中共享共同特性可以指仅共享一个共同特性或共享多个共同特性。接着将数据项目的存储桶发送到执行dbms的主机处理器,所述主机处理器能够使用用于存储桶的共同特性的相应专用代码模块处理数据项目的每个存储桶。在一些示例中,专用代码模块包括即时(just

in

time,jit)编译代码。
5.根据本公开的一方面,提供一种控制器,包括存储桶化逻辑。存储桶化逻辑用于:响应于存储桶化指示而从主机处理器接收存储桶化指示;将存储在存储设备的存储器中的数据分区到存储桶中,其中存储桶中的第一存储桶包括共享第一共同特性的数据项目;以及将第一存储桶的数据项目发送到主机处理器以供主机处理器使用用于第一存储桶的第一共同特性的第一代码模块进行处理。
6.在前述方面中的任一方面中,存储桶中的第二存储桶包括共享第二共同特性的数据项目,并且存储桶化逻辑用于将第二存储桶的数据项目发送到主机处理器以供主机处理器使用用于第二存储器的第二共同特性的第二代码模块进行处理。
7.在前述方面中的任一方面中,存储桶化指示包括存储桶条件,并且存储桶化用于响应于确定相应数据项目的特性相对于存储桶条件的关系而将相应数据项目分配到第一存储桶。
8.在前述方面中的任一方面中,存储桶条件指定包括具有空值的字段的数据项目属于第一存储桶。
9.在前述方面中的任一方面中,存储桶条件指定包括具有规则长度的字段的数据项目属于第一存储桶。
10.在前述方面中的任一方面中,存储桶条件指定包括具有相同常数值的字段的数据
项目属于第一存储桶。
11.在前述方面中的任一方面中,存储桶条件指定包括具有与指定长度阈值具有指定关系的长度的字段的数据项目属于第一存储桶。
12.在前述方面中的任一方面中,控制器是存储设备的一部分。
13.在前述方面中的任一方面中,控制器是存储设备与主机处理器之间的计算设备的一部分。
14.在前述方面中的任一方面中,控制器进一步包括过滤逻辑,所述过滤逻辑用于从主机处理器接收过滤指示,并对存储器中的数据进行过滤以选择存储器中的数据的子集,并且存储桶化逻辑用于在数据的子集中标识属于第一存储桶的数据项目。
15.在前述方面中的任一方面中,存储桶化逻辑用于在将第一存储桶的数据项目发送到主机处理器之前重新放置第一存储桶中的数据项目,以改进主机处理器的存储器访问局部性。
16.根据本公开的另一方面,提供一种非瞬时性机器可读存储介质,包括指令,所述指令在执行时使得包括一个或多个处理器的控制器将存储桶化指示发送到存储设备以将存储在存储器子系统的存储器中的数据项目分区到多个存储桶中,其中多个存储桶中的每个相应存储桶中的数据项目共享对应共同特性。指令还使得得控制器从存储设备接收响应于存储桶化指示而产生的数据项目的多个存储桶,并执行代码模块以处理多个存储桶中的相应存储桶中的数据项目,每个代码模块用于相应存储桶的对应共同特性。
17.在前述方面中的任一方面中,指令还使得控制器使用与数据库查询有关的信息和在运动时间可用的数据的信息在运行时间生成代码模块。
18.在前述方面中的任一方面中,指令在执行时使得主机处理器接收数据库查询以访问包括存储在存储设备中的数据的数据库,且基于数据库查询而确定多个存储桶,并响应于数据库查询而在运行时间生成代码模块。
19.在前述方面中的任一方面中,将存储桶化指示发送到存储设备包括将存储桶条件发送到存储设备,存储桶条件中的每个相应存储桶条件指定多个存储桶中的相应存储桶的对应共同特性。
20.在前述方面中的任一方面中,指令在执行时使得主机处理器从存储设备接收第一存储桶的数据项目的第一部分,同时存储设备将数据项目的第二部分分配到第一存储桶。
21.在前述方面中的任一方面中,指令在执行时使得主机处理器将过滤指示发送到存储设备以使得存储设备对存储器中的数据进行过滤以选择存储器中的数据的子集,并通过划分数据的子集而将存储在存储器中的数据分区到多个存储桶中。
22.根据本公开的另一方面,提供一种方法,其包括由主机处理器将存储桶化指示发送到存储设备,所述存储桶化指示包括用于使得存储设备确定存储在存储设备的存储器中的哪些数据属于存储桶的存储桶条件,其中存储桶中的数据项目共享对应共同特性。方法进一步包括:由主机处理器从存储设备接收响应于存储桶化指示而产生的存储桶的数据项目;以及执行代码模块以处理存储桶中的数据项目,代码模块用于存储桶的共同特性。
23.在前述方面中的任一方面中,方法进一步包括使用即时编译来编译代码文件以产生包括机器代码的代码模块。
24.在前述方面中的任一方面中,其中存储桶化指示包括用于使得存储设备确定存储
在存储器中的哪些数据属于另一存储桶的另一存储桶条件。
25.在前述方面中的任一方面中,方法进一步包括:由主机处理器从存储设备接收响应于存储桶化指示而产生的另一存储桶的数据项目;以及执行另一代码模块以处理另一存储桶中的数据项目,另一代码模块用于另一存储桶的另一共同特性。
附图说明
26.根据以下各图描述本公开的一些实施方案。
27.图1a和图1b是根据本公开的一些实施方案的运行与存储数据库的数据的存储设备交互的数据库管理系统的主机处理器的框图。
28.图2说明根据本公开的一些实施方案的对数据库表的行进行存储桶化的示例。
29.图3是根据本公开的一些实施方案的数据库查询处理的流程图。
30.图4说明根据本公开的一些实施方案的由控制器执行的过滤和存储桶化。
31.图5说明根据本公开的一些实施方案的使用专用代码模块的存储桶处理。
32.图6是根据本公开的一些实施方案的处理管道的框图,所述处理管道涉及在存储设备处对数据进行过滤和存储桶化、将数据的存储桶传输到处理资源并在处理资源处处理存储桶。
33.图7说明根据本公开的其它实施方案的重新放置存储桶的行的数据字段。
34.图8是根据本公开的其它实施方案的系统的框图。
35.在所有附图中,相同的附图标记指定类似但不一定相同的元件。各图不一定按比例绘制,并且一些部分的大小可能被放大以更清晰地示出所说明的示例。此外,附图提供与描述一致的示例和/或实施方案;然而,所述描述不限于附图中所提供的示例和/或实施方案。
具体实施方式
36.在本公开中,除非上下文另外明确指示,否则术语“一(a/an)”或“所述”的使用也意图包括复数形式。此外,当在本公开中使用时,术语“包括(includes/including)”、“包括(comprises/comprising)”、“具有(have/having)”指定所陈述的元件的存在,但是不排除存在或添加其它元件。
37.在一些示例中,数据库的数据可以存储在持久存储数据的存储设备中,例如固态驱动器(solid

state drive,ssd)。ssd是指使用集成电路存储器来持久存储数据的存储设备。ssd可以包括闪速存储器或任何其它类型的非易失性存储器,当从非易失性存储器断电时,它可以保留数据。
38.ssd可以包括能够执行各种任务的嵌入式控制器,所述任务包括以下各项中的任一或某一组合:超速缓存数据、加密或解密数据、应用数据的纠错检错、遍及存储器的存储区域执行数据的耗损均衡以防止一些存储器区域比其它区域更快地耗损(这可以在闪速存储器、相变存储器等中发生)和/或其它任务。
39.由于包括在ssd中的嵌入式控制器变得更强大,故与处理数据库查询以访问存储在ssd中的数据库的数据项目相关的某些计算可以由运行数据库管理系统(dbms)的主机处理器分流到ssd中的多个嵌入式控制器。主机处理器可以包括一个处理器或多个处理器。处
理器可以包括微处理器、多核微处理器的核、微控制器、可编程集成电路、可编程门阵列、数字信号处理器或另一硬件处理电路。
40.可以从主机处理器分流到包括在ssd中的嵌入式控制器的计算的示例包括数据过滤,所述数据过滤处理存储在表中的数据以确定所述数据是否与特定数据库查询相关(即,所述数据是否满足数据库查询中的被称作谓词的条件)。如果数据的数据段与数据库查询不相关,则过滤将从ssd发送到主机处理器的数据中排除所述数据段。换句话说,通过在ssd处过滤数据,仅将与数据库查询相关的数据段发送到主机处理器,这通过减少由主机处理器理的数据量来提高主机处理器的效率。
41.尽管在ssd处执行的过滤可以减少主机处理器要处理的数据量,但是主机处理器要处理的数据量仍然可能相对较大。例如,对于包括具有数百万行数据的表的数据库,在过滤之后剩下的数据行的数目可仍相当大。因此,如果主机处理器具有不足以分配处理过滤后的数据行的处理资源的量,则处理过滤后的数据行可能耗费较长的时间段。分配到给定进程的主机处理器的“处理资源”可以指分配到给定进程的主机处理器的一部分(例如,多核处理器的处理核),或者分配到给定进程的主机处理器的持续时间。可替换地,可能必须分配具有较大量的处理资源的主机处理器来处理过滤后的行,这可能会导致组件成本增加或可能会导致较少的主机处理资源无法用于其它计算任务。
42.根据本公开的一些实施方案,可以将存储在数据库表中的数据的存储桶化分流到ssd(或更一般来说,分流到存储设备)。如本文所使用,“存储设备”可以指持久存储数据并包括一个或多个非易失性存储器设备和嵌入式控制器的任何设备。尽管参考存储设备是ssd的示例,但是应注意,在其它示例中,存储设备可以包括基于磁盘的存储设备,所述基于磁盘的存储设备包括嵌入式控制器和呈存储磁盘的形式的非易失性存储器设备。存储设备可以包括在外壳中,所述外壳含有一个或多个非易失性存储器设备和嵌入式控制器、其上安装有一个或多个非易失性存储器设备和嵌入式控制器的电路板等。
43.如本文中所提及,存储桶化是将存储在数据库中的数据分区到存储桶中的动作,其中存储桶包括共享一个或多个特性的数据项目的集合。在一些实施例中,将数据项目的集合存储在顺序存储器的同一个区域中。数据项目是指数据库的数据的行或其它块。每个存储桶包括共享一个或多个共同特性的数据项目。将包括在存储桶中的数据项目发送到主机处理器以供主机处理器使用用于对应存储桶的相应共同特性的对应专用代码模块进行处理。在本公开的一些示例中,专用代码模块是即时(jit)编译代码模块。
44.jit编译是指在运行时间编译程序代码文件(其可以包括源代码或字节码)以产生机器可执行代码。源代码是指以给定编程语言编写的程序代码。也被称作虚拟机代码的字节码是通过编译源代码(例如,面向对象的编程源代码)以使用字节码编译在虚拟机上运行而产生的。字节码可以由虚拟机执行以执行字节码中指定的任务。通过使用jit编译器将字节码编译为机器可执行代码,主机处理器可以更有效地且更高速地执行机器可执行代码。
45.jit编译器对程序代码文件的jit编译可以充分利用在运行时间可用的信息来产生机器可执行代码,所述机器可执行代码更适合于具有在运行时间可用的信息指示的特性的数据。例如,在包括dbms的数据库引擎的运行时间,数据库查询的查询计划、数据库查询中涉及的表的模式以及与表相关的统计信息(例如,行的数目、具有例如空值或常数值的特定值的行的数目等)是可用的。具有特定值的字段(也被称作属性或列)是可以由表的多行
共享的共同特性的示例。因此,使用在运行时间可用的表的统计信息,数据库引擎可以确定请求存储桶化,所述存储桶化生成包括表行的存储桶,每个表行具有特定值的字段。主机处理器还可以执行数据库查询的程序代码文件的jit编译以产生专用代码模块(包括机器可执行代码),所述专用代码模块适合于以更高效的方式处理具有特定值的字段的行。
46.在其它示例中,表行可以共享其它共同特性,如下文进一步所论述。
47.在运行时间可用的可用于数据库查询的模式和查询计划还可以用于配置专用代码模块以更有效地处理相应存储桶的数据项目。模式限定表的字段。查询计划包括要执行以产生数据库查询的结果的任务序列。基于包括在查询计划中的任务序列,数据库引擎可以确定查询计划的任务涉及基于表的给定字段的计算(如由相应模式所限定)。对于所述任务,数据库引擎可以确定用于处理包括被分配特定值的给定字段的行的专用jit编译代码模块可以提高效率,在此情况下,数据库引擎可以使得创建包括具有被分配特定值的给定字段的行的存储桶,且可以使得对数据库查询进行jit编译以生成专用jit编译代码模块来处理存储桶的行中的数据项目。
48.在其它示例中,代替使用jit编译代码模块,可以使用其它类型的专用代码模块来处理相应存储桶的数据项目。此类其它专用代码模块的示例包括存储的过程、解释的字节码等。
49.图1a是包括通过链路104(例如,数据总线)耦合到存储设备106的主机处理器102的示例配置的框图。链路104可以包括主机处理器102与存储设备106之间的网络或专用信道。主机处理器102包括通过链路104通信的接口103,并且存储设备106包括通过链路104通信的接口105。“接口”可以包括用于发送和接收数据的收发器。
50.存储设备106的示例包括ssd。尽管主机处理器102被展示为耦合到仅一个存储设备106,但是应注意,在其它示例中,主机处理器102可以耦合到多个存储器子系统(例如,多个ssd)。
51.主机处理器102包括从客户端设备112接收例如数据库查询110的数据库查询的数据库引擎108(其包括dbms)。在一些示例中,数据库查询可以是结构化查询语言(structured query language,sql)查询。客户端设备112可以是台式计算机、笔记本电脑、平板电脑、智能手机、服务器计算机或能够将数据库查询提交到主机处理器102以访问存储在存储设备106中的数据库的任何其它电子设备。尽管在图1a中仅描绘一个客户端设备112,但是应注意,在其它示例中,可以将多个客户端112连接到主机处理器102。
52.如本文所使用,“引擎”可以指硬件处理电路,其可以包括微处理器、多核微处理器的核、微控制器、可编程集成电路、可编程门阵列、数字信号处理器或另一硬件处理电路中的任一或某一组合。可替换地,“引擎”可以指硬件处理电路和可在硬件处理电路上执行的机器可读指令(软件和/或固件)的组合。
53.数据库引擎108用于处理数据库查询以访问存储在存储设备106中的数据库。
54.存储设备106包括非易失性存储器114,所述非易失性存储器可以使用一个或多个非易失性存储器设备来实施。非易失性存储器设备的示例可以包括以下各项中的任一或某一组合:闪速存储器设备、相变存储器设备或任何其它类型的非易失性存储器设备。如果从非易失性存储器设备断电,则非易失性存储器设备能够保留存储在非易失性存储器设备中的数据。
55.非易失性存储器114存储数据库表116。在有多个存储设备116耦合到主机处理器102的示例中,数据库表可以遍及存储设备分布。
56.存储设备106还包括嵌入式控制器118。“嵌入式”控制器是指作为存储设备106的一部分的控制器。如本文所使用,“控制器”可以指硬件处理电路,或硬件处理电路和可在硬件处理电路上执行的机器可读指令的组合。
57.嵌入式控制器118包括用于生成共享相应共同特性的存储桶的存储桶化逻辑120,以及用于过滤存储在表116中的数据的过滤逻辑122。“逻辑”可以指嵌入式控制器118的硬件处理电路的一部分,或者可替换地,可以指可由嵌入式控制器118执行的机器可读指令。
58.在替代示例实施例中,如图1b所示,代替在存储设备106的嵌入式控制器150中包括存储桶化逻辑120和/或过滤逻辑122,在耦合于主机处理器102与存储设备106之间的外部控制器124(在存储设备106外部)中包括存储桶化逻辑120和/或过滤逻辑122。例如,外部控制器124可以包括在计算设备中,例如专用集成电路(application specific integrated circuit,asic)设备、电路板等。外部控制器124包括与存储设备106的接口105通信的接口152和与主机处理器102的接口103通信的接口154。
59.在另一示例实施例中,存储桶化逻辑120在数据库引擎108中实施。
60.存储桶化逻辑120产生存储桶121,这些存储桶存储在临时存储器119中(在图1a的嵌入式控制器118或图1b的外部控制器124中),并被提供给主机处理器120以供数据库引擎108处理。临时存储器119可以是临时存储包括在存储桶121中的要传输到数据库引擎108的数据项目的易失性存储器或虚拟存储器。临时存储器119可以包括使用一个或多个动态随机存取存储器(dynamic random access memory,dram)设备、静态随机存取存储器(static random access memory,sram)设备等中的任一或某一组合来实施的存储器。
61.在一些示例中,随着生成存储桶121,控制器118或124可以使用基于推送的实施方案以将存储桶121的数据项目推送到数据库引擎108。通过基于推送的实施方案,可以将包括在存储桶121中的数据项目传输到数据库引擎108,而数据库引擎108无需首先请求包括在存储桶121中的数据项目。在其它示例中,数据库引擎108可以使用基于拉取的实施方案以通过将针对特定存储桶121的读取请求提交给存储设备106来检索包括在存储桶121中的数据项目。
62.数据库引擎108包括计算分流控制逻辑126,其可以被实施为数据库引擎108的硬件处理电路或被实施为可由数据库引擎108执行的机器可读指令。在其它示例中,计算分流控制逻辑126与数据库引擎108分离。
63.对于接收到的数据库查询110,计算分流控制逻辑126确定是否要生成一个或多个存储桶121。如果是,则计算分流控制逻辑126通过将存储桶化指示127发送到存储设备106的嵌入式控制器118(或外部控制器124)以将存储桶化分流到嵌入式控制器118(或外部控制器124)而请求存储桶化的分流。响应于接收到存储桶化指示127,存储桶化逻辑120生成一个或多个存储桶。在不同的示例中,计算分流控制逻辑126可以确定生成零存储桶,在此情况下,计算分流控制逻辑126不将存储桶化指示发送到嵌入式控制器118,并且不执行存储桶化。
64.此外,对于接收到的数据库查询110,计算分流控制逻辑126确定是否要将过滤分流到嵌入式控制器118(或外部控制器124)。如果是,则计算分流控制逻辑126将过滤指示
129发送到嵌入式控制器118以使得过滤逻辑122对从表116检索的数据进行过滤。
[0065]“指示”可以指一个或多个指令、一个或多个命令、一个或多个信息元素,或指示将由接收指示的控制器执行相应计算(存储桶化和/或过滤)的任何其它类型的指示。
[0066]
在根据本公开的一些示例中,可以在行级别处执行由控制器118或124执行的过滤和存储桶化两者。换句话说,过滤确定是否将进一步处理表的每个相应行,并且存储桶化将行放置到相应存储桶中。在其它示例中,可以在其它粒度级别(例如,数据的页、列或其它块)处执行过滤和/或存储桶化。应注意,如果控制器118或124已经在表中执行数据的过滤,则还对表中的数据执行存储桶化可能不会显著地增加与存储桶化相关的计算成本。
[0067]
假设计算分流控制逻辑126确定要生成一个或多个存储桶,则计算分流控制逻辑126可以将使jit编译器130生成相应的一个或多个jit编译代码模块128以用于处理包括在相应的一个或多个存储桶121中的数据项目的请求发送到jit编译器130。jit编译器130的示例包括来自llvm编译器基础设施的jit编译器。可以在其它示例中使用jit编译器的其它示例。
[0068]
可以由存储桶的数据项目共享的特性的示例可以包括以下各项中的任一或某一组合:数据字段为空值或不为空值;数据字段具有规则长度(例如,数据字段的长度为常数(例如字大小)的倍数,或数据字段的长度是固定的(例如,数据字段的长度为x,其中x是固定值));数据字段的长度与阈值具有指定的关系(例如,小于或大于阈值);数据字段的值是固定的(例如,性别字段等于男性或女性,出生年份等于特定年份等);以及其它特性。
[0069]
以下特性的任一或某一组合可以用于确定存储桶。
[0070]
可以基于与数据库查询110有关的信息来生成jit编译代码模块128以用于处理包括在相应的一个或多个存储桶121中的数据项目。与数据库查询110有关的信息可以包括如数据库查询110中所指定要执行的计算129的信息,或由数据库引擎108的查询优化器针对数据库查询110所生成的查询计划。例如,数据库查询110或查询计划可以指定某个计算,例如sum(t1.a),其是对表t1的字段a的值进行求和的计算。假设要生成的存储桶包括其中t1.a的值是共享固定值的行,则由jit编译器130为此存储桶生成的jit编译代码模块128可以仅通过将存储桶中的行的数目乘以共享固定值来计算存储桶中的行的t1.a的总和,甚至不必读取存储桶的个别行。
[0071]
图2示出数据库的示例数据库表200。数据库表200具有四行202

1、202

2、202

3和202

4。仅以四行示出数据库表200以提供简单的示例。然而,典型的数据库表可能包括大量的行(例如,数千、数百万或数十亿行)。
[0072]
在示例表数据库200中,每行具有三个字段(也被称作属性或列)。姓名字段被分配指示人的姓名的值,出生年份字段被分配指示人的出生年份的值,并且死亡年份字段被分配指示人的死亡年份(在适用的情况下)的值。应注意,如果人还活着,则死亡年份字段将被分配空值。
[0073]
对数据库表200执行的存储桶化可以产生以下示例存储桶。应注意,对给定数据库查询的处理可以仅创建图2中所示的一些(一个或多个)存储桶。
[0074]
第一存储桶121

1包括具有被设置为空值的数据字段(死亡年份)的行(202

2和202

4)。被生成用于处理包括在存储桶121

1中的数据项目的第一jit编译代码模块128可以跳过空值检查,所述空值检查涉及检查死亡年份字段是否具有空值。第一jit编译代码模
块128可以假设死亡年份字段被设置为空值且可以跳过空值检查以减少处理开销。跳过空值检查会减少执行的指令的数目,且还可能会减少控制流操作的数目。跳过空值检查还可以增加当生成第一jit编译代码模块128时可以由jit编译器130执行的编译器优化的范围。
[0075]
第二存储桶121

2包括其中死亡年份字段不为空值的行(202

1和202

3)。专用于存储桶121

2的第二jit编译代码模块128也可以跳过空值检查,因为已知的是存储桶121

2的行的死亡年份字段不包括空值。
[0076]
第三存储桶121

3包括其中出生年份字段具有共享固定值(例如1940)的行(202

1和202

2)。专用于存储桶121

3的第三jit编译代码模块128不必读取出生年份字段,因为第三jit编译代码模块128知道出生年份字段具有值“1940”。当读取第三存储桶121

3的行时,第三jit编译代码模块128可以跳过读取出生年份字段,这减少了存储器访问时间并且还减少了处理消耗(例如,可以跳过出生年份字段到另一数据格式的转换)。实际上,因为第三jit编译代码模块128被配置有第三存储桶121

3中的行的出生年份字段的固定值,所以第三存储桶121

3的行的出生年份字段值甚至不必从存储设备106传输到主机处理器102。例如,可以在与第三存储桶121

3相关的元数据中指示出生年份字段的固定值,其中第三jit编译代码模块128可以访问所述元数据。
[0077]
第四存储桶121

4包括长度是例如字大小的常数的倍数或者具有相同长度的行(202

1和202

4)。专用于存储桶121

4的第四jit编译代码模块128可以执行对齐的存储器访问。对齐的存储器访问是指来自超速缓存内存或另一存储器(例如,非易失性存储器114)的行的数据的存储器访问。存储器的行是指给定大小的存储元件的块,其可以从存储器以单次存储器访问进行检索。如果一行数据的长度是常数或常数的倍数,则单次存储器访问可能会从存储器的行中的存储器中检索整个行。与执行未对齐或不规则的存储器访问相比,执行对齐的存储器访问以检索行可以在计算上更有效,在执行未对齐或不规则的存储器访问的情况下,可能必须执行多次存储器访问以从表中检索行。通常,计算分流控制逻辑126可以将存储桶化指示发送到嵌入式控制器118(或外部控制器124),这使得嵌入式控制器118(或外部控制器124)生成包括数据库表200的行的存储桶,可以基于非易失性存储器114的特定组织使用对齐的存储器访问来访问这些行。
[0078]
作为另一示例,可以为具有较长长度(超过长度阈值)的字段和具有较短长度(不超过长度阈值)的字段生成单独的存储桶。具有较长长度的字段的专用代码模块可以在回路中检查字符(数字、字母、符号等),所述回路以迭代方式处理字符,直至到达字段的结尾。另一方面,可以无回路的方式实施用于长度较短的字段的专用代码模块,其中可以一次检查字段的所有字符。作为另一示例,可以用专用代码模块处理长度为字大小的倍数的字段,所述专用代码模块包括实施并行性的单指令多数据形式的矢量指令。
[0079]
作为额外示例,存储桶可以包括共享多于一个特性的行。例如,存储桶可以包括其中第一字段具有空值且第二字段具有共享固定值的行。
[0080]
图3是根据本公开的一些实施方案的数据库查询处理过程的流程图,所述数据库查询处理过程可以由图1a或图1b的主机处理器102以及控制器300执行。控制器300可以是图1a或图1b的控制器118或124。尽管图3示出具有特定任务顺序的示例过程,但是应注意,在其它示例中,可以不同任务顺序或结合替代任务来执行所述过程。
[0081]
在主机处理器102上运行的数据库引擎108从客户端设备112接收(在302处)数据
库查询。下文阐述示例数据库查询:
[0082]
从t1中选择avg(年龄),其中(年龄<18)。
[0083]
在前述示例数据库查询中,在其中(where)从句中指定谓词(或条件)。如果行中的字段(年龄)小于18,则表t1的行满足查询谓词(年龄<18)。示例数据库查询还计算满足查询谓词的行中的年龄字段的值的平均值。
[0084]
数据库引擎108的查询优化器(未示出)生成(在304处)用于数据库查询的查询计划。对于以上示例查询,查询计划可以包括要执行的任务的集合,以访问表t1中满足查询谓词的行,并计算满足查询谓词的行中的字段年龄的值的平均值。
[0085]
数据库引擎108将数据库查询发送(在306处)到jit编译器130以将数据库查询编译成jit编译代码模块(128)。可以在不解释数据库查询的情况下由主机处理器102执行用于数据库查询的机器可执行代码,这可以加速查询处理。“解释”数据库查询可以指解析数据库查询并生成被执行以执行数据库查询所指定动作的步骤。在其它示例中,不执行数据库查询的jit编译。
[0086]
接下来,计算分流控制逻辑126标识(在308处)要生成的一个或多个存储桶。所标识的存储桶的生成分流到可以是存储设备106中的嵌入式控制器118的控制器300,或者分流到外部控制器124(图1a或图1b)。作为一示例,以上示例数据库查询从表t1中选择年龄字段,并计算表t1中满足查询谓词的行中年龄字段的值的平均值。第一存储桶可以包括字段年龄被设置为空值的行,并且第二存储桶可以包括年龄字段不为空值的的行。作为另一示例,另一存储桶可以包括年龄字段被设置为共享固定值的行。可以基于表t1的模式、用于数据库查询的查询计划以及用于表t1的字段的统计信息来决定创建哪些存储桶以用于处理数据库查询。例如,如果统计信息指示表t1中存在年龄字段被设置为空值的大量行,则可以创建上文所提到的第一存储桶和第二存储桶。
[0087]
对于每个已标识的存储桶,计算分流控制逻辑126还例如通过指示图1a或图1b中的jit编译器130生成专用jit编译代码模块128来使得生成(在310处)相应专用jit编译代码模块。
[0088]
此外,计算分流控制逻辑126可以确定(在312处)将表t1的数据的过滤分流到控制器300。
[0089]
在确定哪些过滤可以被分流时,计算分流控制逻辑126确定查询谓词是否涉及多个表。在一些示例中,可以分流过滤以执行仅一个表的行的过滤。如果接收到的数据库查询110的谓词涉及多个表(例如,谓词指定t1.a>5且t2.b=0,其中t1和t2是两个不同的表且a和b是相应表的数据字段),则计算分流控制逻辑126可以确定不分流过滤,或可替换地,可以基于两个不同的过滤条件(t1.a>5和t2.b=0)分流相应表t1和t2的个别过滤。
[0090]
基于由计算分流控制逻辑126进行的存储桶化决定和过滤确定,计算分流控制逻辑126可以将一个或多个分流指示发送(在314处)到控制器300以执行分流计算。分流指示可以指存储桶化指示(127)或过滤指示(129)。在此示例中,假设过滤指示和存储桶化指示两者都被发送到控制器300。
[0091]
参看图3和图4两者,控制器300接收一个或多个分流指示,并将所述一个或多个分流指示转发到存储桶化逻辑120和/或过滤逻辑122。例如,控制器300中的过滤逻辑122接收过滤指示,并通过基于在过滤指示中指定的过滤条件(例如,过滤条件可以包括谓词年龄<
18)在表t1上应用过滤(在316处)而对过滤指示作出响应。过滤逻辑122检索表t1的行,确定是否每一行都满足过滤条件,且在所述行满足过滤条件的情况下将所述行包括在一组过滤后的行402中。过滤逻辑122从所述一组过滤后的行402中排除不满足过滤条件的表t1的行。可以将这组过滤后的行402存储在存储设备106的临时存储器119中。
[0092]
控制器300中的存储桶化逻辑120接收存储桶化指示,并通过基于包括在存储桶化指示中的存储桶条件生成(在318处)相应的一个或多个存储桶而对存储桶化指示作出响应。例如,在图4的示例中,存储桶条件可以指定针对年龄为空值的行生成第一存储桶404,并针对年龄不为空值的行生成第二存储桶406。存储桶化逻辑120访问一组过滤后的行402中的每一行,并根据所述行中的年龄字段的值分别是空值还是非空值而将所述行选择性地放置到第一存储桶404或第二存储桶406中。更一般来说,存储桶化逻辑120响应于确定行的特性相对于存储桶条件的关系而将行分配到存储桶。
[0093]
还可以限定默认或回落存储桶,其中由存储桶化逻辑120处理的不满足任何其它存储桶的存储桶条件的行可以由存储桶化逻辑120放置到默认或回落存储桶中。
[0094]
当将行添加到第一存储桶404和第二存储桶406时,第一存储桶404和第二存储桶406也可以存储在临时存储器119中。
[0095]
尽管图3和图4示出在执行存储桶化之前首先执行过滤,但是在其它示例中,控制器300可以在执行过滤之前首先执行存储桶化。作为另一替代方案,控制器300可以一起共同执行过滤和存储桶化,其中基于过滤条件和存储桶条件对从表t1检索的每一行进行处理。
[0096]
控制器300将包括在相应生成的存储桶中的数据项目发送(在320处)回到主机处理器102。在过滤和存储桶化都已分流到控制器300的示例中,返回到主机处理器102的存储桶中的数据量可以小于未应用过滤的情况。将存储桶从控制器300发送到主机处理器102可以使用以下各项:基于推送的实施方案,其中控制器300可以在生成存储桶时发送存储桶的行(例如,包括在存储桶的行中的数据项目);或可替换地,基于拉取的实施方案,其中数据库引擎108向存储设备106请求存储桶的行。
[0097]
控制器300还可以发送与存储桶相关的元数据,所述元数据可以与存储桶一起发送,例如每个存储桶的标识符、每个存储桶中的行的数目、每个存储桶的大小(例如,以字节为单位)等。
[0098]
参看图3和图5,对于从控制器300接收的每个存储桶,数据库引擎108调用(在322处)相应专用jit编译代码模块128以处理包括在存储桶中的数据项目。在主机处理器102处,调用第一专用jit编译代码502以处理包括在第一存储桶404中的数据项目,并且调用第二专用jit编译代码504以处理包括在第二存储桶406中的数据项目。
[0099]
以上示例数据库查询需要计算年龄字段的平均值。用于处理年龄字段被设置为空值的第一存储桶404的行的第一专用jit编译代码模块502可以简单地返回空值作为第一存储桶404的行的第一结果506。用于处理年龄字段被设置为非空值的第二存储桶406的行的第二专用jit编译代码模块504可以检索第二存储桶406的行的非空值并计算这些非空值的平均值作为第二结果508。
[0100]
一旦存储桶被处理,数据库引擎108就将由相应第一专用jit编译代码模块502和第二专用jit编译代码模块504针对相应第一存储桶404和第二存储桶406计算的结果506和
508进行组合(在324处)。在此示例中,数据库引擎108通过取第一结果506和第二结果508的值的加权平均值而对第一结果506和第二结果508进行组合。空值(在第一结果506中)和在第二结果508中的给定平均值的加权平均值等于给定平均值。可以在计算加权平均值时将权重分配到相应的第一结果506和第二结果508。可以基于相应存储桶中的行的数目分配相应结果的权重(例如,存储桶中的行的数目越大,意味着分配到所述存储桶的权重按比例越大)。数据库引擎108基于第一结果506和第二结果508的组合产生最终结果510,可以将其作为对数据库查询的响应返回到提交数据库查询的客户端设备112。
[0101]
尽管图5示出具有用于处理相应两个存储桶的数据的两个专用jit编译代码模块的示例,但是在其它示例中,可能只有一个存储桶具有一个相关的专用jit编译代码模块,或者可能有多于两个存储桶具有多个相关的专用jit编译代码模块。
[0102]
为了提高效率,可以分批执行数据库数据的处理,以允许执行任务的管道,其中可以在存储设备106和主机处理器102处并行地执行管道的一些任务。“批”可以指存储在存储设备106的非易失性存储器114中的数据集合。可以预先配置或者可以动态地设置构成批的数据集合的大小。
[0103]
如图6所示,主机处理器102(其包括图1a或图1b中的数据库引擎108)可以请求存储设备106对存储在存储设备106的非易失性存储器114中的数据库表的各行的相应批执行过滤和存储桶化(602

1、602

2、602

3、602

4等)。一旦存储设备106完成了第一批的行的过滤和存储桶化(602

1)以生成第一组存储桶,就可以将包括在第一组存储桶中的数据项目传输(604

1)到主机处理器102。将包括在一组存储桶中的数据项目从存储设备106传输到主机处理器102可以由直接存储器访问(direct memory access,dma)控制器或另一实体执行。主机处理器102接着使用相应专用jit编译代码模块处理(606

1)包括在第一组存储桶中的数据项目。
[0104]
与包括在第一组存储桶中的数据项目的传输(604

1)和包括在第一组存储桶中的数据项目的处理(606

1)并行地,主机处理资源600可以请求存储设备106执行第二批的行的过滤和存储桶化(602

2)以生成第二组存储桶。接着将包括在第二组存储桶中的数据项目传输(604

2)到主机处理器102,且接着在主机处理器102处进行处理(606

2)。以此方式,主机处理器102将使包括在新存储桶中的数据项目准备好,以便在处理完包括在先前存储桶中的数据项目后就进行处理。为了支持此类并行处理,将存储设备106中的用于临时存储包括在存储桶中的数据项目的临时存储器119分配有足够容量以存储包括在与用于不同批的相应不同过滤和存储桶化任务相关的多组存储桶中的数据项目。
[0105]
类似地,存储设备106可以执行第三批的行的过滤和存储桶化(602

3)以生成第三组存储桶。将包括在第三组存储桶中的数据项目传输(604

3)到主机处理器102,且接着在主机处理器102处进行处理(606

3)。此外,存储设备106可以执行第四批的行的过滤和存储桶化(602

4)以生成第四组存储桶。将包括在第四组存储桶中的数据项目传输(604

4)到主机处理器102,且接着在主机处理器102处进行处理(606

4)。
[0106]
图6中示出的基于批的任务管道包括可以由包括存储设备106、执行数据传输的实体和主机处理器102的不同实体并行地执行的任务。因此,当主机处理器102正在处理包括在前一组存储桶中的数据项目时,存储设备106可以生成下一组存储桶,并将包括在下一组存储桶中的数据项目传输到主机处理器102。
[0107]
为了跟踪在存储设备106处执行的批过滤和存储桶化,可以在存储设备106处维持跟踪元数据以指示处理后的数据项目(例如,最后一页、最后一行等)。跟踪元数据可以与相应组存储桶的数据项目一起发送到主机处理器102,使得主机处理器可以请求对下一批的过滤和存储桶化。
[0108]
与每组存储桶一起发送到主机处理器102的元数据还可以指示每个存储桶的大小,使得主机处理器102 600可以在处理期间在主机处理器102 600的存储器中分配足够的内存以存储包括在每个存储桶中的数据项目。
[0109]
另外,在主机处理器102使用基于拉取的实施方案以从存储设备106中检索存储桶的行(例如,包括在存储桶的行中的数据项目)的示例中,发送到主机处理器102的元数据可以进一步包括标识存储桶的行的信息,使得主机处理器102可以向存储设备106请求所述存储桶的行以使用相应专用jit编译代码模块处理包括在所请求的存储桶的行中的数据项目。
[0110]
为了提高基于拉取的实施方案的性能,当主机处理器102正在处理包括在当前存储桶的行的数据项目时,主机处理器102可以进一步预取其它存储桶的行(例如,预取包括在其它存储桶的行中的数据)。
[0111]
图7示出重新放置存储桶的行以优化存储器访问局部性的本公开的另一实施方案。存储桶行重新放置逻辑702可以重新放置存储桶的行的字段,以减少在检索数据以供相应jit编译代码模块处理时涉及的存储器访问的数目。
[0112]
在一些示例中,存储桶行重新放置逻辑702可以包括在主机处理器102的数据库引擎108中。在其它示例中,存储桶行重新放置逻辑702是嵌入式控制器118或外部控制器124的一部分。
[0113]
存储桶的行可以作为字段阵列704存储在例如临时存储器119的存储器中。应注意,存储器可以包括多页数据。一页数据可以包括存储桶的多行中的数据。在图7的示例中,假设每一行都有两个字段:姓名、年龄。在存储桶的字段阵列704中,可以将多行的字段存储在存储器的每一页中。例如,字段姓名(1)、年龄(1)(第一行)、姓名(2)、年龄(2)(第二行)、姓名(3)、年龄(3)(第三行)等可以存储在字段阵列704的第一页中。类似地,字段姓名(j)、年龄(j)(第j行)、姓名(k)、年龄(k)(第k行)、姓名(m)、年龄(m)(第m行)等可以存储在字段阵列704的另一页中。
[0114]
在用于存储桶的相应jit编译代码模块仅处理年龄字段(而非姓名字段)的示例中,访问存储为字段阵列704的数据则可能效率不高。为了检索年龄(1)的值,相应jit编译代码模块还将检索姓名(1),所述姓名(1)未被相应jit编译代码模块使用,因此构成了浪费的存储器访问。
[0115]
存储桶行重新放置逻辑702将字段阵列704变换成重新放置的字段阵列706。在重新放置的字段阵列706中,首先存储来自不同行的姓名字段的值,然后存储来自不同行的年龄字段的值。在图7的示例中,重新放置的字段阵列706中的第一页包括姓名(1)、姓名(2)、姓名(3)、
……
、姓名(j)。重新放置的字段阵列706中的第二页包括姓名(k)、姓名(m)、
……
、年龄(1)、年龄(2)、
……
。重新放置的字段阵列706中的第三页包括年龄(3)、
……
、年龄(j)、年龄(k)、年龄(m)、
……

[0116]
当相应jit编译代码模块访问存储器以检索年龄(1)时,还将检索含有年龄(2)的
页(以及姓名(k)和姓名(m))。然而,当相应jit编译代码模块访问含有年龄(3)的页时,也会检索年龄(j)、年龄(k)、年龄(m)等(例如检索到超速缓存内存中)。结合重新放置的字段阵列706,因为年龄字段值按序列存储在存储器中,所以增加了用于年龄字段值的存储器访问局部性,这可以减少用于检索存储桶的行的所有年龄字段值以供处理的存储器访问的数目。确切地说,所检索的年龄字段值可以存储在超速缓存内存中,且可以从超速缓存内存进行访问以供处理。
[0117]
图8是另一示例主机处理器800的框图,所述主机处理器包括一个或多个处理器802和非瞬时性机器可读或计算机可读存储介质804,所述非瞬时性机器可读或计算机可读存储介质存储可在所述一个或多个处理器802上执行以执行各种任务的机器可读指令。机器可读指令包括存储桶化分流控制指令806以确定是否要生成存储桶,且如果是,则将存储桶的生成分流到存储设备。
[0118]
机器可读指令还包括过滤分流控制指令808以确定是否要执行表的数据的过滤,且如果是,则将过滤分流到存储设备。
[0119]
机器可读指令还包括jit编译代码模块810以处理相应存储桶的数据项目。
[0120]
存储介质804可以包括以下各者中的任一或某一组合:半导体存储器设备,例如动态或静态随机存取存储器(dram或sram)、可擦编程只读存储器(erasable and programmable read

only memory,eprom)、电可擦编程只读存储器(electrically erasable and programmable read

only memory,eeprom)和闪速存储器;磁盘,例如硬磁盘、软磁盘和可移动的磁盘;另一包括磁带的磁性介质;光学介质,例如光盘(compact disk,cd)或数字视频磁盘(digital video disk,dvd);或另一类型的存储设备。应注意,上文所论述的指令可以提供在一个计算机可读或机器可读存储介质上,或可替换地,可以提供在分布于可能具有多个节点的较大系统中的多个计算机可读或机器可读存储介质上。此类计算机可读或机器可读存储介质被视为物品(或制品)的一部分。物品或制品可以指任何所制造的单个组件或多个组件。存储介质可以位于运行机器可读指令的机器中,或者位于可以通过网络从中下载机器可读指令以供执行的远程站点处。
[0121]
在前述描述中,阐述了大量细节以提供对本文所公开的主题的理解。然而,可以在没有这些细节中的一些的情况下实践实施方案。其它实施方案可以包括对上文所论述的细节的修改和变化。希望所附权利要求书覆盖此类修改和变化。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜