首页 / 专利库 / 电脑零配件 / 硬件实现 / 通过过滤方法操作的聚合/分组的硬件实现

通过过滤方法操作的聚合/分组的硬件实现

阅读:100发布:2024-01-12

专利汇可以提供通过过滤方法操作的聚合/分组的硬件实现专利检索,专利查询,专利分析的服务。并且描述用于执行分组和聚合操作的技术。在 实施例 中,接收聚合按第一列分组的数据的 请求 。响应于接收请求,值从第一列被加载到输入高速缓存中。值包括来自于行集合的、来自于第一列中的值。利用逻辑编程过滤单元以执行来自于第一行的第一列的特定值和行集合的多个其它行的第一列中的值之间的比较。基于比较,生成识别多个行内的、在第一列中具有匹配特定值的值的行的谓词结果。通过聚合由谓词结果识别的每个行的第二列中的值生成用于第二列的聚合值。,下面是通过过滤方法操作的聚合/分组的硬件实现专利的具体信息内容。

1.一种用于执行分组和聚合操作的方法,包括:
接收用于聚合按第一列分组的数据的请求
响应于接收所述请求,执行以下步骤:
解析所述请求以识别与所述请求相关联的一个或多个谓词;
确定所述一个或多个谓词应当如何被编程进可重配置硬件
对可重配置硬件编程以产生特定于谓词的电路,所述特定于谓词的电路实现过滤单元,所述一个或多个谓词被编程进所述过滤单元;以及
将来自于第一列的值加载到输入高速缓存中;
其中加载到输入高速缓存中的值包括来自所述第一列的、来自行集合的值;
其中所述特定于谓词的电路包括执行在以下项之间的比较的逻辑:
来自第一行的所述第一列的特定值,和
所述行集合中的多个行的所述第一列中的值;
基于所述特定值与所述多个行的第一列中的值的比较,生成识别所述多个行内的、在第一列中具有匹配所述特定值的值的行的谓词结果;以及
将由所述特定于谓词的电路产生的谓词结果传递到聚合单元,所述聚合单元包括通过聚合由所述谓词结果识别的每个行的第二列中的值生成用于第二列的聚合值的逻辑;
其中所述方法由一个或多个计算设备执行。
2.如权利要求1所述的方法,
其中所述谓词结果是位向量并且所述位向量的每个位对应于行集合中的对应行;
其中生成所述谓词结果包括:
当对应行的值匹配所述特定值时,将位向量的位设置到第一位值;
当对应行的值不匹配所述特定值时,将位向量的位设置到第二位值。
3.如权利要求2所述的方法,进一步其中:
其中所述位向量是在位向量集合中的第一位向量;并且
所述方法还包括:
从所述行集合中选择第二行,对于所述第二行,对应位还未被设置为所述位向量集合中的任何位向量中的第一位值;
将比较电路编程进所述过滤单元的所述可重配置硬件;
其中所述比较电路具有执行在以下项之间的比较的逻辑:
来自于第二行的第一列的第二值,和
所述行集合中的第二多个行的第一列中的值;
基于所述第二值与所述第二多个行的第一列中的值的比较,生成识别所述第二多个行内的、在第一列中具有匹配所述第二值的值的行的第二位向量;以及
通过聚合由所述第二位向量识别的每个行的第二列中的值生成用于第二列的第二聚合值。
4.如权利要求3所述的方法,其中所述第二多个行是其对应位还未被设置为位向量集合中的任何位向量中的第一位值的行。
5.如权利要求3所述的方法,其中确定对应位是否还未被设置为位向量集合中的任何位向量中的第一位值包括:对位向量集合中的一个或多个位向量执行按位NOT操作或按位XOR操作中的至少一个以生成位向量掩码,所述位向量掩码识别其对应位还未被设置为第一位值的行。
6.如权利要求1所述的方法,还包括:
编程所述聚合单元以执行在请求中指定的聚合操作;
其中为由所述谓词结果识别的每个行聚合第二列的值包括:
使得所述聚合单元对第二列的值应用聚合操作。
7.如权利要求1所述的方法,还包括输出结果,所述结果包括:
由所述特定值标识的组名;以及
通过为由所述谓词结果识别的每个行聚合第二列的值所生成的聚合值。
8.如权利要求1所述的方法,还包括:
将所述谓词结果转换成存储器地址集合;
其中存储器地址集合中的每个存储器地址识别作为第一组的一部分的行的存储器位置
9.一种用于执行分组和聚合操作的系统,包括:
控制单元,其被配置为:
接收用于聚合按第一列分组的数据的请求;
解析所述请求以识别与所述请求相关联的一个或多个谓词;
确定所述一个或多个谓词应当如何被编程进可重配置硬件;
使得来自第一列的值加载到输入高速缓存中;
其中加载到输入高速缓存中的值包括来自所述第一列的、来自行集合的值;
过滤单元,其耦接到所述控制单元并且包括第一可重配置硬件,其中所述第一可重配置硬件在被所述控制单元基于所述请求进行编程以产生特定于谓词的电路时被配置为执行以下操作,该特定于谓词的电路实现过滤单元,所述一个或多个谓词被编程进所述过滤单元:
比较来自于第一行的第一列的特定值和行集合中的多个其它行的第一列中的值;
基于所述比较,生成识别所述多个行之内的、在第一列中具有匹配所述特定值的值的行的位向量;
聚合单元,其耦接到所述控制单元并且被配置为:
接收由过滤单元产生的位向量;
通过聚合由所述位向量识别的每个行的第二列中的值生成用于第二列的聚合值。
10.如权利要求9所述的系统,
其中由过滤单元生成的位向量的每个位对应于所述行集合中的对应行;
其中为了生成位向量,所述过滤单元被配置为:
当对应行的值匹配所述特定值时,将位向量的位设置到第一位值;
当对应行的值不匹配所述特定值时,将位向量的位设置到第二位值。
11.如权利要求9所述的系统,还包括地址生成器单元,其被配置为:
将位向量转换成存储器地址集合;
其中所述存储器地址集合中的每个存储器地址识别作为第一组的一部分的行的存储器位置。
12.一种用于执行分组和聚合操作的产品,包括用于执行如权利要求1至8中的任何一个所述的方法的装置。

说明书全文

通过过滤方法操作的聚合/分组的硬件实现

技术领域

[0001] 本公开一般涉及用于执行数据库操作的技术,并且更具体地涉及用于执行过滤和创建操作的技术。

背景技术

[0002] 本节中描述的方法是可以进行的方法,但不必是先前已被构思或者进行的方法。因此,除非另外指出,不应假定本节中描述的任何方法仅仅由于包含在本节中就将他们视为现有技术
[0003] 数据库包括存储在诸如硬盘集合等的一个或多个存储设备上的元数据和数据。依赖于实施方式,可以根据各种数据模型逻辑上组织数据库内的数据。例如,关系数据库系统通常在表的集合中存储数据,其中每个表被组织成行和列的集合。大多数情况下,每个行代表不同的对象,并且每个列代表不同的属性。但是,其它数据模型也可以用于组织数据。
[0004] 为了访问并操作数据库中的数据,数据库管理系统(DBMS)通常被配置为接收并处理各种数据库命令,数据库命令通常被称为查询。在许多实施方式中,DBMS支持符合诸如结构化查询语言(SQL)等的数据操作语言(DML)的查询。当DBMS接收查询时,DBMS执行由查询指定的一个或多个数据库操作并且可以输出查询结果。示例数据库操作包括过滤、创建、聚合、以及分组操作,其在下面更详细地描述。
[0005] 过滤和创建操作
[0006] 过滤和创建操作是从某些行的某些列输出值的数据库操作,其中行基于被称为谓词的某些标准被过滤。在SQL中,创建和过滤操作使用SELECT和WHERE语法。具体地,SELECT语句指示创建什么数据(即从哪些列检索输出值)以及WHERE子句包括谓词以过滤输出(即指示从哪些行检索输出值)。用于WHERE子句的运算符的示例包括但不限于下面表1所示的运算符。
[0007]运算符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在包含的范围之间
LIKE 搜索模式
IN 指定用于列的精确值的集合
[0008] 表1:示例谓词运算符
[0009] 下面表2示出示例过滤和创建查询。
[0010]
[0011] 表2:样本过滤/创建查询
[0012] 此查询基于销售员必须是Pedro或者是Alex,并且销售量必须大于200的标准过滤销售表中的数据。对于满足这些标准的销售表中的每个记录,查询将返回关联的销售员、客户、和在记录中指定的量。
[0013] 例如,下面表3示出了示例销售表。
[0014]
[0015] 表3:示例销售表
[0016] 给定表3的示例销售表,下面的表4示出了执行查询1的期望的输出。
[0017]SALESMAN CUSTOMER AMOUNT
Pedro Gainsley Corp. 400
Alex Gainsley Corp. 600
Alex Lexau’s Lexan 650
Pedro Gainsley Corp. 470
[0018] 表4:示例查询的输出
[0019] 聚合和分组操作
[0020] 聚合和分组操作是提供关于特定列中的数据的概括统计量的数据库操作。在SQL中,分组操作使用GROUP BY语法以通过一个或多个列来分组聚合函数的结果。下面表5示出了可以结合GROUP BY语句使用的示例聚合函数。
[0021]函数名称 描述
[0022]AVG 返回列的平均值
COUNT 返回列中的行的数目
FIRST 返回列中第一个值
LAST 返回列中最后一个值
MAX 返回列中最大的值
MIN 返回列中最小的值
SUM 返回列中的所有值的总和
[0023] 表5:示例聚合函数
[0024] 下面在表6中示出示例聚合和分组查询。
[0025]
[0026] 表6:示例聚合查询
[0027] 查询2请求公司已经做出的总美元销售量。当执行查询2时,DBMS执行聚合但是不分组。DBMS无条件地将销售表中的所有量相加以返回最终结果。给定表3的示例销售表,下面的表7示出了执行查询2的期望的输出。
[0028]sum(AMOUNT)
[0029]2820
[0030] 表7:用于查询2的结果表
[0031] 查询3请求由做出销售的销售员分组的总美元销售量。当执行查询3时,DBMS执行分组和聚合这两者。具体地,DBMS生成用于销售表中每个独特销售员的一个聚合结果,其中结果是特定销售员的总销售。给定表3的示例销售表,下面的表8示出了执行查询3的期望的输出。
[0032]SALESMAN sum(AMOUNT)
Pedro 1070
Alex 1400
Michael 350
[0033] 表8:用于查询3的结果表
[0034] 查询4请求由销售员和与销售相关联的客户分组的总美元销售量。当执行查询4时,DBMS执行多列分组和聚合。在这种情况下对每个独特的销售员-客户对,将有一个聚合结果,并且所述聚合结果是用于该独特的销售员-用户对的总销售。给定表3的示例销售表,下面的表9示出了执行查询4的期望的输出。
[0035]SALESMAN CUSTOMER sum(AMOUNT)
Pedro Gainsley Corp. 870
Pedro Lexau’s Lexan 200
Alex Gainsley Corp. 600
Alex Lexau’s Lexan 800
[0036]Michael Lexau’s Lexan 350
[0037] 表9:用于查询4的结果表附图说明
[0038] 本公开通过示例方式而不是限制方式在附图的图中被示出,并且其中相同参考数字指代相同元件并且其中:
[0039] 图1是示出了根据一种实施例的用于执行过滤和创建操作的示例系统结构的方框图
[0040] 图2是示出了根据一种实施例的用于执行过滤和创建操作的示例过程的流程图
[0041] 图3A到3E是示出了根据一种实施例的在执行过滤和创建操作过程中的系统的不同状态的一系列方框图;
[0042] 图4是示出了根据一种实施例的用于执行过滤和创建操作的具有地址生成器的示例系统结构的方框图;
[0043] 图5是示出了根据一种实施例的用于执行分组和聚合操作的示例系统结构的方框图;
[0044] 图6是示出了根据一种实施例的用于执行分组和聚合操作的示例过程的流程图;
[0045] 图7A到7E是示出了根据一种实施例的在执行分组和聚合操作过程中的系统的不同状态的一系列方框图;
[0046] 图8是其上可以实施实施例的计算机系统的框图。

具体实施方式

[0047] 在下面描述中,为了解释的目的,阐述许多具体细节以便提供对本发明的更彻底的理解。但是,本领域技术人员将清晰,在没有这些具体细节的情况下也可以实践本发明。在其它实例中,公知的结构和设备以方框图形式示出以便避免不必要地模糊本发明。
[0048] 概述
[0049] 这里描述用于执行过滤、创建、分组、和聚合操作的技术。在一种实施例中,专用硬件可以被配置为执行这些数据库操作。专用硬件可以通过降低流到计算机系统的速率限制部分的数据量来加速查询处理,其可以帮助缓解数据瓶颈。具体地,专用硬件可以降低在过滤和创建操作期间需要被存储在RAM中的数据量,由此降低评估所述查询所需的RAM输入/输出(I/O)操作。此外,专用硬件降低了在用于执行数据库操作的大部分公共通用处理器中存在的指令开销。
[0050] 此外专用硬件可以允许多种数据穿过过滤单元,其在评估复杂查询谓词中带来了灵活性。还有,专用硬件可以允许谓词的非线性评估和处理,以使得过滤单元不必与恒定的输入数据流保持同步。
[0051] 根据这里描述的其它技术,可以在没有表数据的全局排序的情况下执行分组和聚合。避免全局排序缓解了当排序大列表时出现的随机存储访问的问题。例如,当排序列表时,一个项可以进入位于存储器的一个中的组中,而下一个项可以属于位于另一个存储块的组中。在这种情况下写排序表通常会需要关闭和打开新的存储页面。
[0052] 此外,描述了允许对存储器的小组块执行分组和聚合的技术,其允许随机访问在快速、低功率高速缓存中出现。
[0053] 根据这里描述的实施例,生成诸如位向量等数据结构以指示哪些行满足一个或多个谓词。在示例实施例中,在查询中生成用于每个谓词的位向量以指示数据库内的哪些行满足对应的谓词。在已经为每个谓词生成位向量之后,按位运算符用于组合位向量以生成最终位向量。最终位向量指示哪些行满足谓词集合中的所有谓词,并且可以用在创建操作中以选择行以输出作为查询结果。
[0054] 在其它实施例中,生成诸如位向量等数据结构以指示在分组和聚合操作期间哪些行是相同组的一部分。例如,可以生成位向量的集合,其中组中的每个位向量对应于不同组。每个位向量内的位的位置对应于特定行。如果对应于位的行是由所述位向量表示的组的一部分,则所述位向量中的每个位的位值被设置为第一位值,如果对应的行不是所述组的一部分,则被设置为第二位值。因此,所述位向量可以用来容易地识别属于相同组的行并且可以在执行聚合来自这些行的列的值的操作期间被使用。
[0055] 用于处理过滤和创建操作的示例结构
[0056] 图1是示出了根据一种实施例的可以被配置为执行过滤和创建数据库操作的示例系统结构。系统100通常包括RAM 102、存储器控制器106、系统控制108、输入高速缓存110、过滤单元112、位向量高速缓存114、组合单元116、创建单元118、和输出高速缓存120。
[0057] RAM 102存储N个数据块,如块104A到104N所示,其中N可以是任何正整数。可以使用允许随机访问存储的数据的任何适合的计算机数据存储器实施RAM 102。RAM 102的示例可以包括但不限于动态RAM(DRAM)和静态RAM(SRAM)。
[0058] 存储器控制器106是管理进入和流出RAM 102的数据流的存储器控制器。例如存储器控制器106可以处理向RAM 102读和写数据的请求。可以使用任何适合的存储器控制器实施存储器控制器106,包括但不限于两倍数据速率DDR存储器控制器、双通道存储器控制器、或完全缓冲存储器控制器。
[0059] 输入高速缓存110、位向量高速缓存114、和输出高速缓存120是根据以下进一步描述的技术在查询处理期间存储数据的存储器高速缓存。通过高速缓存数据,由RAM 102处理的输入/输出操作的数目可以被最小化,由此减少数据瓶颈。
[0060] 系统控制108、过滤单元112、组合单元116和创建单元118(在此被称为“数据库单元”)根据下面进一步详细描述的技术工作以执行过滤和创建操作。这里描述的这些组件和其它数据库单元的每个可以被实施为硬件或硬件和软件的组合。例如,可以使用可编程逻辑器件(PLD)实施这些单元的一个或多个,所述PLD是诸如现场可编程阵列(FPGA)或其它类型的门阵列或可重构电路。作为另一个示例,可以使用通用处理器实施一个或多个这些单元,所述处理器是诸如高级RISC机器(ARM)或其它精简指令集计算机(RISC)处理器。
[0061] 基于谓词过滤数据
[0062] 图2示出了根据一种实施例的用于执行过滤和创建操作的示例处理。可以在诸如在图1中示出的系统100或在图4中示出的系统400等任何适合的系统上实施在图2中示出的过程。
[0063] 参考图2,在步骤202中,由系统控制108接收包括一个或多个谓词的集合的查询。例如,查询可以包括具有指定一个或多个谓词的WHERE子句的SELECT语句。但是,可以取决于特定实施方式使用任何其它适合的语法。在一种实施例中,每个谓词指定用于过滤从数据库中提取和输出或相反作为结果返回到查询的数据的标准。可以使用一个或多个运算符指定标准,包括但不限于以上表1中示出的运算符。
[0064] 在示例实施例中,系统控制108解析接收的查询以确定所述查询包括哪些谓词并且谓词应当如何被编程进过滤单元112。步骤204到210定义了循环,其对于在谓词集合中的每个谓词被重复。因此,在步骤204的第一迭代中,利用谓词集合的第一谓词编程过滤单元112。系统控制108可以以任何适合的次序将谓词编程到过滤单元112中。下面还详细描述用于选择所述次序的技术。在一种实施例中,编程过滤单元可以包括配置FPGA或其它可重构电路以应用由谓词指示的过滤标准。例如,可以使用硬件描述语言(HDL)编程过滤单元112以实施在表1中示出的谓词运算符中的任何一个以将一个或多个值与谓词值进行比较。
[0065] 通常,谓词强加来自于特定列的值的条件。谓词对其强加条件的列在此被称为谓词的目标列。因此,对于谓词(AMOUNT>200),AMOUNT列是目标列。
[0066] 在步骤206中,来自于列中的值被发送给过滤单元112。在示例实施例中,系统控制108将请求发送到存储器控制器106以将来自于RAM 102中的一个或多个列中的值加载到输入高速缓存110中。系统控制108可以基于被评估的谓词确定哪些列应当被加载到输入高速缓存110中。例如,系统控制108可以使得只加载来自过滤单元112当前被编程所使用的谓词的目标列的值。例如,对于谓词AMOUNT>200,系统控制108可以使得来自于AMOUNT列的至少一部分的值从RAM 102加载进输入高速缓存110中,如在下面示例实施方式中示出的。
[0067] 来自于目标列的值接着从输入高速缓存110流入到过滤单元112。一旦接收到列数据,过滤单元112应用在步骤204编程的谓词以生成识别满足谓词的行的结果。为确定哪些行满足谓词,过滤单元112可以应用一个或多个谓词运算符以将接收的列的特定行的值与在查询谓词中指定的谓词值进行比较。
[0068] 在步骤208中,过滤的结果被存储为指示哪些行具有满足谓词条件的目标列值的数据结构。在一种实施例中,数据结构是如下面进一步详细描述的位向量。在替代实施例中,数据结构是从位向量中生成的编码数据。也可以生成、存储、并且使用任何其他合适的数据结构以指示哪些行具有满足谓词条件的目标列值。
[0069] 在步骤210中,系统控制108确定在谓词集合中是否存在还没有被过滤单元112评估的剩余谓词。如果存在没有被评估的剩余谓词,则过程返回到204,并且系统控制108利用剩余谓词中的一个编程过滤单元112。如果谓词集合内的所有谓词已经被评估,则过程继续步骤212,如下面进一步详细描述的。
[0070] 在过滤单元处生成位向量
[0071] 在一种实施例中,过滤单元为每个谓词结果生成位向量。位向量的每个位对应于行并且指示对应的行是否满足与所述位向量相关联的查询谓词。例如,位向量内的位的位置可以对应于表内的对应行的位置。因此,位向量中的第三位可以对应于表的第三行。
[0072] 每个位的值代表布尔值,其中第一位值指示对应的行满足谓词条件并且第二位值指示对应的行不满足谓词条件。例如,如果表的第三行满足与位向量相关联的谓词,则位向量中的第三位是“1”,并且如果表的第三行不满足与位向量相关联的谓词,则位向量中的第三位是“0”。
[0073] 组合结果
[0074] 在已经根据步骤202到210为每个谓词生成结果之后,在步骤212中通过以查询指示的方式组合每个谓词的结果生成最终结果。最终结果是诸如最终位向量之类的数据结构,其识别满足查询中所有谓词的行集合。
[0075] 在一种实施例中,最终结果是最终位向量,其中最终位向量的每个位对应于由查询定为目标的表的特定行。正因为在特定于谓词的位向量中的每个位的值指示对应行是否满足与所述位向量相关联的谓词,所以在最终位向量中的每个位的值指示对应的行是否满足所有谓词。因此,第一位值(例如“1”)用于指示对应的行满足查询中的所有谓词,并且第二位值(例如“0”)用于指示对应的行不满足所有谓词。
[0076] 在示例实施例中,系统控制108利用如何组合位向量的指令编程组合单元116。例如,组合单元116可以被编程以基于在查询中指定的逻辑运算符执行一个或多个按位操作以组合结果位向量。在查询1情况下,例如,系统控制108将编程组合单元116以执行按位OR(或)操作,以及接着按位AND(与)操作,以产生最终位向量,如在下面示例实施方式中示出的。
[0077] 创建过滤后的数据
[0078] 在步骤214中,创建单元118使用最终结果以选择行以从创建的列中输出。在其中使用最终位向量的情况中,创建单元118逐位处理最终位向量以识别满足所有查询谓词的行(即,最终位向量内的对应位被设置为第一位值的那些行)。在步骤216中,创建单元118从输入高速缓存110中为创建的列检索列数据并且将由最终结果识别的行输出到输出高速缓存120。在这里输出行是指将满足所述谓词的行存储到输出高速缓存120中。一旦行被输出,其可以随时作为对所述查询的结果,被返回到例如用户或应用程序。
[0079] 在步骤218中,系统控制108或创建单元118确定由查询指示的所有列是否已经被创建。例如,在查询1情况下,创建的列包括SALESMAN、CUSTOMER、和AMOUNT列。如果存在任何剩余的创建的列,则过程返回到步骤214,并且最终结果应用于剩余集合中的列。应用最终结果可以包括使用最终位向量作为掩码或将最终位向量转换成为存储器地址,如下面进一步描述的。此过程重复,直到由查询指示的所有列已经被创建。
[0080] 基于最终结果的创建行的过程可以依赖特定实施方式改变。在一种实施例中,如果过滤过程中未存储到输入高速缓存110中,则来自于创建列的值的行被加载到输入高速缓存110中。创建单元118基于最终结果确定这些值的行的哪一些应当被存储在输出高速缓存120中。在一种实施例中,创建单元110使用最终结果位向量作为掩码,掩码在步骤216处控制哪些行从创建单元118被输出到输出高速缓存120。例如,创建的列的每个行可以从输入高速缓存110流到创建单元118。创建单元118接着可以应用位向量作为掩码以只使得满足所有查询谓词的那些行流到输出高速缓存120。替代地,如下面进一步详细描述的,可以使用地址生成器单元向创建单元118只提供那些应当输出的行。
[0081] 混合列式块处理
[0082] 在一种实施例中,系统以混合列式方式将数据库的至少一部分存储在RAM 102中。混合列式存储器将数据库分割成块,其中每个块具有用于一个或多个列的固定数目的行。
例如,第一块可以为一个或多个列存储开头50行,第二块存储下一50行,并且第三块存储下一30行。在每个块内,以定位列的方式存储数据。换句话说,列内的元素被连续地存储在块内。以混合列式的方式存储数据允许系统容易地以可管理的块大小处理列。
[0083] 在一种实施例中,可以以每块为基础执行上面描述的过滤和创建操作。例如,如果列遍布多个块,则过滤和创建操作可以被应用于位于第一块中的列的第一部分以生成第一结果集合。可以为每个后续块重复所述过程直到已经处理了整个列。在一个阶段生成的结果集合在被返回之前不需要等待后续的阶段。例如,对于一个块生成的结果集合可以在处理后续的块之前或期间被返回。
[0084] 过滤/创建操作的示例系统实施
[0085] 图3A到3E是示出了根据一种实施例的在执行过滤和创建操作过程中的系统的不同状态的一系列方框图。具体地,这些图示出了处理以上表2所示的查询1的系统100。
[0086] 图3A是过滤操作开始时系统100的方框图。参考图3A,SALESMAN、CUSTOMER、和AMOUNT列以混合列式的方式驻留在RAM 102并且被分割在块302块310之间。具体地,分别由S1 304、C1 306、和A1 308示出的SALESMAN列、CUSTOMER列、和AMOUNT列的第一部分驻留于块302。分别由S2 312、C2 314、和A2 316示出的SALESMAN列、CUSTOMER列、和AMOUNT列的第二部分驻留在块310。
[0087] 当系统控制108接收查询1时,系统控制108确定如何评估谓词并且使得合适的列被加载到输入高速缓存110中。如由图3B示出的,首先评估AMOUNT>200谓词。因此,系统控制器108利用谓词330编程过滤单元112。AMOUNT列的第一部分A1 308被加载进输入高速缓存110中并且发送给过滤单元112。过滤单元112接着使用谓词330逐值评估A1 308的列数据(其中每个值对应于不同的行)以生成位向量Ap1 340,其指示A1 308的行满足AMOUNT>200谓词。第一位向量Ap1 340被示为下面表10中的Ap1。位向量高速缓存114存储该位向量用于后续处理。
[0088]AMOUNT Ap1
[0089]400 1
200 0
150 0
350 1
600 1
650 1
470 1
[0090] 表10:第一位向量Ap1,显示其中AMOUNT>200的行
[0091] 在已经评估AMOUNT>200谓词之后,以类似方式串行处理下两个谓词SALESMAN=Pedro和SALESMAN=Alex。例如,SALESMAN列S1 304可以被加载进输入高速缓存110中。系统控制108编程过滤单元112以在第一实例中将“=”操作应用到“Pedro”值并且在第二实例应用到“Alex”值。过滤单元112在每个实例中逐行评估SALESMAN列以生成第二和第三位向量。图3C是在已经处理所有谓词之后的系统的方框图。位向量Sp2 342代表响应于评估SALESMAN=Pedro谓词生成的位向量并且位向量Sp3 344代表响应于评估SALESMAN=Alex谓词生成的位向量。下面表11中示出这些位向量。
[0092]AMOUNT Ap1 SALESMAN Sp2 Sp3
400 1 Pedro 1 0
200 0 Pedro 1 0
150 0 Alex 0 1
350 1 Michael 0 0
600 1 Alex 0 1
[0093]650 1 Alex 0 1
470 1 Pedro 1 0
[0094] 表11:第二位向量Sp2,显示其中SALESMAN=Pedro的行,以及第三位向量Sp3,显示其中SALESMAN=Alex的行
[0095] 在一种实施例中,由过滤单元112生成的位向量与在块中存在的行一样多位的长度。例如,以上表10和11中所示的位向量的长度对应于对于每列被存储在块1 302中的值的数目。因此,位向量Ap1 340具有与A1 308中的行相同数目的位,并且位向量Sp2 342和Sp3 344具有与S1 304中的行相同数目的位。在这些表中,满足谓词的行被分配位值“1”并且不满足谓词的行被分配位值“0”。但是,依赖实施方式可以反转这些位值。
[0096] 在已经生成用于每个谓词的结果位向量之后,可以通过上面描述的组合过程生成最终位向量。在查询1情况下,组合过程可以按照由WHERE子句中的逻辑运算符所指示的被实施。因此,系统控制108首先编程组合单元116以对位向量Sp2 342和Sp3 344执行按位OR(或)。OR操作的结果接着用于执行与位向量Ap1 340的按位AND(与)。图3D示出在谓词结果位向量已被组合以产生用于检索过滤的行的最终集合的最终位向量之后的系统的方框图。
[0097] 参考图3D,位向量高速缓存114存储位向量Sp2|Sp3 344,其是来自于对位向量Sp2 342和Sp3 344执行按位OR操作的结果位向量。组合单元116接着使用位向量Sp2|Sp3 344和位向量Ap1 340执行按位AND操作以生成最终位向量Ap1(Sp2|Sp3)348。下面表12示出这些位向量。在表12的最后一个列所示的最终位向量代表在块1 302之内的满足查询1的所有谓词的行。
[0098]AMOUNT Ap1 SALESMAN Sp2 Sp3 Sp2 or Sp3 Ap1 and(Sp1 or Sp2)
400 1 Pedro 1 0 1 1
200 0 Pedro 1 0 1 0
150 0 Alex 0 1 1 0
[0099]350 1 Michael 0 0 0 0
600 1 Alex 0 1 1 1
650 1 Alex 0 1 1 1
470 1 Pedro 1 0 1 1
[0100] 表12:位向量组合操作的结果,包括用于块302的最终位向量
[0101] 最终位向量被发送给创建单元118,其使用此位向量从合适的列创建行。在查询1中,SELECT语句指示应当从销售表的SALESMAN、CUSTOMER、和AMOUNT列创建数据。因此,S1304可以从输入高速缓存110流入到创建单元118。创建单元118可以逐位通过最终位向量并且将应于最终位向量中的“1”的S1 304的行发送给输出高速缓存120。创建单元118使用相同的最终位向量对于CUSTOMER和AMOUNT列重复此过程。
[0102] 图3E是在过滤和创建操作的结尾处的系统的方框图。Sr1 350代表来自于块302的创建的SALEMAN列数据,Cr1 352代表来自于块302的创建的CUSTOMER列数据,以及Ar1354代表来自于块302的创建的AMOUNT列数据。此数据可以被作为结果发出同时系统开始处理块310。
[0103] 然后可以对存储在诸如块310之类的其它块中的数据重复上面描述的过滤和创建操作。为说明的目的,假定销售表也包括在下面表13显示的行。
[0104]SALE_ID SALESMAN CUSTOMER AMOUNT
8 Pedro Gainsley Corp. 100
9 Alex Lexau’s Lexan 370
10 Alex Lexau’s Lexan 500
11 Michael Lexau’s Lexan 120
12 Pedro Gainsley Corp. 280
[0105] 表13:示例销售表的附加行
[0106] 块310以列定位格式存储行8-12的数据。例如,S2 312可以以连续的次序存储以下值:Pedro、Alex、Alex、Michael、Pedro。类似地,C2 314存储CUSTOMER列的行8-12,并且A2 316存储AMOUNT列的行。
[0107] 下面表14示出在对存储在块310中的数据执行过滤操作之后生成的位向量。
[0108]AMOUNT Ap1 SALESMAN Sp2 Sp3 Sp2 or Sp3 Ap1 and(Sp1 or Sp2)
100 0 Pedro 1 0 1 0
370 1 Alex 0 1 1 1
500 1 Alex 0 1 1 1
120 0 Michael 0 0 0 0
280 1 Pedro 1 0 1 1
[0109] 表14:位向量组合操作的结果,包括用于块310的最终位向量
[0110] 表14最后一列所示的最终位向量识别块310内的满足所有查询谓词的行。创建单元118逐位分析此最终位向量并且将对应于最终位向量中的“1”的S2 312的行发送给输出高速缓存120。创建单元118使用相同的最终位向量对于C2 314和A2 316重复此处理。
[0111] 基于地址生成的选择性的行过滤
[0112] 在一些实施例中,可以基于从先前的谓词评估中获得的结果来约束在谓词评估期间提供给过滤单元112的行。例如,当评估后续的谓词时可以不必考虑不满足先前评估的谓词的某些行。通过向过滤单元112选择性地提供用于处理的行,过滤单元112可以避免不得不为每个谓词评估整列。
[0113] 图4是示出了根据一种实施例的具有用于执行过滤和创建操作的地址生成器的示例系统结构的方框图。系统400是系统100的包括地址生成器402的变型。系统400可以使用地址生成器402向过滤单元112选择性地提供被过滤的列的行。
[0114] 在一种实施例中,地址生成器402使用先前过滤的位向量结果向过滤单元提供用于后续过滤的行的子集。其中位向量用于约束提供给过滤单元112的行的方式依赖于查询中指定的逻辑运算符。例如,对于查询1,第一谓词与后续的谓词AND。因此,如果行不满足第一谓词,则对下两谓词该行不必考虑。
[0115] 在以上示例实施方式中,在产生位向量Sp2 342和Sp3 344时,地址生成器402可以使用位向量Ap1 340以向过滤单元112只提供满足第一谓词的行。具体地,因为与谓词AMOUNT>200相关联的位向量是1001111,所以对其他谓词不需要评估第二和第三行。可以省略的后续的评估的数目越大,查询评估越高效。例如,如果AMOUNT>200已经产生位向量0000000,则剩余谓词的全部评估可以被省略。
[0116] 因为下两个谓词被OR在一起,所以在评估第三谓词时不必考虑满足第二谓词的行。即,与第二谓词相关联的位向量1100001指示在评估第三谓词期间可以省略第一、第二和第七行。
[0117] 事实上,在评估第三谓词期间,地址生成器402可以使用第一和第二谓词的结果位向量以确定对第三谓词只需要评估第四、第五和第六行。具体地,可以省略第二和第三行,因为它们不能满足第一谓词,并且可以省略第一、第二和第七行,因为它们确实满足第二谓词。
[0118] 评估次序
[0119] 其中评估谓词的次序可以依赖实施方式改变。在一种实施例中,可以以顺序的次序评估谓词。例如,可以按照在查询中指定的从左至右或从右到左串行地评估谓词。
[0120] 在另一实施例中,谓词评估的次序可以基于谓词会过滤出大量行的可能性(即谓词的“选择性”)。当首先评估高选择性的谓词时,在过滤过程中较早地过滤出大量行。在系统400中,这导致地址生成器402在后续的谓词评估期间向过滤单元112提供行的较小子集。因此,在较小选择性的谓词之前处理较大选择性的谓词可以降低处理开销。
[0121] 在一种实施例中,系统控制108基于在查询中指定的运算符估计谓词的选择性。例如,与其它谓词AND的谓词比与其它谓词OR的谓词更可能有较高选择性。在另一示例中,相等谓词运算符(“=”)很可能比不等谓词运算符(“<>”或“!=”)有较高选择性。基于所述估计,系统控制108以从最高选择性的谓词到最小选择性的谓词的顺序的次序编程过滤单元112。
[0122] 在其它实施例中,并行处理在查询中指定的一个或多个谓词。例如,可以使用查询中指定的两个或更多个谓词来编程过滤单元112。过滤单元112可以同时评估两个谓词。下面描述用于并行化谓词评估处理的谓词的技术。
[0123] 在使用地址生成器的系统中创建过滤的数据
[0124] 在另一实施例中,地址生成器402可以将最终位向量转换成为用于满足所有查询谓词的每个行的存储器地址的集合。地址生成器402接着可以使用存储器地址从输入高速缓存110中只请求这些行并且将其提供给创建单元118用于输出。这可以节省处理的开销,因为整个列不必流过创建单元118。
[0125] 例如,在步骤214处,可以从位向量高速缓存114向地址生成器402提供最终位向量。地址生成器402然后为具有指示所述行满足谓词集合的对应位值的每个行确定存储器地址。地址生成器402使用这些存储器地址将存储器取出请求发送到输入高速缓存110。如果这些行已经被加载进输入高速缓存110中,接着它们可以被直接从输入高速缓存110流入到将所述行输出到输出高速缓存120的创建单元118。替代地,行可以被发送给地址生成器402。
[0126] 每列多个谓词
[0127] 在以上给出示例中,每次列数据通过式,过滤单元112应用单个谓词。在替代实施例中,过滤单元112可以被配置成为每列处理多个谓词。例如,样本查询1包括谓词SALESMAN=Pedro或SALESMAN=Alex。这两个谓词都涉及相同的列。因此,系统控制108可以利用两个谓词编程过滤单元以使得可以在SALESMAN列单次通过过滤单元112的情况下评估两个谓词。
[0128] 每单元多个列
[0129] 在以上给出的示例中,过滤单元112对单个列输入操作。在替代实施例中,过滤单元112可以包括多个列输入。当评估某些谓词时多个列输入可以是有用的。例如,子句WHERE SALESMAN=CUSTOMER参考在相同的谓词中的SALESMAN和CUSTOMER列。如果过滤单元112具有两个列输入,则可以在单次通过上评估谓词。即使如果两个列不包括在单个谓词中,具有多个列输入也可以用于对多个列同时处理谓词。
[0130] 依赖实施方式,创建单元118也可以包括多个列输入。例如,如果创建单元118具有多个列输入,则最终位向量可以被同时应用到多个列以并行创建结果。
[0131] 用于处理分组和聚合操作的示例结构
[0132] 在实施例中,专用硬件可以被配置为执行分组和聚合操作。图5是示出了根据一种实施例的可以被配置为执行分组和聚合数据库操作的示例系统结构。系统500可以包括系统100或系统400的所有元件。此外或作为创建单元118的替代,系统500也包括聚合单元502。
[0133] 系统500可以与系统100或400以任何适合的方式被组合或集成。重叠块的每一个可以被实施为相同的硬件单元或单独的独立单元。例如,过滤单元112可以是在系统100或系统400中执行谓词过滤的相同硬件单元。相同的单元也可以用于根据下面描述的技术基于列数据生成组。替代地,单独的过滤单元和/或其它数据库单元可以用来处理分组操作和过滤操作。在其它实施例中,系统500可以独立于系统100或400中示出的过滤和创建逻辑实施和/或与其分开实施。
[0134] 使用谓词过滤来分组和聚合数据
[0135] 图6是示出了根据一种实施例的用于执行分组和聚合操作的示例处理的流程图。可以在诸如在图5中示出的系统500之类的任何适合的系统上实施图6中示出的过程。
[0136] 参考图6,在步骤602中,接收包括用于聚合由一个或多个列分组的数据的请求的查询。例如,查询可以包括任何适合的聚合函数,包括但不限于列在表5上的那些。所述聚合函数可以与指定用于将聚合结果数据分组的一个或多个列的GROUP BY语句结合使用。但是,任何适合的语法可以用来指定聚合函数和分组列。
[0137] 在步骤604中,被分组的第一列的行被发送给过滤单元112。在样本查询3的情况中,例如,SALESMAN列的第一行可以被发送给过滤单元112。在样本查询4的情况中,根据以下描述的技术,SALESMAN和CUSTOMER列可以被组合并发送给过滤单元112。替代地,如果过滤单元112具有如下面进一步详细描述的多个列输入,则SALESMAN和CUSTOMER列两者的第一行都可以被同时发送给过滤单元112。
[0138] 在步骤606中,过滤单元112识别与列的第一行相关联的元素。在一种实施例中,所述元素是在列的第一行内存储的数据的项。例如,参考表3所示的示例销售表,SALESMAN列的第一元素是“Pedro”,并且CUSTOMER列的第一元素是“Gainsley Corp”。
[0139] 在步骤608中,过滤单元112使用等于步骤606识别的第一元素作为谓词以滤出不属于第一元素所属于的组的行。例如,假定在SALESMAN列中的第一元素是“Pedro”,过滤单元112使用谓词“SALESMAN=Pedro”以滤出不属于“SALESMAN=Pedro”组的所有行。系统控制108可以响应于在步骤602处接收查询利用此逻辑编程过滤单元112。
[0140] 在步骤610中,列的剩余行(即,除了第一行的那些行)被发给过滤单元112。在一种实施例中,在第一次通过中,剩余行以连续次序从输入高速缓存110流入到过滤单元112。在后续的通过中,地址生成器可以向过滤单元112只馈送那些先前未被分组的行。
[0141] 在步骤612中,过滤单元112滤出不满足过滤的行以生成第一行所属于的行的组(例如其中SALESMAN=Pedro的所有行的组)。此步骤可以包括生成识别满足所述相等谓词的每个行的位向量或其它数据结构。类似于上面描述的谓词过滤,位向量的每个位可以对应于列内的不同的行,其中第一位值指示行满足相等谓词并且因此是所述组的一部分,并且第二位值指示行不满足相等谓词并且因此不是所述组的一部分。
[0142] 在步骤614中,第一行和匹配第一行的行被分组并且发送给聚合单元502。在示例实施例中,过滤单元112将在步骤612处生成的位向量发送到地址生成器402,其使用位向量以从存储器中只请求那些作为当前组的一部分的行。一旦接收,地址生成器402将这些行发送到聚合单元502用于聚合。
[0143] 在步骤616中,聚合单元502按照查询所指示的聚合分组的行的值。在查询3和4的情况中,例如,聚合单元502将存储在AMOUNT列中的分组的行的值相加。
[0144] 在步骤618中,系统500确定是否存在还未被分组的任何剩余行。如果存在,则过程返回到步骤604,其中只对于那些还没有被分组的行重复分组和聚合操作。因此,过滤单元112被重编程以使用第一未分组的行的元素作为相等谓词以形成新的组。
[0145] 在表3的本示例中,将把行1和2分组到SALESMAN=Pedro组中。因此,第三行将是第一还未分组的行。第三行在SALESMAN列中具有值“Alex”,SALESMAN列是查询的分组列。因此,基于过滤SALESMAN=Alex确定第二组。第二组将包括行3、5和6。
[0146] 在步骤604的第三迭代期间,行4是第一剩余未分组的行。行4在SALESMAN列中具有值“Michael”。因此,基于过滤SALEMAN=Michael确定第三组。第三组将仅仅包含行4。在第三组形成之后,图6中示出的过程将结束,因为将不存在剩余未被分组的行。
[0147] 在每个迭代期间,系统500基于新的谓词生成并聚合组。如果所有行已被分组,则过程结束。如果相关列被存储在多个RAM块上,则此过程可以对于多个RAM块的每一个被重复以产生最终结果,如下面进一步详细描述的。
[0148] 基于先前生成的位向量确定后续的分组
[0149] 在一种实施例中,在步骤612生成的用于识别行分组的位向量(这里称为“组-成员位向量”)也可以用于选择性地向过滤单元112选提供行以用于后续分组。具体地,在组-成员位向量中的每个位对应于特定行。当位被设置为诸如组-成员位向量内的“1”之类的第一位值时,这指示用于特定行的组已被识别。如果没有一个已经生成的组-成员位向量已将用于特定行的位设置为第一位值,则特定行还未与组相关联。因此,该特定行可以被提供给过滤单元112以用于后续处理以确定所述特定行属于哪个组。
[0150] 组合单元116可以对在步骤612处生成的一个或多个组-成员位向量执行按位操作以生成识别未分组的行的位掩码。在一种实施例中,在生成第一位向量之后,可以对位向量执行按位NOT(非)操作。这产生位掩码,其中第一位值识别先前未被分组的行。因此,地址生成器402可以以同样方式操作以将位掩码转换成用于这些行的存储器地址。地址生成器402然后可以请求这些行的检索,并且仅请求这些行,以便只有这些还未分配给组的行被提供给过滤单元112以用于后续的分组和聚合操作。
[0151] 在已经生成第二组-成员位向量之后,NOT操作不会单独工作以识别先前未分组的行,因为现在在集合中存在多个位向量。因此,为了生成识别先前未分组的行的位掩码,组合单元116可以在用于当前组的组-成员位向量与先前生成的位掩码之间执行按位异或(XOR)操作。在下面示例实施方式中示出了此过程。
[0152] 逐块分组和聚合
[0153] 在一种实施例中,可以在逐块基础上执行上面描述的分组和聚合操作。例如,可以在多个RAM块中以混合列式格式存储表数据。可以对第一块实施图6的过程以生成识别第一块内的组和聚合值的第一结果集合。可以对于剩余RAM块的每一个以相同方式重复此过程。因此,对于每个剩余RAM块生成识别分组和聚合结果的结果集合。
[0154] 依赖特定实施方式,输出高速缓存120可以在已经完成对多个块的处理之前充满数据。例如,如果相关数据遍布许多块,则输出高速缓存120可能不具有足够的存储器以存储用于每个块的结果集合。如果存在大量组或列数据元素是大的,则在输出高速缓存120中的存储器也可能被更快速地占用。
[0155] 为了释放在输出高速缓存120中的存储空间或为了生成最终结果,根据在图6中描述的过程,用于不同块的多个结果集合可以被分组并且聚合。例如,在输出高速缓存充满或可用存储空间量小于阈值之后,输出高速缓存120中的数据可以被发送给输入高速缓存110。分组和聚合操作然后以如先前描述的相同方式对输入高速缓存数据运行。因此,不同结果集合的结果记录被分组和聚合,其可以通过合并结果集合释放更多存储器。如果此过程未在输出高速缓存120中释放空间或输出高速缓存120达到如此高的占用状态以至于性能严重降低,则输出高速缓存内容可以被传递到诸如通用处理器之类的另一个单元用于更大规模聚合。
[0156] 分组/聚合操作的示例系统实施方式
[0157] 图7A到7E是示出了根据一种实施例的在执行分组和聚合操作过程中的系统的不同状态的一系列方框图。具体地,这些图示出了处理以上表6所示的样本查询3的系统500。
[0158] 图7A示出在处理用于查询3的第一组之后的系统图。如示出的,在多个块之间划分SALESMAN和AMOUNT列。SALESMAN列的第一部分S1 704和AMOUNT列的第一部分A1 706被存储在块702中,并且SALESMAN列的第二部分S2 712、和AMOUNT列的第二部分A2 714被存储在块710中。在实施例中,以混合列式格式在这些块内存储数据。
[0159] 当接收查询3时,系统控制108使得SALESMAN列的第一部分S1 704被加载到输入高速缓存110中。SALESMAN列可以从输入高速缓存110流到过滤单元112以基于SALESMAN列分组行。为了计算第一组,系统控制108编程过滤单元112以使用等于SALESMAN的第一元素作为过滤谓词。这由图7A的谓词720表示。在本示例中,SALESMAN列的第一元素是“Pedro”,因此第一组是其中SALESMAN=Pedro的行的组。
[0160] 过滤单元112可以以上面描述的用于过滤和创建操作的同样方式进行操作,具有用于确定列的第一元素以便在谓词评估中使用的附加逻辑。一旦使用谓词720编程,SALESMAN列的剩余行从输入高速缓存110流到过滤单元112用于评估。给定表3所示的样本销售表以及过滤SALESMAN=Pedro,则过滤单元112将生成下面表15所示的组-成员位向量。
[0161]SALESMAN Bitvector1
Pedro 1
Pedro 1
Alex 0
Michael 0
Alex 0
Alex 0
Pedro 1
[0162] 表15:来自谓词SALESMAN=Pedro的过滤单元输出
[0163] 组-成员位向量1对应于谓词720的谓词结果。具有值“1”的组-成员位向量中的每个位识别具有值“Pedro”的SALESMAN列中的行。因此,属于第一组的所有行由相同的位值识别。相反地,具有位值“0”的每个位识别不具有“Pedro”值的行,并且因此不属于第一组。
[0164] 在过滤单元112已经生成表15所示的组-成员位向量之后,组-成员位向量然后可以被发送给聚合单元502。聚合单元502对由位向量指示为满足谓词720的AMOUNT列的行进行操作。在一种实施例中,地址生成器402将组-成员位向量转换成在对应位值等于“1”的A1 706中的行的存储器地址。这些存储器地址用于将来自于属于组的行的A1 706中的值从RAM 
102检索到输入高速缓存110。这些值然后被提供给聚合单元502用于聚合。
[0165] 除组-成员位向量之外,聚合单元502也接收它将要执行的聚合操作的类型的指示。例如,系统控制108可以编程聚合单元502以执行在查询中指定的聚合函数。示例聚合函数包括但不限于表5所示的聚合函数。在查询3的情况下,聚合单元502将存储在由组-成员位向量1指示的AMOUNT列的行中的数据相加。聚合单元502可以生成用于结果集合的两个输出:组的名称和用于组的聚合操作的结果。下面表16示出当处理查询3时的第一组的输出。聚合单元502在输出高速缓存120中存储此输出(聚合结果750)。
[0166]GROUP(组) SUM(和)
Pedro 1070
[0167] 表16:聚合单元的第一输出
[0168] 某些聚合操作可以包含多于两个输出。例如,AVG函数可以保存GROUP、RUNNING AVERAGE、和TOTAL ELEMENTS以便为组的后续出现计算平均值。
[0169] 图7B是在处理第二组之后的系统图。与对第一组-成员位向量操作的聚合单元502以生成用于第一组的聚合结果同时,过滤单元112可以开始产生用于第二组的下一个组-成员位向量。此时,过滤单元112仅仅馈送当它们第一次被传递通过过滤单元时产生“0”的行。在示例实施例中,组合单元116对位向量1执行按位NOT操作以生成位向量掩码~Bitvector1  730并且在位向量高速缓存114中存储此位向量掩码。位向量掩码~Bitvector1 730识别还没有被分组的所有行。
[0170] 一旦生成,此位向量掩码然后可以被发送给地址生成器402,其将~Bitvector1 730转换到用于先前没有分组的行的存储器地址并且只使得这些行被传送到过滤单元112。
过滤单元112然后可以通过采取来自于由地址生成器402提供的先前未分组的行中的第一元素并且使用与此第一元素相等作为新的谓词722来对这些未分组的行操作。在本示例中,与值“Alex”相等被用作新的谓词722。过滤单元112评估先前没有被使用谓词722分组的剩余行以生成用于第二组的组-成员位向量Bitvector2 732,并且在位向量高速缓存114中存储此组-成员位向量。Bitvector2 732中具有位值“1”的每个位对应于属于第二组的行。聚合单元502使用Bitvector2以生成聚合结果752,其将用于第二组中的那些行的AMOUNT列相加。结果752被存储在输出高速缓存120中。
[0171] 图7C是在处理第三组之后的系统图。处理第三组可以以与处理第二组类似的方式进行,除了不同的位向量掩码被用于指示哪些行应当被发送给过滤单元112之外。为了确定哪些行应当被提供给过滤单元112,组合单元116可以对Bitvector2和先前的位向量掩码~Bitvector1执行异或(XOR 742)按位运算以生成新的位向量掩码BV掩码736。BV掩码736的具有位值“1”的每个位对应于还没有被分组的行。地址生成器402使用BV掩码736为过滤单元112提供还没有被分组的行。过滤单元112使用与值“Michael”相等作为新的谓词724以生成Bivector3 734。聚合单元502使用Bitvector3 734以生成聚合结果754,其将用于在第三组中的那些行的AMOUNT列相加。结果754被存储在输出高速缓存120中。下面表17示出在这些步骤中生成的组-成员位向量。如果在块中存在附加组,则它们的处理将类似于第三组。
[0172]SALESMAN Bitvector1 Bitvector2 Bitvector3
Pedro 1 0 0
[0173]Pedro 1 0 0
Alex 0 1 0
Michael 0 0 1
Alex 0 1 0
Alex 0 1 0
Pedro 1 0 0
[0174] 表17:过滤单元的第三次通过产生的位向量
[0175] 在第一块中的数据的聚合结尾处,存储在输出高速缓存120中的表可以由下面表18所示的表表示。
[0176]GROUP SUM
Pedro 1070
Alex 1400
Michael 350
[0177] 表18:在单个块之后的聚合输出
[0178] 图7D是在已经处理RAM中的两个块之后的系统图。具体地,施加于块702的相同的处理可以施加于块710以分组并聚合存储在第二块中的数据。块710存储SALESMAN列的第二部分S2 712,和AMOUNT列的第二部分A2 714。为了简单,假定在块710中,用于Pedro、Alex、和Michael的销售分别共计1000、2000、和3000。因此,分组和聚合操作生成结果集合756,其连同在处理第一块时生成的结果集合一起被存储在输出高速缓存120中。因此,输出高速缓存120存储组合的结果集合758。下面表19显示在已经处理两个块之后的输出的表示。
[0179]GROUP SUM
Pedro 1070
Alex 1400
[0180]Michael 350
Pedro 1000
Alex 2000
Michael 3000
[0181] 表19:在两个块之后的聚合输出
[0182] 图7E是输出高速缓存中的结果已被处理之后的系统图。如果在输出高速缓存120中的可用存储器小于阈值或用于每个块的最终聚合结果准备被计算,则结果集合758可以被发送给输入高速缓存110用于进一步处理和合并。然后对输入高速缓存数据以先前描述的相同的方式运行分组和聚合操作。在此聚合操作之后,下面表20显示在结果高速缓存中结束的数据。此数据在输出高速缓存120中被存储为结果760。
[0183]GROUP SUM
Pedro 2070
Alex 3400
Michael 3350
[0184] 表20:在对完整结果高速缓存聚合之后的结果高速缓存数据
[0185] 因此,对于每个块生成的单独的结果集合被分组并且聚合以生成用于两个块的单个结果集合。
[0186] 如果存在剩余的附加RAM块,则此过程继续直到所有块被聚合。如果结果高速缓存完全地充满或达到如此高的占用状态以至于性能严重降低,则结果高速缓存内容可以被传递到诸如通用处理器之类的另一个单元用于更大规模聚合。
[0187] 高速缓存尺寸
[0188] 输入高速缓存110、位向量高速缓存114、和输出高速缓存120的尺寸可以依赖特定实施方式改变。小的高速缓存具有若干益处,包括更快操作和更小的面积消耗。但是,较大的高速缓存的尺寸可以降低在过滤和创建操作期间RAM访问的数目。因此,各种高速缓存的最优高速缓存尺寸可以依赖实施方式改变。
[0189] 在一种实施例中,输入高速缓存110、位向量高速缓存114和/或输出高速缓存120的尺寸被选择以接近RAM的诸如块104A到104N之类的一个或多个块的尺寸。在接近块尺寸的高速缓存尺寸的情况下,系统可以以逐块或多块基础有效地执行过滤和创建操作,具有有限的RAM访问。
[0190] 在另一实施例中,高速缓存被定尺寸以使得输入高速缓存具有足够的存储器用于被分组的列以及存储聚合数据的列。如果组基数大于块中的基数,则这些列二者都可以被处理多次,因此让高速缓存足够大以存储两个列可以节省从RAM重复地读取它们的时间和功率。
[0191] 在另一实施例中,输出高速缓存可以被依赖整个数据集的期望的基数以及块内的基数定尺寸。块内的组的数目的基数越高,输出高速缓存将越快填满,使得在以上描述的分组和聚合操作期间更频繁地聚合所述结果数据。同样,如果组数据的总体基数是高的,则输出高速缓存可能不能为每个组保存结果,不管执行多少额外的聚合。如果输出高速缓存是满的,甚至在已经对它的内容运行聚合之后,则高级的处理节点可以用来完成聚合,其可以引起性能上的降低。因此,足够大以至少保存最终结果集合的输出高速缓存可以改善性能。
[0192] 也可以基于用于RAM 102和诸如过滤单元112、组合单元116、和创建单元118之类的数据库单元的存储接口的相对速度选择高速缓存的尺寸。如果存储器与数据库单元相比是快速的,则较小的高速缓存可以是优选的,因为与频繁的加载相关联的成本可以是小的。相反地,如果存储器与数据库单元的处理速度相比是慢的,则较大的高速缓存尺寸可能是更高效的。
[0193] 在另一实施例中,基于数据库工作量的性质选择输入高速缓存110、位向量高速缓存114和/或输出高速缓存120的尺寸。在有些情况下,块内的列数据可以被数据库单元处理多次,诸如在许多谓词应用于相同的列时。如果此类情况在特定实施方式中是普遍的,则较大的高速缓存尺寸可以通过允许列数据存在于高速缓存中较大的时间段而改善性能。
[0194] 多列分组
[0195] 以上分组和聚合示例描述处理表6的查询3,但是相同的系统可以处理查询4,其基于多个列而不是单个列分组数据。在一种实施例中,包含在GROUP BY中的列可以被组合在一起。例如,在查询4的情况下,SALESMAN和CUSTOMER列可以被组合,诸如通过链接。组合的列然后可以在步骤602中被发给过滤单元112。这两个列在某些点将被分开,诸如在写入到输出高速缓存之前。系统500可以包括用于在列被发给过滤单元112之前组合列的附加数据库单元和用于在输出高速缓存120之前分开列的附加数据库单元。
[0196] 在另一实施例中,诸如上面描述的,能够对多个列操作的过滤单元被用于处理多列分组。例如,具有多个列输入的过滤单元将能在单次通过中实施并且评估诸如SALESMAN=SALESMAN列的第一元素AND CUSTOMER=CUSTOMER列的第一元素之类的谓词。对于查询3,能够处理两个列输入的过滤单元将是足够的。如果GROUP BY由多于两个列分组数据,则过滤单元可以被配置为接受更多列或系统可以重复通过列的组合。
[0197] 每次通过多个组
[0198] 在实施例中,过滤单元112可以被配置为处理多个流以使得多个组可以被在单次通过中确定。例如,因为CUSTOMER列由过滤单元112处理,所以一个流可以应用谓词SALESMAN=SALESMAN的第一元素,而另一个流等待SALESMAN的第一情况!=SALESMAN的第一元素并且使用SALESMAN值作为相等谓词。此方法与在之前部分描述的用于执行多列分组的技术相似,但是相同的列被发送给所有流并且所述谓词基于先前谓词的结果。
[0199] 根据此过程,过滤单元112生成用于它处理的每个组的组-成员位向量。如果过滤单元每次通过能够产生N个组,其中N代表正整数值,则位向量高速缓存114可以被配置为存储N+2个组-成员位向量:作为过滤单元112的输出的N个位向量,将所述N个位向量OR在一起的一个位向量,和对如以上示例实施方式所述的OR的位向量操作的位向量掩码。
[0200] 在替代实施例中,位向量高速缓存114可以依赖实施方式被配置为存储N或N+1个位向量。例如,N个位向量中的一些可以被OR组合或位向量掩码覆写。
[0201] 当聚合数据时,聚合单元502可以对N个位向量顺序操作。替代地,如果聚合单元502也被配置为处理多个流,则聚合单元502可以同时对这些位向量操作。
[0202] 附加并行性
[0203] 上面描述的技术示出了呈现的步骤的顺序处理。但是,依赖实施方式,一些步骤可以被并行执行。例如,组合单元116可以在位变得可以从过滤单元112中获得时处理位向量而不是等待过滤单元112完成谓词评估。如另一示例,在创建单元118正为输出高速缓存120处理列的同时,过滤单元112可以开始处理要被过滤的下一列。诸如高速缓存加载和访问之类的其它步骤也可以与其它过滤和创建步骤并行执行。在又一示例中,在聚合单元502正为输出高速缓存120处理列的同时,过滤单元112也可以开始处理下一组。也可以并行操作诸如高速缓存加载和访问之类的其它操作。
[0204] 硬件总览
[0205] 根据一种实施例,由一个或多个专用目的计算设备执行这里描述的技术。专用计算设备可以被硬布线以执行技术,或可以包括诸如一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)之类的被持久编程以执行技术的数字电子设备,或可以包括一个或多个通用的硬件处理器,其被编程以按照固件、存储器、其它存储器、或组合中的程序指令执行技术。此类专用目的计算设备也可以组合定制硬布线逻辑、ASIC、或具有自定义编程的FPGA以实现技术。专用目的计算设备可以是桌面计算机系统、便携式计算机系统、手持设备、网络设备或合并硬布线和/或程序逻辑以执行技术的任何其它设备。
[0206] 例如,图8是示出了在其上可以实施本发明的实施例的计算机系统800的框图。计算机系统800包括总线802或用于通信信息的其它通信机构,和用于处理信息的与总线802耦合的硬件处理器804。硬件处理器804可以是例如通用微处理器
[0207] 计算机系统800也包括诸如随机存取存储器(RAM)或其它动态存储器之类的耦接到总线802的用于存储要由处理器804执行的信息和指令的主存储器806。例如,可以在主存储器806中实施RAM102。主存储器806也可以用于在执行由处理器804运行的指令期间存储临时变量或其它中间信息。当存储在处理器804可访问的非瞬时存储介质时,此类指令使得计算机系统800成为专用目的机器,其被定制以执行指令中指定的操作。
[0208] 计算机系统800还包括耦接到总线802的用于存储用于处理器804的静态信息和指令的只读存储器(ROM)808或其它静态存储器设备。诸如磁盘或光盘之类的存储设备810被提供并且耦接到总线802用于存储信息和指令。
[0209] 计算机系统800可以经由总线802连接到诸如阴极射线管(CRT)之类的用于向计算机用户显示信息的显示器812。包括字母数字和其它键的输入设备814被耦接到总线802以向处理器804通信信息和命令选择812。用户输入设备的另一个类型是用于向处理器804通信方向信息和命令选择并用于控制光标在显示器上移动的光标控制816,诸如鼠标跟踪球、或光标方向键812。此输入设备通常具有两个轴的两个自由度,第一轴(例如,x)和第二轴(例如,y),其允许设备指定平面中的位置812。
[0210] 计算机系统800也可以包括用于执行过滤、创建、分组、和/或聚合操作的查询处理逻辑832。可以使用在系统100、系统400、或系统500中示出的一个或多个元件实施查询处理逻辑832。
[0211] 计算机系统800可以利用计算机系统与其结合以使得或编程计算机系统800成为专用目的机器的定制的硬布线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑实施这里描述的技术。根据一种实施例,由计算机系统800响应于处理器804运行包含在主存储器806中的一个或多个指令的一个或多个序列执行这里的技术。此类指令可以从诸如存储设备810之类的另一个存储介质被读入到主存储器806。包含在主存储器806中的指令序列的运行使得处理器804执行这里描述的处理步骤。在替代实施例中,可以使用硬布线电路代替软件指令或与其组合使用。
[0212] 这里使用的术语“存储介质”是指存储使得机器以特定的方式操作的数据和/或指令的任何非瞬时介质。此类存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如诸如存储设备810之类的光盘或磁盘。易失性介质包括动态存储器,诸如主存储器806。存储介质的常见形式包括例如,软盘、软磁盘、硬盘、固态驱动器、磁带、或任何其它磁数据存储介质、CD-ROM、任何其它光数据存储介质、具有孔样式的任何物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒。
[0213] 存储介质与传输介质不同但是可以与传输介质结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴电缆线和光纤,包括构成总线802的线路。传输介质也可以采取声波或光波的形式,诸如那些在放射波和红外线数据通信期间生成的。
[0214] 在向处理器804传送一个或多个指令的一个或多个序列以用于运行中可以包含各种形式的介质。例如,指令可以最初被携带在远程计算机的磁盘或固态驱动器上。远程计算机可以加载指令到它的动态存储器中并将所述指令通过电话线利用调制解调器发送。在计算机系统800本地的调制解调器可以在电话线上接收数据并且使用红外线发送器将数据转换为红外信号。红外检测器可以接收在红外信号中携带的数据并且合适的电路可以将数据放置在总线802上。总线802将数据运到主存储器806中,处理器804从其中检索并运行指令。由主存储器806接收到的指令可以可选地在由处理器804运行之前或之后被存储在存储设备810。
[0215] 计算机系统800也包括耦接到总线802的通信接口818。通信接口818提供耦接到网络链路820的双向数据通信,所述网络链路820连接到本地网络822。例如,通信接口818可以是综合服务数字网(ISDN)卡、电缆调制解调器、卫星调制解调器、或向对应类型的电话线提供数据通信连接的调制解调器。如另一示例,通信接口818可以是向兼容的LAN提供数据通信连接的局域网(LAN)卡。也可以实施无线链路。在任何此类实施方式中,通信接口818发送并接收携带表示各种类型信息的数字数据流的电的、电磁的或光信号
[0216] 网络链路820通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路820可以通过本地网络822向主机824或由互联网服务供应商(ISP)826操作的数据装置提供连接。ISP 826随后通过现在普通被称为“互联网”828的全球分组数据通信网络提供数据通信业务。本地网络822和互联网828两者都使用携带数字数据流的电的、电磁的或光信号。通过各种网络的信号和网络链路820上并通过通信接口818的信号,其携带有往返于计算机系统800的数字数据,是传输介质的示例形式。
[0217] 计算机系统800可以通过网络、网络链路820和通信接口818发送消息并接收包括程序代码的数据。在互联网示例中,服务器830可以通过互联网828、ISP 826、本地网络822和通信接口818发送用于应用程序的请求码。
[0218] 接收到的代码可以被处理器804按照接收的运行,和/或被存储在存储设备810或其它非易失性存储器中用于稍后运行。
[0219] 扩展和替代
[0220] 在上述说明书中,已经参考在实施方式到实施方式可变的许多细节描述了本发明的实施例。因此,说明书和附图应当被认为是说明性的,而不是约束意义上的。本发明范围的唯一和专用的指标、和由申请人指定的本发明范围的内容是由此本申请发出的权利要求书的文字和等效范围,以此类权利要求发出的特定形式,包括任何随后校正。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈