CN104685499A - 过滤/投影操作的硬件实现 - Google Patents
过滤/投影操作的硬件实现 Download PDFInfo
- Publication number
- CN104685499A CN104685499A CN201380050949.6A CN201380050949A CN104685499A CN 104685499 A CN104685499 A CN 104685499A CN 201380050949 A CN201380050949 A CN 201380050949A CN 104685499 A CN104685499 A CN 104685499A
- Authority
- CN
- China
- Prior art keywords
- predicate
- row
- result
- value
- filter element
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9535—Search customisation based on user profiles and personalisation
Abstract
描述了用于执行过滤和投影操作的技术。在实施例中,接收到指定用于过滤查询的结果的准则的谓词集合。基于该谓词集合中的特定谓词,生成特定列的至少一部分的谓词结果。所述谓词结果识别第一列中满足所述特定谓词的行。至少部分地基于所述谓词结果来选择并返回行作为查询的结果。在实施例中,所述谓词结果是位向量,其中该位向量的每一位都对应于所述特定列中的特定行并且识别所述特定行是否满足所述特定谓词。
Description
技术领域
本公开内容一般涉及用于执行数据库操作的技术,并且更具体地,涉及用于执行过滤和投影操作的技术。
背景技术
在本节中描述的方法是可以实行的方法,但不一定是先前已被构想或实行的方法。因此,除非另有指示,否则不应当假设本节中描述的任何方法仅仅因为它们被包括在本节中就算作现有技术。
数据库包括存储在诸如硬盘组的一个或多个存储设备上的数据和元数据。根据实现方式,数据库中的数据可以按照各种数据模型进行逻辑上的组织。例如,关系数据库系统通常将数据存储在表的集合中,其中每张表被组织成一组行和列。在大多数情况下,每一行代表不同的对象,并且每一列代表不同的属性。但是,其它数据模型也可用来组织数据。
为了访问和操纵数据库中的数据,数据库管理系统(DBMS)一般被配置为接收和处理各种数据库命令,这些命令通常被称为查询。在许多实现方式中,DBMS支持遵循数据操纵语言(DML)的查询,诸如结构化查询语言(SQL)。当DBMS接收到查询时,DBMS执行由该查询指定的一个或多个数据库操作并且可以输出查询结果。示例数据库操作包括过滤、投影、聚合和分组操作,这些将在以下进一步详细描述。
过滤和投影操作
过滤和投影操作是从特定行的特定列输出值的数据库操作,其中行是基于一些被称为谓词的准则进行过滤的。在SQL中,投影和过滤操作使用SELECT和WHERE语法。具体而言,SELECT语句指示什么数据被投影(即,从哪些列中检索输出值)并且WHERE子句包括谓词来过滤输出(即,指示从哪些行中检索输出值)。用于WHERE子句的运算符的例子包括但不限于以下表1中示出的运算符。
运算符 | 描述 |
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
BETWEEN | 在两个值之间(包含这两个值) |
LIKE | 查找模式 |
IN | 为列指定一组具体值 |
表1:示例谓词运算符
以下表2中示出了示例过滤和投影查询。
表2:过滤/投影查询样例
该查询过滤sales表中的数据,过滤的准则是salesman必须是Pedro或Alex,并且销售量(amount)必须大于200。对于sales表中满足这些准则的每条记录,该查询将返回该记录中指定的相关联的salesman、customer和amount。
例如,以下表3示出了示例sales表。
SALE_ID | SALESMAN | CUSTOMER | AMOUNT |
1 | Pedro | Gainsley Corp. | 400 |
2 | Pedro | Lexau’s Lexan | 200 |
3 | Alex | Lexau’s Lexan | 150 |
4 | Michael | Lexau’s Lexan | 350 |
5 | Alex | Gainsley Corp. | 600 |
6 | Alex | Lexau’s Lexan | 650 |
7 | Pedro | Gainsley Corp. | 470 |
表3:示例sales表
给定表3的示例sales表,则以下表4示出了执行查询1的期望输出。
SALESMAN | CUSTOMER | AMOUNT |
Pedro | Gainsley Corp. | 400 |
Alex | Gainsley Corp. | 600 |
Alex | Lexau’s Lexan | 650 |
Pedro | Gainsley Corp. | 470 |
表4:示例查询的输出
聚合和分组操作
聚合和分组操作是提供关于具体列中数据的汇总统计的数据库操作。在SQL中,分组操作使用GROUP BY语法来按照一个或多个列来分组聚合函数的结果。以下表5示出了可以与GROUP BY语句一起使用的示例聚合函数。
函数名称 | 描述 |
AVG | 返回列的平均值 |
COUNT | 返回列的行数 |
FIRST | 返回列的第一个值 |
LAST | 返回列的最后一个值 |
MAX | 返回列的最大值 |
MIN | 返回列的最小值 |
SUM | 返回列的所有值的总和 |
表5:示例聚合函数
以下表6中示出了示例聚合和分组查询。
表6:示例聚合查询
查询2请求公司已产生的以美元为单位的总销售量。当执行查询2时,DBMS执行聚合但不分组。DBMS无条件地合计(sum)sales表中所有的数量(amount)来返回最终结果。给定表3的示例sales表,则以下表7示出了执行查询2的期望输出。
sum(AMOUNT) |
2820 |
表7:查询2的结果表
查询3请求按照完成该销售的salesman(销售人员)进行分组的以美元为单位的总销售量。当执行查询3时,DMBS执行分组和聚合两者。具体而言,DBMS为sales表中每个唯一的salesman生成一个聚合结果,其中该结果是特定salesman的总销售量。给定表3的示例sales表,则以下表8示出了执行查询3的期望输出。
SALESMAN | sum(AMOUNT) |
Pedro | 1070 |
Alex | 1400 |
Michael | 350 |
表8:查询3的结果表
查询4请求按照与销售相关联的salesman和customer进行分组的以美元为单位的总销售量。当执行查询4时,DMBS执行多列分组和聚合。在这种情况下,每个唯一的salesman-customer对将有一个聚合结果,并且该聚合结果是特定salesman-customer对的总销售量。给定表3的示例sales表,以下表9示出了执行查询4的期望输出。
SALESMAN | CUSTOMER | sum(AMOUNT) |
Pedro | Gainsley Corp. | 870 |
Pedro | Lexau’s Lexan | 200 |
Alex | Gainsley Corp. | 600 |
Alex | Lexau’s Lexan | 800 |
Michael | Lexau’s Lexan | 350 |
表9:查询4的结果表
附图说明
在附图的图示中说明本公开内容意在作为例子而非意在限制,并且其中相同的附图标记指相似的元件,其中:
图1是根据实施例说明用于执行过滤和投影操作的示例系统体系结构的框图;
图2是根据实施例说明用于执行过滤和投影操作的示例过程的流程图;
图3A至3E是根据实施例说明在执行过滤和投影操作的过程中系统的不同状态的系列框图;
图4是根据实施例说明具有用于执行过滤和投影操作的地址生成器的示例系统体系结构的框图;
图5是根据实施例说明用于执行分组和聚合操作的示例系统体系结构的框图;
图6是根据实施例说明用于执行分组和聚合操作的示例过程的流程图;
图7A至7E是根据实施例说明在执行分组和聚合操作的过程中系统的不同状态的系列框图;
图8是实施例可在其上实现的计算机系统的框图。
具体实施方式
在以下描述中,为了解释的目的,阐述了众多具体的细节,以便提供对本发明的透彻理解。但是,很显然,本发明没有这些具体细节也可以实施。在其它情况下,众所周知的结构和设备以框图形式示出,以避免不必要地混淆本发明。
总体概述
在此描述的技术用于执行过滤、投影、分组以及聚合操作。在实施例中,可以配置专用的硬件来执行这些数据库操作。专用的硬件可以通过减少流到计算机系统的速率受限部件的数据量来加快查询处理,这可以帮助减轻数据瓶颈。具体地,专用的硬件可以减少在过滤和投影操作期间需要存储在RAM中的数据量,从而减少评估查询所需的RAM输入/输出(I/O)操作。此外,专用的硬件减少了在大多数常见的通用处理器中存在的用于执行数据库操作的指令开销。
此外,专用的硬件可以允许多个数据通过过滤单元,这提供了评估复杂查询谓词的灵活性。还有,专用的硬件可以提供谓词的非线性评估和处理,使得过滤单元不必与恒定的数据输入流保持同步。
根据在此描述的其它技术,可以执行分组和聚合而无需对表数据进行全局排序。避免全局排序减轻了在排序大列表时发生的随机存储器访问问题。例如,当排序列表时,某个项可能会进入位于存储器的某一块的组中,而下一项可能属于位于存储器的另一个块的组。在这种情况下,写入所排序的表通常会需要关闭和打开新的存储器页。
此外,描述了允许在存储器的小块上执行分组和聚合的技术,这使得随机访问发生在高速、低功耗的高速缓存中。
根据在此描述的实施例,生成了诸如位向量(bitvector)的数据结构来指示哪些行满足一个或多个谓词。在示例实施例中,为查询中的每个谓词生成位向量,以指示数据库中哪些行满足相应的谓词。在为每个谓词都生成位向量之后,使用按位(bitwise)运算符来合并这些位向量以生成最终位向量。最终位向量指示哪些行满足谓词集合中的所有谓词,并且可以用在投影操作中来选择行作为查询的结果输出。
在其它实施例中,生成诸如位向量的数据结构来指示哪些行在分组和聚合操作期间是相同分组的一部分。例如,可以生成位向量集合,其中该集合中的每个位向量都对应于不同的分组。每个位向量中的位的位置对应于特定的行。如果对应于该位的行是由该位向量表示的分组的一部分,则该位向量中每一位的位值被设置为第一位值,如果对应的行不是该分组的一部分,则该位向量中每一位的位值被设置为第二位值。因此,位向量可以用来轻松地识别属于同一分组的行,并且可以在执行聚合来自这些行的列的值的操作过程中使用。
用于处理过滤和投影操作的示例体系结构
操作
图1根据实施例说明可以配置为执行过滤和投影数据库操作的示例系统体系结构。系统100一般包括RAM 102、存储器控制器106、系统控制108、输入高速缓存110、过滤单元112、位向量高速缓存114、合并单元116、投影单元118以及输出高速缓存120。
如由块104A至104N所示出的,RAM 102存储N个数据块,其中N可以是任何正整数。RAM 102可以利用允许随机访问所存储的数据的任何合适的计算机数据存储器来实现。RAM 102的例子可以包括但不限于动态RAM(DRAM)和静态RAM(SRAM)。
存储器控制器106是管理进出RAM 102的数据流的存储器控制器。例如,存储器控制器106可以处理对RAM 102的读数据和写数据请求。存储器控制器106可以利用任何合适的存储器控制器来实现,包括但不限于双倍数据速率DDR存储器控制器、双通道存储器控制器或全缓冲存储器控制器。
输入高速缓存110、位向量高速缓存114和输出高速缓存120是存储器高速缓存,它们按照以下进一步描述的技术在查询处理期间存储数据。通过高速缓存该数据,可以最小化由RAM 102处理的I/O操作的数量,从而减少数据瓶颈。
系统控制108、过滤单元112、合并单元116和投影单元118(在此称为“数据库单元”)按照以下进一步详细描述的技术来工作以执行过滤和投影操作。这些组件中的每一个以及在此描述的其它数据库单元可以实现为硬件或者硬件和软件的组合。例如,这些单元中的一个或多个可以利用可编程逻辑器件(PLD)来实现,比如现场可编程门阵列(FPGA)或其它类型的门阵列或可重构电路。作为另一个例子,这些单元中的一个或多个可以利用通用处理器来实现,比如高级RISC机器(ARM)或其它精简指令集计算机(RISC)处理器。
基于谓词过滤数据
图2根据实施例说明用于执行过滤和投影操作的示例过程。在图2中示出的过程可以在任何合适的系统上实现,比如图1中示出的系统100或图4中示出的系统400。
参考图2,在步骤202,系统控制108接收到包括一个或多个谓词的集合的查询。例如,查询可以包括带有指定一个或多个谓词的WHERE子句的SELECT语句。但是,根据特定的实现方式,也可以使用任何其它合适的语法。在实施例中,每个谓词指定用来过滤从数据库中提取并且作为查询的结果输出或以其他方式返回的数据的准则。该准则可以利用一个或多个运算符来指定,运算符包括但不限于以上表1中示出的运算符。
在示例实施例中,系统控制108解析接收到的查询,以确定该查询包括哪些谓词以及这些谓词应该如何编程到过滤单元112中。步骤204至210定义对谓词集合中的每个谓词进行重复的循环。因此,在步骤204的第一迭代中,用谓词集合中的第一谓词对过滤单元112进行编程。系统控制108可以按任何合适的次序将谓词编程到过滤单元112中。用于选择次序的技术在以下进一步详细描述。在实施例中,对过滤单元进行编程可以包括配置FPGA或其它可重构的电路来应用由谓词指定的过滤准则。例如,可以利用硬件描述语言(HDL)对过滤单元112进行编程来实现表1中示出的任何谓词运算符以将一个或多个值与谓词值进行比较。
通常,谓词对特定列的值施加条件。谓词在其上施加条件的列在本文中被称为谓词的目标列。因此,对于谓词(AMOUNT>200),AMOUNT列是目标列。
在步骤206,列的值被发送到过滤单元112。在示例实施例中,系统控制108向存储器控制器106发送请求来将一列或多列的值从RAM 102加载到输入高速缓存110中。系统控制108可以基于被评估的谓词确定哪些列应该被加载到输入高速缓存110中。例如,系统控制108可以使得只从过滤单元112当前用来编程的谓词的目标列中加载值。例如,对于谓词AMOUNT>200,系统控制108可以使得AMOUNT列的至少一部分的值从RAM 102加载到输入高速缓存110中,如以下的示例实现方式中所示出的。
来自目标列的值然后从输入高速缓存110流到过滤单元112。在接收到列数据时,过滤单元112应用在步骤204编程的谓词,以生成识别满足该谓词的行的结果。为了确定哪些行满足该谓词,过滤单元112可以应用一个或多个谓词运算符来比较接收到的列的特定行的值和查询谓词中指定的谓词值。
在步骤208,过滤的结果被存储为指示哪些行具有满足谓词条件的目标列值的数据结构。在实施例中,数据结构是如以下进一步详细描述的位向量。在备选实施例中,数据结构是从位向量生成的编码的数据。也可以生成、存储和使用任何其它合适的数据结构来指示哪些行具有满足谓词条件的目标列值。
在步骤210,系统控制108确定谓词集合中是否还存在未被过滤单元112评估的剩余谓词。如果存在还未被评估的剩余谓词,则过程返回到步骤204,并且系统控制108用剩余谓词中的一个谓词来编程过滤单元112。如果谓词集合中所有谓词都已经被评估,则过程继续到步骤212,这将在以下进一步详细描述。
在过滤单元处生成位向量
在实施例中,过滤单元为每个谓词结果生成位向量。位向量的每一位都对应于行并且指示对应行是否满足与该位向量相关联的查询谓词。例如,位向量中位的位置可以对应于表中对应行的位置。因此,位向量中的第三位可以对应于表的第三行。
每一位的值表示布尔值,其中第一位值指示对应的行满足谓词条件并且第二位值指示对应的行不满足谓词条件。例如,如果表的第三行满足与位向量相关联的谓词,则位向量中第三位是“1”,并且如果表的第三行不满足与位向量相关联的谓词,则位向量中第三位是“0”。
合并结果
在根据步骤202至210为每个谓词都生成结果之后,在步骤212通过以查询指定的方式合并每个谓词的结果来生成最终结果。最终结果是诸如最终位向量的数据结构,其识别满足查询中所有谓词的行的集合。
在实施例中,最终结果是最终位向量,其中最终位向量的每一位都对应于查询所针对的表的特定行。正如特定于谓词的位向量中每一位的值指示对应的行是否满足与位向量相关联的谓词,最终位向量中每一位的值也指示对应的行是否满足所有谓词。因此,第一位值(例如,“1”)用于指示对应的行满足查询中的所有谓词,并且第二位值(例如,“0”)用于指示对应的行不满足所有谓词。
在示例实施例中,系统控制108用关于如何合并位向量的指令编程合并单元116。例如,合并单元116可以被编程为基于查询中指定的逻辑运算符执行一个或多个按位操作来合并结果位向量。例如,在查询1的情况下,系统控制108会将合并单元116编程为执行按位或(bitwise OR)操作,然后按位与(bitwise AND)操作,来产生最终位向量,如在以下示例实现方式中所示出的。
投影过滤的数据
在步骤214,投影单元118使用最终结果从投影的列中选择行输出。在使用最终位向量的情况下,投影单元118逐位处理最终位向量,以识别满足所有查询谓词的行(即,在最终位向量中对应位被设置为第一位值的那些行)。在步骤216,投影单元118从输入高速缓存110中为投影的列检索列数据并且将由最终结果识别的行输出到输出高速缓存120。在这种情况下输出行是指在输出高速缓存120中存储满足谓词的行。一旦行被输出,它就可以在任何时间作为查询结果返回给例如用户或应用程序。
在步骤218,系统控制108或投影单元118确定由查询指示的所有列是否都已被投影。例如,在查询1的情况下,投影的列包括SALESMAN、CUSTOMER和AMOUNT列。如果剩有任何投影的列,则过程返回到步骤214,并且最终结果被应用到剩余集合中的列。应用最终结果可以包括利用最终位向量作为掩码或将最终位向量转换成存储器地址,如以下进一步描述的。重复这个过程,直到查询所指示的所有列都已被投影。
基于最终结果投影行的过程可以根据特定的实现方式而变化。在一种实施例中,来自投影的列的值的行如果在过滤过程中还没有存储在输入高速缓存110中,则该行被加载到输入高速缓存110中。投影单元118基于最终结果确定这些值的行中的哪些行应该被存储在输出高速缓存120中。在实施例中,投影单元110使用最终结果位向量作为控制哪些行在步骤216从投影单元118输出到输出高速缓存120的掩码。例如,投影的列的每一行都可以从输入高速缓存110流到投影单元118。投影单元118然后可以应用位向量作为掩码来只让满足所有查询谓词的那些行流到输出高速缓存120。作为替代,如以下进一步详细描述的,可以使用地址生成器来向投影单元118提供仅仅应该被输出的那些行。
混合列式(COLUMNAR)块处理
在实施例中,系统以混合列式方式在RAM 102中存储数据库的至少一部分。混合列式存储将数据库分成块,其中每块都具有一列或多列的固定数量的行。例如,第一块可以存储一列或多列的前50行,第二块存储下一个50行并且第三块存储再下一个30行。每个块内,数据以面向列的方式存储。换句话说,列中的元素在块中被连续地存储。以混合列式方式存储数据使得系统以可管理的块大小容易地处理列。
在实施例中,上述过滤和投影操作可以在每块的基础上执行。例如,如果列被分散在多个块上,则过滤和投影操作可以应用到列的驻留在第一块中的第一部分,来产生第一结果集合。可以为每个后续块重复该过程直到整个列都被处理。在一个阶段生成的结果集合在被返回之前不需要等待后续阶段。例如,为一个块生成的结果集合可以在后续块处理之前或期间被返回。
过滤/投影操作的示例系统实现
图3A至3E是根据实施例说明在执行过滤和投影操作的过程中系统的不同状态的系列框图。具体地,这些图说明了处理以上表2中示出的查询1的系统100。
图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中。
当系统控制108接收到查询1时,系统控制108确定如何评估谓词并且使得适当的列被加载到输入高速缓存110中。所图3B所示出的,谓词AMOUNT>200被首先评估。相应地,系统控制108用谓词330编程过滤单元112。AMOUNT列的第一部分A1 308被加载到输入高速缓存110中并且发送到过滤单元112。过滤单元112然后利用谓词330逐个值地(其中每个值对应于不同的行)评估A1 308的列数据以生成位向量Ap1 340,该位向量指示满足谓词AMOUNT>200的A1 308的行。第一位向量Ap1 340在以下表10中示为Ap1。位向量高速缓存114为后续处理存储这个位向量。
AMOUNT | Ap1 |
400 | 1 |
200 | 0 |
150 | 0 |
350 | 1 |
600 | 1 |
650 | 1 |
470 | 1 |
表10:示出其中AMOUNT>200的行的第一位向量Ap1
在评估了谓词AMOUNT>200之后,然后以类似的方式连续地处理下两个谓词SALESMAN=Pedro和SALESMAN=Alex。例如,SALESMAN列S1 304可以被加载到输入高速缓存110中。系统控制108编程过滤单元112,在第一种情况下将“=”操作应用到“Pedro”值并且在第二种情况下将“=”操作应用到“Alex”值。过滤单元112在每种情况下逐行地评估SALESMAN列,以生成第二和第三位向量。图3C是所有谓词都被处理之后的系统的框图。位向量Sp2342表示响应于评估谓词SALESMAN=Pedro而生成的位向量,并且位向量Sp3 344表示响应于评估谓词SALESMAN=Alex而生成的位向量。这些位向量在以下表11中示出。
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 |
650 | 1 | Alex | 0 | 1 |
470 | 1 | Pedro | 1 | 0 |
表11:第二位向量Sp2示出其中SALESMAN=Pedro的行以及第三位向量Sp3示出其中SALESMAN=Alex的行
在实施例中,过滤单元112生成的位向量的位长度与块中的行一样多。例如,以上表10和表11中示出的位向量长度对应于对于每一列被存储在块1 302中的值的数量。因此,位向量Ap1 340具有与A1 308的行数相同数量的位,并且位向量Sp2 342和Sp3 344具有与S1 304的行数相同数量的位。在这些表中,满足谓词的行被分配位值“1”并且不满足谓词的行被分配位值“0”。但是,根据实现方式,这些位值可以颠倒。
在为每个谓词都生成结果位向量之后,最终位向量可以通过上述合并过程来生成。在查询1的情况下,合并过程可以按WHERE子句中逻辑运算符指定的方式来实现。相应地,系统控制108首先编程合并单元116以在位向量Sp2 342和Sp3 344上执行按位或(bitwiseOR)。然后OR操作的结果被用来执行与位向量Ap1 340的按位与(bitwise AND)。图3D示出了在谓词结果位向量已被合并来产生用于检索过滤的行的最终集合的最终位向量之后系统的框图。
参考图3D,位向量高速缓存114存储位向量Sp2|Sp3 344,该位向量Sp2|Sp3 344是在位向量Sp2 342和Sp3 344上执行按位或(bitwise OR)操作的结果而产生的位向量。合并单元116然后利用位向量Sp2|Sp3 344和位向量Ap1 340执行按位与(bitwise AND)操作来生成最终位向量Ap1(Sp2|Sp3)348。这些位向量在以下表12中示出。在表12的最后一列中示出的最终位向量表示块1 302中满足查询1的所有谓词的行。
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 |
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 |
表12:位向量合并操作的结果,包括用于块302的最终位向量
最终位向量被发送到投影单元118,投影单元118使用该位向量从适当的列投影行。在查询1中,SELECT语句指示数据应该从sales表的SALESMAN、CUSTOMER和AMOUNT列投影。相应地,S1 304可以从输入高速缓存110流到投影单元118。投影单元118可以逐位遍历最终位向量并且将对应于该最终位向量中的“1”的S1304的行发送到输出高速缓存120。投影单元118利用同一最终位向量为CUSTOMER和AMOUNT列重复这一过程。
图3E是在过滤和投影操作结束时系统的框图。Sr1 350表示从块302投影的SALESMAN列数据,Cr1 352表示从块302投影的CUSTOMER列数据,并且Ar1 354表示从块302投影的AMOUNT列数据。该数据可以在系统开始处理块310时作为结果发送出去。
然后可以对诸如块310的其它块中存储的数据重复上述过滤和投影操作。为了说明起见,假设sales表还包括以下表13中示出的行。
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 |
表13:示例sales表的附加行
块310以面向列的格式存储行8-12的数据。例如,S2 312可以以相邻的次序存储以下值:Pedro、Alex、Alex、Michael、Pedro。类似地,C2 314存储CUSTOMER列的行8-12,并且A2 316存储AMOUNT列的行。
以下表14示出了在对块310中存储的数据执行过滤操作之后生成的位向量。
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 |
表14:位向量合并操作的结果,包括用于块310的最终位向量
表14的最后一列中示出的最终位向量识别块310中满足所有查询谓词的行。投影单元118逐位解析这个最终位向量,并且将对应于该最终位向量中的“1”的S2 312的行发送到输出高速缓存120。投影单元118利用同一最终位向量为C2 314和A2 316重复这一过程。
基于地址生成的选择性行过滤
在一些实施例中,在谓词评估期间提供给过滤单元112的行可以基于从之前谓词评估中获得的结果来进行限制。例如,在评估后续谓词时可以不需要考虑某些不满足之前评估的谓词的行。通过选择性地向过滤单元112提供用于处理的行,过滤单元112就可以避免为每个谓词都必须评估整个列。
图4是根据实施例说明具有用于执行过滤和投影操作的地址生成器的示例系统体系结构的框图。系统400是包括地址生成器402的系统100的变形。系统400可以使用地址生成器402来选择性地向过滤单元112提供将要被过滤的列的行。
在实施例中,地址生成器402使用前一个过滤的位向量结果来将行的子集提供给过滤单元用于后续的过滤。其中使用位向量来限制提供给过滤单元112的行的方式取决于查询中指定的逻辑运算符。例如,就查询1而言,第一谓词与随后的谓词相与。因此,如果行不满足第一谓词,则对于接下来的两个谓词就不需要再考虑该行。
在以上示例实现中,当产生位向量Sp2 342和Sp3 344时,地址生成器402可以使用位向量Ap1 340来向过滤单元112只提供满足第一谓词的行。具体而言,因为与谓词AMOUNT>200相关联的位向量是1001111,所以就不需再针对其它谓词评估第二和第三行。能被跳过的后续评估的数量越大,查询评估越高效。例如,如果AMOUNT>200已产生位向量0000000,则剩余谓词的全部评估都可以被跳过。
因为接下来的两个谓词在一起相或,所以在评估第三谓词时,不需要再考虑满足第二谓词的行。即,与第二谓词相关联的位向量1100001指示第一行、第二行和第七行在评估第三谓词的过程中可以被跳过。
事实上,在评估第三谓词的过程中,地址生成器402可以使用第一谓词和第二谓词的结果位向量来确定只有第四行、第五行和第六行需要针对第三谓词进行评估。具体而言,因为第二行和第三行没有满足第一谓词,因此它们可以被跳过,并且因为第一行、第二行和第七行确实满足第二谓词,因此它们也可以被跳过。
评估次序
评估谓词的次序可以根据实现方式而变化。在实施例中,谓词可以按顺序的次序进行评估。例如,谓词可以按查询中所指定的连续地从左到右或从右到左进行评估。
在另一种实施例中,谓词评估的次序可以基于谓词将过滤掉大量行的可能性(即谓词的“选择性”)。当高选择性的谓词被首先评估时,大量的行在过滤过程中被更早地过滤掉。在系统400中,这使得地址发生器402在随后的谓词评估过程中向过滤单元112提供行的较小子集。因此,在处理较低选择性的谓词之前处理较高选择性的谓词可以减少处理的开销。
在实施例中,系统控制108基于查询中指定的运算符评估谓词的选择性。例如,与其它谓词相与的谓词比与其它谓词相或的谓词更可能是高选择性的。在另一个例子中,等值谓词运算符(“=”)比不等于谓词运算符(“<>”或“!=”)更可能是高选择性的。基于估计,系统控制108按从最高选择性的谓词到最低选择性的谓词的顺序编程过滤单元112。
在其它实施例中,在查询中指定的一个或多个谓词被并行地处理。例如,过滤单元112可以用查询中指定的两个或更多个谓词进行编程。过滤单元112可以同时评估这两个谓词。用于并行化谓词评估过程的技术在以下进一步描述。
在使用地址生成器的系统中投影过滤的数据
在另一种实施例中,地址生成器402可以将最终位向量转换成用于满足所有查询谓词的每一行的存储器地址集合。然后地址生成器402可以使用这些存储器地址从输入高速缓存110中只请求这些行并将它们提供给投影单元118用于输出。因为不需要整个列都流过投影单元118,因此这可以节省处理开销。
例如,在步骤214,最终位向量可以从位向量高速缓存114提供给地址生成器402。地址生成器402然后为具有指示行满足谓词集合的对应位值的每一行确定存储器地址。地址生成器402利用这些存储器地址向输入高速缓存110发送存储器取请求。如果这些行已经被加载到输入高速缓存110中,则它们可以直接地从输入高速缓存110流到投影单元118,其中投影单元118将这些行输出到输出高速缓存120。作为替代,这些行可以被发送到地址生成器402。
每列多个谓词
在以上给出的例子中,过滤单元112在每次通过列数据时应用单个谓词。在备选实施例中,过滤单元112可以被配置为对每列处理多个谓词。例如,样例查询1包括谓词SALESMAN=Pedro或SALESMAN=Alex。这两个谓词都涉及同一列。因此,系统控制108可以用这两个谓词编程过滤单元,使得在SALESMAN列单次通过过滤单元112的情况下,这两个谓词都可以被评估。
每单元多列
在以上给出的例子中,过滤单元112在单列输入上操作。在备选实施例中,过滤单元112可以包括多列输入。多列输入在评估某些谓词时可能会有帮助。例如,子句WHERE SALESMAN=CUSTOMER在同一谓词中引用SALESMAN和CUSTOMER列。如果过滤单元112具有两列输入,则谓词可以在一次通过中进行评估。即使在单个谓词中没有包含两列的情况下,具有多列输入也可以被用来同时在多列上处理谓词。
根据实现方式,投影单元118也可以包括多列输入。例如,如果投影单元118具有多列输入,则最终位向量可以同时应用到多个列来并行地投影结果。
用于处理分组和聚合操作的示例体系结构
在实施例中,可以配置专门的硬件来执行分组和聚合操作。图5根据实施例说明可以配置成执行分组和聚合数据库操作的示例系统体系结构。系统500可以包括系统100或系统400的所有元素。除此此外或作为投影单元118的替代,系统500还包括聚合单元502。
系统500可以以任何合适的方式与系统100或400合并或者集成。每个重叠块可以被实现为相同的硬件单元或分离的独立单元。例如,过滤单元112可以是系统100或系统400中执行谓词过滤的相同的硬件单元。该同一单元也可以用来根据以下描述的技术基于列数据创建分组。作为替代,可以使用分离的过滤单元和/或其它数据库单元来处理分组操作和过滤操作。在其它实施例中,系统500可以被实现为独立于系统100或400中示出的过滤和投影逻辑和/或与其相分离。
利用谓词过滤来分组和聚合数据
图6根据实施例说明用于执行分组和聚合操作的示例过程。图6中示出的过程可以在任何合适的系统中实现,比如图5中示出的系统500。
参考图6,在步骤602,接收到查询,其包括请求聚合按照一列或多列分组的数据。例如,查询可以包括任何合适的聚合函数,包括但不限于在表5中列出的那些。聚合函数可以与指定一列或多列用于分组聚合结果数据的GROUP BY语句结合使用。但是,可以使用任何合适的语法来指定聚合函数和分组列。
在步骤604,要被分组的第一列的行被发送到过滤单元112。例如,在样例查询3的情况下,SALESMAN列的第一行可以被发送到过滤单元112。在样例查询4的情况下,SALESMAN列和CUSTOMER列可以按照以下进一步描述的技术进行合并并且发送到过滤单元112。作为替代,如果过滤单元112具有如以下进一步详细描述的多列输入,则SALESMAN列和CUSTOMER列的第一行可以被同时发送到过滤单元112。
在步骤606,过滤单元112识别与列的第一行相关联的元素。在实施例中,该元素是存储在列的第一行内的数据项。例如,参考表3中示出的示例sales表,SALESMAN列的第一个元素是“Pedro”,并且CUSTOMER列的第一个元素是“Gainsley Corp.”。
在步骤608,过滤单元112使用等于步骤606识别的第一个元素作为谓词来过滤掉不属于第一元素所属分组的行。例如,假设SALESMAN列中的第一个元素是“Pedro”,则过滤单元112使用谓词“SALESMAN=Pedro”来过滤掉不属于“SALESMAN=Pedro”分组的所有行。系统控制108可以响应于在步骤602接收到查询而用这个逻辑编程过滤单元112。
在步骤610,列的剩余行(即,除第一行之外的那些行)被发送到过滤单元112。在实施例中,剩余行在第一次通过时以相邻的次序从输入高速缓存110流到过滤单元112。在后续通过中,地址生成器可以向过滤单元112只馈送那些之前还没有被分组的行。
在步骤612,过滤单元112过滤掉不满足该过滤的行,以生成第一行所属的行的分组(例如,其中SALESMAN=Pedro的所有行的组)。该步骤可以包括生成识别每个满足等值谓词的行的位向量或其它数据结构。类似于上述谓词过滤,位向量中的每一位都可以对应于列中不同的行,其中第一位值指示该行满足所述等值谓词并因此是该组的一部分,并且第二位值指示该行不满足所述等值谓词并因此不是该组的一部分。
在步骤614,第一行和与第一列相匹配的行被分组并且发送到聚合单元502。在示例实施例中,过滤单元112将在步骤612生成的位向量发送到地址生成器402,地址生成器402使用该位向量来从存储器中只请求作为当前组的一部分的那些行。一旦接收到这些行,地址生成器402就将它们发送到聚合单元502用于聚合。
在步骤616,聚合单元502如查询所指示的那样来聚合分组的行的值。例如,在查询3和查询4的情况下,聚合单元502将合计AMOUNT列中存储的分组的行的值。
在步骤618,系统500确定是否存在任何还未被分组的剩余行。如果存在,则过程返回到步骤604,其中只对那些还未被分组的行重复分组和聚合操作。相应地,过滤单元112被重新编程,以使用第一未分组行的元素作为等值谓词来形成新的组。
在根据表3的本例中,行1和行2将被分组在SALESMAN=Pedro组中。因此,第三行将是第一个“还未被分组”的行。该第三行在SALESMAN列具有值“Alex”,其中SALESMAN列是该查询的分组列。因此,基于过滤SALESMAN=Alex确定第二组。第二组将包括行3、行5和行6。
在步骤604的第三次迭代过程中,行4是第一个未分组的剩余行。行4在SALESMAN列具有值“Michael”。因此,基于过滤SALESMAN=Michael确定第三组。第三组将只包括行4。在第三组形成之后,图6中示出的过程将结束,因为不再剩有未分组的行。
在每次迭代的过程中,系统500基于新的谓词生成并聚合分组。如果所有的行都已被分组,则处理结束。如果相关的列被存储在多个RAM块上,则可以为多个RAM块中的每一块重复该过程以产生最终结果,如以下进一步详细描述的。
基于之前生成的位向量确定后续分组
在实施例中,在步骤612生成的用来识别行分组的位向量(在本文称作“分组成员位向量”)也可用来选择地向过滤单元112提供用于后续分组的行。具体而言,分组成员位向量中的每一位对应于特定的行。当位在分组成员位向量中被设置为诸如“1”的第一位值时,其指示用于特定行的分组已被识别。如果已生成的分组成员位向量都没有为特定行将该位设置为第一位值,则特定行还没有与分组相关联。因此,该特定行可以被提供给过滤单元112用于后续处理,以确定该特定行属于哪个组。
合并单元116可以在步骤612生成的分组成员位向量中的一个或多个上执行按位操作,以生成识别未分组行的位掩码。在一种实施例中,在生成第一位向量之后,可以在该位向量上执行按位非(bitwiseNOT)操作。这导致产生其中第一位值识别之前还未被分组的行的位掩码。相应地,地址生成器402可以以相同方式操作来将位掩码转换成用于这些行的存储器地址。然后地址生成器402可以请求检索这些行,并且只检索这些行,使得只有还未分配到分组的行被提供给过滤单元112用于后续分组和聚合操作。
在生成第二分组成员位向量之后,由于现在集合中存在多个位向量,因此NOT操作自身将无法识别之前未分组的行。因此,为了生成识别之前未分组的行的位掩码,合并单元116可以在用于当前分组的分组成员位向量和之前生成的位掩码之间执行按位异或(bitwiseexclusive)操作。这个过程在以下示例实现方式中进行说明。
逐块分组和聚合
在一种实施例中,上述分组和聚合操作可以被逐块地执行。例如,表数据可以以混合列式格式存储在多个RAM块中。图6的处理可以在第一块上实现,以生成识别第一块中的分组和聚合值的第一结果集合。可以以同样的方式为剩余RAM块中的每一块重复这个过程。相应地,为每个剩余的块生成识别分组和聚合结果的结果集合。
根据特定的实现方式,输出高速缓存120可以在多个块的处理完成之前用数据填充。例如,如果相关数据被分散在许多块上,那么输出高速缓存120可能没有足够的存储空间来为每一块存储结果集合。如果存在大量的分组或列数据元素很大,那么输出高速缓存120中的存储空间也会被更快地消耗。
为了释放输出高速缓存120中的存储空间或者为了生成最终结果,用于不同块的多个结果集合可以按照图6中描述的过程进行分组和聚合。例如,在输出高速缓存被填满或以其他方式可用存储空间量小于阈值之后,输出高速缓存120中的数据可以被发送到输入高速缓存110。然后,以与上述相同的方式在输入高速缓存数据上运行分组和聚合操作。因此,不同结果集合的结果记录被分组和聚合,其通过整合结果集合可以释放更多的存储空间。如果这个过程没有释放输出高速缓存120中的空间或输出高速缓存120达到使性能严重降低的高占用率状态,则输出高速缓存的内容可以被传递到诸如通用处理器的另一个单元用于更大规模的聚合。
分组/聚合操作的示例系统实现
图7A至7E是根据实施例说明在执行分组和聚合操作的过程中系统的不同状态的系列框图。具体地,这些图说明了处理以上表6中示出的样例查询3的系统500。
图7A示出了在为查询3处理第一分组之后的系统图。如所示出的,SALESMAN列和AMOUNT列被分在多个块之间。SALESMAN列的第一部分S1 704和AMOUNT列的第一部分A1706被存储在块702中,并且SALESMAN列的第二部分S2 712和AMOUNT列的第二部分A2 714被存储在块710中。在实施例中,数据以混合列式格式存储在这些块中。
当接收到查询3时,系统控制108使得SALESMAN列的第一部分S1 704加载到输入高速缓存110中。SALESMAN列可以从输入高速缓存110流到过滤单元112以基于SALESMAN列分组行。为了计算第一分组,系统控制108编程过滤单元112以使用等于SALESMAN的第一元素作为过滤谓词。这通过图7A的谓词720表示。在本例中,SALESMAN列的第一个元素是“Pedro”,因此第一分组是SALESMAN=Pedro的行的分组。
过滤单元112可以以上述用于过滤和投影操作同样的方式操作,并且具有用于确定谓词评估中使用的列的第一元素的附加逻辑。一旦用谓词720编程,SALESMAN列的剩余行就从输入高速缓存110流到过滤单元112用于评估。给定表3中示出的样例sales表和过滤SALESMAN=Pedro,过滤单元112将生成以下表15中示出的分组成员位向量。
SALESMAN | Bitvector1 |
Pedro | 1 |
Pedro | 1 |
Alex | 0 |
Michael | 0 |
Alex | 0 |
Alex | 0 |
Pedro | 1 |
表15:根据谓词SALESMAN=Pedro的过滤单元输出
分组成员位向量bitvector1对应于谓词720的谓词结果。分组成员位向量中每个具有值“1”的位识别SALESMAN列中具有值“Pedro”的行。因此,所有属于第一分组的行由该相同的位值识别。相反,具有“0”位值的每个位识别不具有值“Pedro”并且因此不属于第一分组的行。
在过滤单元112生成表15中示出的分组成员位向量之后,该分组成员位向量然后可以被发送到聚合单元502。聚合单元502在AMOUNT列的由位向量指示的作为满足谓词720的行上操作。在一种实施例中,地址生成器402将分组成员位向量转换成A1 706中其对应位值等于“1”的行的存储器地址。这些存储器地址被用来从RAM 102中检索来自A1 706的属于该分组的行的值到输入高速缓存110中。然后这些值被提供给聚合单元502用于聚合。
除分组成员位向量之外,聚合单元502还接收它要执行的聚合操作类型的指示。例如,系统控制108可以编程聚合单元502来执行查询中指定的聚合函数。示例聚合函数包括但不限于表5中示出的聚合函数。在查询3的情况下,聚合单元502合计AMOUNT列的由分组成员位向量bitvector1指示的行中存储的数据。聚合单元502可以为结果集合生成两个输出:分组的名称以及对该分组的聚合操作的结果。处理查询3时第一分组的输出在以下表16中示出。聚合单元502将这个输出(聚合结果750)存储在输出高速缓存120中。
分组 | 合计 |
Pedro | 1070 |
表16:聚合单元的第一输出
一些聚合操作可能包括两个以上的输出。例如,AVG函数可以保存GROUP、RUNNING AVERAGE和TOTAL ELEMENTS,以便为后续发生的分组计算平均值。
图7B是处理第二分组之后的系统图。与聚合单元502在第一分组成员位向量上操作以生成第一分组的聚合结果同时地,过滤单元112可以开始为第二分组产生下一个分组成员位向量。这次,只向过滤单元112提供那些在第一次通过过滤单元时产生“0”的行。在示例实施例中,合并单元116在Bitvector1上执行按位非(bitwise NOT)操作740,以生成位向量掩码~Bitvector1 730并将该位向量掩码存储在位向量高速缓存114中。位向量掩码~Bitvector1 730识别所有还未被分组的行。
一旦生成这个位向量掩码,然后就可以将它发送到地址生成器402,该地址生成器402将~Bitvector1 730转换成用于之前还未被分组的行的存储器地址并且使得只有这些行被传送给过滤单元112。过滤单元112然后可以通过从由地址生成器402提供的之前未分组的行中取得第一元素并且利用等于这个第一元素作为新的谓词722来对这些未分组的行进行操作。在本例子中,等于值“Alex”被用作新的谓词722。过滤单元112利用谓词722评估之前还未被分组的剩余行,以为第二分组生成分组成员位向量Bitvector2 732并且将这个分组成员位向量存储在位向量高速缓存114中。Bitvector2 732中每个具有位值“1”的位都对应于属于第二分组的行。聚合单元502使用Bitvector2来生成聚合结果752,其为第二分组中的那些行合计AMOUNT列。结果752被存储在输出高速缓存120中。
图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示出了在这些步骤中生成的分组成员位向量。如果块中有其它分组,则它们的处理将类似于第三分组的处理。
SALESMAN | Bitvector1 | Bitvector2 | Bitvector3 |
Pedro | 1 | 0 | 0 |
Pedro | 1 | 0 | 0 |
Alex | 0 | 1 | 0 |
Michael | 0 | 0 | 1 |
Alex | 0 | 1 | 0 |
Alex | 0 | 1 | 0 |
Pedro | 1 | 0 | 0 |
表17:第三次通过过滤单元产生的位向量
在第一块中的数据聚合结束时,在输出高速缓存120中存储的表可以利用以下表18中示出的表来表示。
分组 | 合计 |
Pedro | 1070 |
Alex | 1400 |
Michael | 350 |
表18:在单个块之后的聚合输出
图7D是在RAM中的两个块已被处理之后的系统图。具体地,应用到块702的同一过程可以应用到块710来对第二块中存储的数据进行分组和聚合。块710存储SALESMAN列的第二部分S2 712和AMOUNT列的第二部分A2 714。为简单起见,假设块710中Pedro、Alex和Michael的销售合计分别为1000、2000和3000。因此,分组和聚合操作生成结果集合756,其与处理第一块时生成的结果集合一起存储在输出高速缓存120中。因此,输出高速缓存120存储合并的结果集合758。以下表19示出了已经处理两个块之后的输出的表示。
分组 | 合计 |
Pedro | 1070 |
Alex | 1400 |
Michael | 350 |
Pedro | 1000 |
Alex | 2000 |
Michael | 3000 |
表19:两个块之后的聚合输出
图7E是在输出高速缓存中的结果已经被处理之后的系统图。如果输出高速缓存120中的可用存储空间小于阈值或者已准备好要计算用于每个块的最终聚合结果,则结果集合758可以被发送到输入高速缓存110用于进一步的处理和整合。分组和聚合操作然后以与之前描述的相同的方式在输入高速缓存数据上运行。在该聚合通过之后,在结果高速缓存中最终出现的数据在以下表20中示出。这个数据作为结果760存储在输出高速缓存120中。
分组 | 合计 |
Pedro | 2070 |
Alex | 3400 |
Michael | 3350 |
表20:在对全部结果高速缓存进行聚合之后的结果高速缓存数据
因此,为每一块生成的单独的结果集合被分组并聚合来为这两块生成单个结果集合。
如果有其它的剩余RAM块,则继续这个过程,直到所有的块都被聚合。如果结果高速缓存被完全填满或者达到使性能严重降低的高占用率状态,则可以将结果高速缓存的内容传递到诸如通用处理器的另一个单元用于更大规模的聚合。
为高速缓存确定大小
输入高速缓存110、位向量高速缓存114以及输出高速缓存120的大小可以根据特定的实现方式而变化。小的高速缓具有若干个好处,包括更快的操作和更小的面积消耗。但是,确定为更大的高速缓存可以在过滤和投影操作期间减少RAM访问的数量。因此,各个高速缓存的最佳高速缓存大小可以根据实现方式而变化。
在一种实施例中,可以选择输入高速缓存110、位向量高速缓存114和/或输出高速缓存120的大小为接近诸如块104A到104N的RAM的一个或多个块的大小。利用接近于块大小的高速缓存大小,系统就可以用有限的RAM访问高效地逐块或多块地执行过滤和投影操作。
在另一种实施例中,高速缓存大小被确定为使得输入高速缓存具有足够的存储空间用于正在被分组的列以及存储聚合数据的列。如果在块中分组基数大于1,则这两列都会被处理多次,因此具有大得足以存储这两列的高速缓存可以节省从RAM中重复读取它们的时间和能量。
在另一种实施例中,输出高速缓存的大小可以根据总体数据集合的预期基数以及块内的基数进行确定。块内分组数量的基数越高,输出高速缓存将越快地填满,使得结果数据在上述分组和聚合操作期间被聚合得更频繁。同样,如果分组数据的总体基数高,则无论执行了多少额外的聚合,输出高速缓存都可能不能为每个分组都保存结果。如果即使在对输出高速缓存的内容运行聚合之后输出高速缓存还是满的,则会使用更高级别的处理节点来完成聚合,这可能导致性能降低。因此,大得足以保存至少最终结果集合的输出高速缓存可以提高性能。
高速缓存的大小也可以基于RAM 102的存储器接口与诸如过滤单元112、合并单元116和投影单元118的数据库单元之间的相对速度来进行选择。如果存储器与数据库单元相比较快,则较小的高速缓存可能是优选的,因为与频繁的加载相关联的成本可能很小。相反,如果与数据库单元的处理速度相比存储器较慢,则较大的高速缓存大小可能更高效。
在另一种实施例中,输入高速缓存110、位向量高速缓存114和/或输出高速缓存120的大小是基于数据库工作负荷的属性来选择的。在一些情况下,块内的列数据可能被数据库单元处理多次,诸如当许多谓词被应用到同一列时。如果这种情形在特定的实现方式中常见,则较大的高速缓存大小可以通过使列数据在高速缓存中驻留更长的时间段来提高性能。
多列分组
以上分组和聚合示例描述了处理表6中的查询3,但是同一系统也可以处理基于多列而不是单列来分组数据的查询4。在一种实施例中,在GROUP BY中包含的列可以被合并在一起。例如,在查询4的例子中,可以通过诸如串联(concatenation)来合并SALESMAN列和CUSTOMER列。合并的列然后可以在步骤602发送到过滤单元112。然后,这两列将在某个时刻分离,诸如在被写入输出高速缓存之前。系统500可以包括用于在列被发送到过滤单元112之前将这些列合并的附加数据库单元以及用于在输出高速缓存120之前分离这些列的附加数据库单元。
在另一种实施例中,诸如以上描述的能够对多列进行操作的过滤单元被用来处理多列分组。例如,具有多列输入的过滤单元将能够在单次通过中实现和评估诸如SALESMAN=SALESMAN列的第一个元素并且CUSTOMER=CUSTOMER列的第一个元素的谓词。对于查询3而言,能够处理两列输入的过滤单元就足够了。如果GROUPBY通过多于两列来分组数据,则过滤单元可以被配置为接受更多的列或者系统可以迭代遍历列的组合。
每次通过多个分组
在实施例中,过滤单元112可以被配置为处理多个流,使得在单次通过中可以确定多个分组。例如,当CUSTOMER列被过滤单元112处理时,一个流可以应用谓词SALESMAN=SALESMAN的第一个元素,而另一个流等待SALESMAN!=SALESMAN的第一个元素的第一个实例,并且使用该SALESMAN值作为等值谓词。这种方法类似于用于执行在上节中描述的多列分组的技术,但是相同的列被发送到所有的流并且谓词基于之前的谓词的结果。
按照这个过程,过滤单元112为其处理的每个分组生成分组成员位向量。如果过滤单元能够在每次通过时产生N个分组,其中N表示正整数值,则位向量高速缓存114可以被配置为存储N+2个分组成员位向量:过滤单元112输出的N个位向量、将这N个位向量在一起取或(OR)的一个位向量、以及如以上示例实现方式中描述的在该求或(OR)所得的位向量上操作的位向量掩码。
在备选实施例中,位向量高速缓存114可以根据实现方式被配置为存储N个或N+1个位向量。例如,这N个位向量中的一些可以通过OR合并或位向量掩码来被覆盖。
当聚合数据时,聚合单元502可以顺序地对N个位向量进行操作。作为替代,如果聚合单元502还被配置为处理多个流,则聚合单元502可以同时在这些位向量上操作。
附加的并行化(PARALLELISM)
以上描述的技术说明了所给出的步骤的串行处理。但是,这些步骤中的一些可以根据实现方式被并行地执行。例如,合并单元116可以在位从过滤单元112中变得可用时处理位向量,而不是等待过滤单元112完成谓词评估。作为另一个例子,在投影单元118处理用于输出高速缓存120的列时,过滤单元112可以开始处理要被过滤的下一列。诸如高速缓存加载和访问的其它步骤也可以与其它过滤和投影步骤并行执行。在再一个例子中,当聚合单元502处理用于输出高速缓存120的列的同时,过滤单元112可以开始处理下一分组。诸如高速缓存加载和访问的其它操作也可以并行地操作。
硬件概述
根据一种实施例,本文所描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行所述技术,或者可以包括诸如永久编程来执行所述技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)的数字电子设备,或者可以包括编程为按照固件、存储器、其它储存器或者其组合中的程序指令来执行所述技术的一个或多个通用硬件处理器。这种专用计算设备还可以结合定制的硬连线逻辑、ASIC或FPGA与定制的编程来实现所述技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、联网设备或者结合硬连线和/或程序逻辑来实现所述技术的任何其它设备。
例如,图8是说明本发明的实施例可以在其上实现的计算机系统800的框图。计算机系统800包括总线802或者用于传送信息的其它通信机制,以及与总线802耦合用于处理信息的硬件处理器804。硬件处理器804可以是例如通用微处理器。
计算机系统800还包括耦合到总线802用于存储信息和待由处理器804执行的指令的主存储器806,诸如随机存取存储器(RAM)或其它动态存储设备。例如,RAM 102可以实现在主存储器806中。主存储器806还可以用于在待由处理器804执行的指令的执行期间存储临时变量或其它中间信息。当存储在处理器804可访问的非瞬时存储介质中时,这种指令使计算机系统800成为被定制用于执行指令中所指定的操作的专用机器。
计算机系统800还包括只读存储器(ROM)808或者耦合到总线802的其它静态存储设备,用于为处理器804存储静态信息和指令。存储设备810,诸如磁盘或光盘,被提供并且耦合到总线802,用于存储信息和指令。
计算机系统800可以经总线802耦合到显示器812,诸如阴极射线管(CRT),用于向计算机用户显示信息。输入设备814,包括字母数字键和其它键,耦合到总线802,用于向处理器804传送信息和命令选择。另一种类型的用户输入设备是光标控制816,诸如鼠标、轨迹球或者光标方向键,用于向处理器804传送方向信息和命令选择并且用于控制显示器812上的光标运动。这种输入设备通常具有在两个轴(第一个轴(例如,x)和第二个轴(例如,y))上的两个自由度,以允许设备在平面内指定位置。
计算机系统800还可以包括用于执行过滤、投影、分组和/或聚合操作的查询处理逻辑832。查询处理逻辑832可以利用系统100、系统400或系统500中示出的一个或多个元件来实现。
计算机系统800可以利用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文所述的技术,其中程序逻辑与计算机系统相结合,使计算机系统800或者将计算机系统800编程成为专用机器。根据一种实施例,此处的技术由计算机系统800响应于处理器804执行包含在主存储器806中的一条或多条指令的一个或多个序列而执行。这种指令可以从另一存储介质,诸如存储设备810,读入主存储器806中。包含在主存储器806中的指令序列的执行使处理器804执行此处所述的过程步骤。在备选实施例中,硬连线的电路可以代替软件指令或者与其结合而被使用。
如在此处所使用的,术语“存储介质”指存储使机器以特定方式操作的数据和/或指令的任何非瞬时介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备810。易失性介质包括动态存储器,诸如主存储器806。存储介质的常见形式包括,例如,软盘、软磁盘、硬盘、固态硬盘驱动器、磁带,或者任何其它磁性数据存储介质,CD-ROM,任何其它光学数据存储介质,任何具有孔图形的物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒式存储器。
存储介质与传输介质不同但是可以与其结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线802的导线。传输介质还可以采取声波或光波的形式,诸如在无线电波和红外数据通信中产生的那些。
各种形式的介质可以参与将一条或多条指令的一个或多个序列输送到处理器804供执行。例如,指令最初可以载存于远程计算机的磁盘或固态硬盘驱动器上。远程计算机可以把指令加载到其动态存储器中并且利用调制解调器经电话线发送指令。位于计算机系统800本地的调制解调器可以在电话线上接收数据并且使用红外发射器把数据转换成红外信号。红外检测器可以接收在红外信号中携带的数据并且适当的电路可以将数据放置在总线802上。总线802把数据输送到主存储器806,处理器804从该主存储器806中检索并执行指令。由主存储器806接收的指令可以选择性地在被处理器804执行之前或之后存储在存储设备810上。
计算机系统800还包括耦合到总线802的通信接口818。通信接口818提供耦合到网络链路820的双向数据通信,其中网络链路820连接到本地网络822。例如,通信接口818可以是综合业务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器,或者提供到对应类型的电话线的数据通信连接的调制解调器。作为另一个例子,通信接口818可以是提供到兼容的局域网(LAN)的数据通信连接的LAN卡。无线链路也可以实现。在任何此类实现方式中,通信接口818都发送和接收用于承载表示各种类型的信息的数字数据流的电信号、电磁信号或光信号。
网络链路820通常通过一个或多个网络提供到其它数据设备的数据通信。例如。网络链路820可以通过本地网络822提供到主计算机824或者到由因特网服务提供商(ISP)826操作的数据设备的连接。ISP 826又通过现在通常称为“因特网”828的全球分组数据通信网络来提供数据通信服务。本地网络822和因特网828都使用承载数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及在网络链路820上并通过通信接口818的信号是传输介质的示例形式,其中信号把数字数据送入和送出计算机系统800。
计算机系统800可以通过网络、网络链路820和通信接口818发送消息和接收数据,包括程序代码。在因特网的例子中,服务器830可以通过因特网828、ISP 826、本地网络822和通信接口818来发送对应于应用程序的所请求代码。
所接收的代码可以在其被接收时由处理器804执行,和/或存储在存储设备810或其它非易失性储存器中,供随后执行。
扩展和备选方案
在前面的说明书中,本发明的实施例已经参考众多的具体细节进行了描述,这些细节可以从一种实现方式到另一种实现方式变化。因此,说明书和附图应当被看作是说明性的,而不是限制性的。本发明的范围的唯一且排他指示,以及申请人想要作为本发明的范围的内容由本申请以这种权利要求发布的具体形式来发布的权利要求集合的字面和等效范围,包括任何后续的校正,是对本发明的范围的唯一且排他指示,也是申请人想要作为本发明的范围的内容。
Claims (20)
1.一种方法包括:
用谓词编程过滤单元,所述谓词指定用于过滤针对表的查询的结果的准则;
其中所述谓词为所述表的特定列指定条件;
通过将来自所述特定列的值加载到输入高速缓存并且使得过滤单元将所述谓词应用到所述值来生成谓词结果;
其中所述谓词结果识别所述表中在所述特定列中具有满足由所述谓词指定的条件的值的行;
至少部分地基于所述谓词结果来选择作为所述查询的结果而返回的行;
返回所选择的行作为所述查询的结果;
其中所述方法由一个或多个计算设备执行。
2.如权利要求1所述的方法,其中所述谓词结果是位向量并且所述位向量的每一位都对应于特定行并且识别所述特定行是否满足由第一谓词指定的条件。
3.如权利要求1所述的方法,其中:
所述谓词是与所述查询相关联的谓词集合中的第一谓词;
所述谓词结果是第一谓词结果;
所述方法还包括:
用所述谓词集合中的第二谓词编程过滤单元,第二谓词指定用于过滤所述查询的结果的第二准则;
其中第二谓词为所述表的第二列指定第二条件;
通过将来自第二列的值加载到输入高速缓存并使得过滤单元将第二谓词应用到所述值来生成第二谓词结果;
其中第二谓词结果识别所述表中在第二列中具有满足由第二谓词指定的第二条件的值的行;
其中至少部分地基于所述谓词结果来选择作为结果而返回的行包括:
合并第一谓词结果和第二谓词结果以生成合并的结果;
利用所述合并的结果来识别同时满足第一谓词和第二谓词的行;
选择由作为同时满足第一谓词和第二谓词的所述合并的结果识别的行。
4.如权利要求1所述的方法,还包括:
对于所述谓词集合中的每个谓词:
用所述谓词集合中的所述每个谓词编程过滤单元,其中所述每个谓词指定用于过滤所述查询的结果的特定准则;
通过将来自列的至少一部分的值加载到过滤单元并且使得过滤单元将所述每个谓词应用到所述值来生成谓词结果;
其中选择作为结果而返回的行包括:
合并每个谓词结果以生成最终结果,该最终结果识别满足由所述谓词集合指定的所有准则的行;
选择由作为满足所述谓词集合指定的准则的所述最终结果识别的行。
5.如权利要求4所述的方法,
其中为所述每个谓词生成的谓词结果被用来确定给过滤单元提供哪些行值来用于进行下一谓词的评估;
其中所述谓词集合以顺序次序进行评估;
其中所述顺序次序基于谓词将过滤掉大量行的可能性;
其中较高可能过滤掉大量行的谓词在较小可能过滤掉大量行的谓词之前进行评估。
6.如权利要求4所述的方法,其中选择行作为结果还包括:
将最终结果转换为存储器地址集合;
其中存储器地址集合中的每个存储器地址都识别满足由所述谓词集合指定的准则的行的存储器位置。
7.如权利要求1所述的方法,其中使过滤单元将所述谓词应用到所述值包括:
如果所述特定列的对应行的值满足条件,则为该对应行生成第一位值;
如果所述对应行的值不满足条件,则为该对应行生成不同于第一位值的第二位值。
8.如权利要求1所述的方法,其中通过将来自所述特定列的值加载到输入高速缓存并使得过滤单元将所述谓词应用到所述值来生成谓词结果包括:
加载在存储器的第一块中存储的来自所述特定列的第一组值;
使过滤单元将所述谓词应用到第一组值以生成第一位向量,该第一位向量识别所述表中具有在存储器的第一块内存储的满足由所述谓词指定的条件的值的行;
加载在存储器的第二块中存储的来自所述特定列的第二组值;
使过滤单元将所述谓词应用到第二组值以生成第二位向量,该第二位向量识别所述表中具有在存储器的第二块内存储的满足由所述谓词指定的条件的值的行。
9.如权利要求1所述的方法,其中使过滤单元将所述谓词应用到所述值包括使过滤单元并行地将所述谓词应用到来自所述特定列的多个值。
10.一种或多种存储指令的非瞬时计算机可读介质,其中当指令被一个或多个处理器执行时,使得一个或多个计算设备执行以下操作,包括:
用谓词编程过滤单元,该谓词指定用于过滤针对表的查询的结果的准则;
其中所述谓词为所述表的特定列指定条件;
通过将来自所述特定列的值加载到输入高速缓存并且使得过滤单元将所述谓词应用到所述值来生成谓词结果;
其中谓词结果识别所述表中在所述特定列中具有满足由所述谓词指定的条件的值的行;
至少部分地基于谓词结果来选择作为所述查询的结果而返回的行;
返回所选择的行作为所述查询的结果;
其中所述方法由一个或多个计算设备执行。
11.如权利要求10所述的一种或多种非瞬时计算机可读介质,其中谓词结果是位向量并且所述位向量的每一位都对应于特定行并且识别所述特定行是否满足由第一谓词指定的条件。
12.如权利要求10所述的一种或多种非瞬时计算机可读介质,其中:
所述谓词是与所述查询相关联的谓词集合中的第一谓词;
所述谓词结果是第一谓词结果;
所述一种或多种非瞬时计算机可读介质还存储使所述一个或多个计算设备执行以下操作的指令,包括:
用所述谓词集合中的第二谓词编程过滤单元,该第二谓词指定用于过滤所述查询的结果的第二准则;
其中第二谓词为所述表的第二列指定第二条件;
通过将来自第二列的值加载到输入高速缓存并使得过滤单元将第二谓词应用到所述值来生成第二谓词结果;
其中第二谓词结果识别所述表中在第二列中具有满足由第二谓词指定的第二条件的值的行;
其中至少部分地基于谓词结果来选择作为结果而返回的行包括:
合并第一谓词结果和第二谓词结果以生成合并的结果;
利用所述合并的结果来识别同时满足第一谓词和第二谓词的行;
选择由作为同时满足第一谓词和第二谓词的所述合并的结果识别的行。
13.如权利要求10所述的一种或多种非瞬时计算机可读介质,还存储使得所述一个或多个计算设备执行以下操作的指令,包括:
对于所述谓词集合中的每个谓词:
用所述谓词集合中的所述每个谓词编程过滤单元,其中所述每个谓词指定用于过滤所述查询的结果的特定准则;
通过将来自列的至少一部分的值加载到过滤单元并且使得过滤单元将所述每个谓词应用到所述值来生成谓词结果;
其中用于选择作为结果而返回的行的指令包括用于以下操作的指令:
合并每个谓词结果以生成最终结果,该最终结果识别满足由所述谓词集合指定的所有准则的行;
选择由作为满足所述谓词集合指定的准则的最终结果识别的行。
14.如权利要求13所述的一种或多种非瞬时计算机可读介质,
其中为所述每个谓词生成的谓词结果被用来确定给过滤单元提供哪些行值来用于进行下一谓词的评估;
其中所述谓词集合以顺序次序进行评估;
其中顺序次序基于谓词将过滤掉大量行的可能性;
其中较高可能过滤掉大量行的谓词在较小可能过滤掉大量行的谓词之前进行评估。
15.如权利要求13所述的一种或多种非瞬时计算机可读介质,其中用于选择行作为结果的指令包括用于以下操作的指令:
将最终结果转换为存储器地址集合;
其中存储器地址集合中的每个存储器地址都识别满足由所述谓词集合指定的准则的行的存储器位置。
16.如权利要求10所述的一种或多种非瞬时计算机可读介质,其中用于使过滤单元将所述谓词应用到所述值的指令包括用于以下操作的指令:
如果所述特定列的对应行的值满足条件,则为该对应行生成第一位值;
如果所述对应行的值不满足条件,则为该对应行生成不同于第一位值的第二位值。
17.如权利要求10所述的一种或多种非瞬时计算机可读介质,其中用于通过将来自所述特定列的值加载到输入高速缓存并使得过滤单元将所述谓词应用到所述值来生成谓词结果的指令包括用于以下操作的指令:
加载在存储器的第一块中存储的来自所述特定列的第一组值;
使过滤单元将所述谓词应用到第一组值以生成第一位向量,该第一位向量识别所述表中具有在存储器的第一块内存储的满足由所述谓词指定的条件的值的行;
加载在存储器的第二块中存储的来自所述特定列的第二组值;
使过滤单元将所述谓词应用到第二组值以生成第二位向量,该第二位向量识别所述表中具有在存储器的第二块内存储的满足由所述谓词指定的条件的值的行。
18.如权利要求10所述的一种或多种非瞬时计算机可读介质,其中用于使过滤单元将所述谓词应用到所述值的指令包括用于使过滤单元并行地将所述谓词应用到来自所述特定列的多个值的指令。
19.一种用于执行过滤和投影操作的系统,包括:
控制单元,配置为:
接收谓词集合,该谓词集合指定用于过滤针对表的查询的结果的准则;
编程过滤单元以执行所述谓词集合中特定谓词的应用,其中所述特定谓词为所述表的特定列指定条件;
过滤单元,配置为:
从所述特定列接收值并且将所述特定谓词应用到所述值;
生成位向量,该位向量识别所述表中在所述特定列内具有满足由所述特定谓词指定的条件的值的行;
投影单元,配置为:
至少部分地基于所述位向量来选择作为查询结果而返回的行;
返回所选择的行作为查询结果。
20.如权利要求19所述的系统,其中:
所述谓词是与所述查询相关联的谓词集合中的第一谓词;
所述控制单元还配置为:
用所述第二谓词中的第二谓词编程过滤单元,该第二谓词指定用于所述表的第二列的第二条件;
所述过滤单元还配置为:
从第二列接收值并且将第二谓词应用到所述值;
生成第二位向量,该第二位向量识别所述表中在第二列内具有满足由第二谓词指定的第二条件的值的行;
该系统还包括合并单元,配置为:
通过应用按位运算符来合并第一位向量和第二位向量以生成第三位向量;
其中所述投影单元配置为:
利用第三位向量来识别同时满足第一谓词和第二谓词的行;
选择由作为同时满足第一谓词和第二谓词的第三位向量识别的行。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/590,032 US9727606B2 (en) | 2012-08-20 | 2012-08-20 | Hardware implementation of the filter/project operations |
US13/590,032 | 2012-08-20 | ||
PCT/US2013/054808 WO2014031393A1 (en) | 2012-08-20 | 2013-08-13 | Hardware implementation of the filter/project operations |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104685499A true CN104685499A (zh) | 2015-06-03 |
CN104685499B CN104685499B (zh) | 2018-12-14 |
Family
ID=49034238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380050949.6A Active CN104685499B (zh) | 2012-08-20 | 2013-08-13 | 执行过滤和投影操作的方法、系统和计算机可读介质 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9727606B2 (zh) |
EP (1) | EP2885727B1 (zh) |
JP (1) | JP6305406B2 (zh) |
CN (1) | CN104685499B (zh) |
WO (1) | WO2014031393A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112639769A (zh) * | 2018-06-08 | 2021-04-09 | 微软技术许可有限责任公司 | 利用概率谓词来加速机器学习推理 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9563658B2 (en) | 2012-08-20 | 2017-02-07 | Oracle International Corporation | Hardware implementation of the aggregation/group by operation: hash-table method |
US9600522B2 (en) | 2012-08-20 | 2017-03-21 | Oracle International Corporation | Hardware implementation of the aggregation/group by operation: filter method |
US9176999B2 (en) * | 2012-09-13 | 2015-11-03 | International Business Machines Corporation | Multiplication-based method for stitching results of predicate evaluation in column stores |
US9235564B2 (en) * | 2013-07-19 | 2016-01-12 | International Business Machines Corporation | Offloading projection of fixed and variable length database columns |
US9275168B2 (en) * | 2013-07-19 | 2016-03-01 | International Business Machines Corporation | Hardware projection of fixed and variable length columns of database tables |
US9582540B2 (en) | 2014-08-21 | 2017-02-28 | International Business Machines Corporation | Feedback mechanism providing row-level filtering earlier in a plan |
US20160063050A1 (en) * | 2014-08-28 | 2016-03-03 | Joerg Schoen | Database Migration Consistency Checker |
JP6871504B2 (ja) | 2016-12-27 | 2021-05-12 | 富士通株式会社 | 情報処理装置、データロードプログラム及びデータロード方法 |
US11789936B2 (en) * | 2021-08-31 | 2023-10-17 | Lemon Inc. | Storage engine for hybrid data processing |
US11841845B2 (en) | 2021-08-31 | 2023-12-12 | Lemon Inc. | Data consistency mechanism for hybrid data processing |
WO2023131869A1 (en) * | 2022-01-05 | 2023-07-13 | Neuroblade Ltd. | Processing systems |
US11853239B2 (en) * | 2022-04-11 | 2023-12-26 | Western Digital Technologies, Inc. | Hardware accelerator circuits for near storage compute systems |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040220904A1 (en) * | 2003-04-30 | 2004-11-04 | International Business Machines Corporation | Information retrieval system and method using index ANDing for improving performance |
US20080189251A1 (en) * | 2006-08-25 | 2008-08-07 | Jeremy Branscome | Processing elements of a hardware accelerated reconfigurable processor for accelerating database operations and queries |
US20090300002A1 (en) * | 2008-05-28 | 2009-12-03 | Oracle International Corporation | Proactive Information Security Management |
US20100088315A1 (en) * | 2008-10-05 | 2010-04-08 | Microsoft Corporation | Efficient large-scale filtering and/or sorting for querying of column based data encoded structures |
US20100306219A1 (en) * | 2009-05-28 | 2010-12-02 | Balasubramanyam Sthanikam | Cache-Based Predicate Handling For Queries On XML Data Using Uncorrelated Path-Based Row Sources |
Family Cites Families (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2519245B2 (ja) * | 1987-05-15 | 1996-07-31 | 株式会社日立製作所 | 情報検索装置 |
JPH04199275A (ja) * | 1990-11-26 | 1992-07-20 | Oki Electric Ind Co Ltd | データベース検索装置 |
JPH04320572A (ja) * | 1991-04-19 | 1992-11-11 | Toshiba Corp | データ処理装置 |
US5511190A (en) | 1995-01-20 | 1996-04-23 | Tandem Computers, Inc. | Hash-based database grouping system and method |
US5655080A (en) | 1995-08-14 | 1997-08-05 | International Business Machines Corporation | Distributed hash group-by cooperative processing |
US5706495A (en) | 1996-05-07 | 1998-01-06 | International Business Machines Corporation | Encoded-vector indices for decision support and warehousing |
US5884229A (en) | 1996-06-10 | 1999-03-16 | Exxon Production Research Company | Method for measuring lateral continuity at a specified subsurface location from seismic data |
US5884299A (en) | 1997-02-06 | 1999-03-16 | Ncr Corporation | Optimization of SQL queries involving aggregate expressions using a plurality of local and global aggregation operations |
JP2000132584A (ja) * | 1998-10-27 | 2000-05-12 | Hitachi Ltd | Hdl入力方法及び装置 |
JP2000187668A (ja) | 1998-12-22 | 2000-07-04 | Hitachi Ltd | グループ化方法と重複排除方法 |
US6934712B2 (en) | 2000-03-21 | 2005-08-23 | International Business Machines Corporation | Tagging XML query results over relational DBMSs |
US6598041B1 (en) | 2000-09-07 | 2003-07-22 | International Business Machines Corporation | Method, system, and program for processing modifications to data in tables in a database system |
US6581055B1 (en) * | 2000-09-11 | 2003-06-17 | Oracle International Corporation | Query optimization with switch predicates |
CA2327167C (en) * | 2000-11-30 | 2007-10-16 | Ibm Canada Limited-Ibm Canada Limitee | Method and system for composing a query for a database and traversing the database |
US6571233B2 (en) * | 2000-12-06 | 2003-05-27 | International Business Machines Corporation | Optimization of SQL queries using filtering predicates |
US6996569B1 (en) | 2001-06-20 | 2006-02-07 | Microstrategy Incorporated | Systems and methods for custom grouping of data |
US6823329B2 (en) | 2002-04-02 | 2004-11-23 | Sybase, Inc. | Database system providing methodology for acceleration of queries involving functional expressions against columns having enumerated storage |
US6732354B2 (en) * | 2002-04-23 | 2004-05-04 | Quicksilver Technology, Inc. | Method, system and software for programming reconfigurable hardware |
US6957225B1 (en) * | 2002-05-07 | 2005-10-18 | Oracle International Corporation | Automatic discovery and use of column correlations in tables |
US7433886B2 (en) | 2003-10-24 | 2008-10-07 | Microsoft Corporation | SQL language extensions for modifying collection-valued and scalar valued columns in a single statement |
US7469241B2 (en) | 2004-11-30 | 2008-12-23 | Oracle International Corporation | Efficient data aggregation operations using hash tables |
US7974976B2 (en) * | 2006-11-09 | 2011-07-05 | Yahoo! Inc. | Deriving user intent from a user query |
US7870398B2 (en) * | 2007-01-25 | 2011-01-11 | International Business Machines Corporation | Integrity assurance of query result from database service provider |
US7996387B2 (en) * | 2007-07-27 | 2011-08-09 | Oracle International Corporation | Techniques for extending user-defined indexes with auxiliary properties |
US9524317B2 (en) | 2007-08-24 | 2016-12-20 | International Business Machines Corporation | Optimization of aggregate queries in database management systems using an early out join when processing min and max functions |
US8078595B2 (en) | 2007-10-09 | 2011-12-13 | Oracle International Corporation | Secure normal forms |
US8150850B2 (en) * | 2008-01-07 | 2012-04-03 | Akiban Technologies, Inc. | Multiple dimensioned database architecture |
US20090216757A1 (en) * | 2008-02-27 | 2009-08-27 | Robi Sen | System and Method for Performing Frictionless Collaboration for Criteria Search |
US8275761B2 (en) | 2008-05-15 | 2012-09-25 | International Business Machines Corporation | Determining a density of a key value referenced in a database query over a range of rows |
US8374986B2 (en) | 2008-05-15 | 2013-02-12 | Exegy Incorporated | Method and system for accelerated stream processing |
US8832112B2 (en) | 2008-06-17 | 2014-09-09 | International Business Machines Corporation | Encoded matrix index |
US20100030728A1 (en) | 2008-07-29 | 2010-02-04 | Oracle International Corporation | Computing selectivities for group of columns and expressions |
US9430526B2 (en) | 2008-09-29 | 2016-08-30 | Teradata Us, Inc. | Method and system for temporal aggregation |
US8312038B2 (en) | 2008-12-18 | 2012-11-13 | Oracle International Corporation | Criteria builder for query builder |
US8285709B2 (en) * | 2009-05-12 | 2012-10-09 | Teradata Us, Inc. | High-concurrency query operator and method |
EP2290562A1 (en) | 2009-08-24 | 2011-03-02 | Amadeus S.A.S. | Segmented main-memory stored relational database table system with improved collaborative scan algorithm |
US8832142B2 (en) * | 2010-08-30 | 2014-09-09 | Oracle International Corporation | Query and exadata support for hybrid columnar compressed data |
US10311105B2 (en) | 2010-12-28 | 2019-06-04 | Microsoft Technology Licensing, Llc | Filtering queried data on data stores |
US8676834B2 (en) | 2011-02-16 | 2014-03-18 | International Business Machines Corporation | Set-level comparisons in dynamically formed groups |
US9563658B2 (en) | 2012-08-20 | 2017-02-07 | Oracle International Corporation | Hardware implementation of the aggregation/group by operation: hash-table method |
US9600522B2 (en) | 2012-08-20 | 2017-03-21 | Oracle International Corporation | Hardware implementation of the aggregation/group by operation: filter method |
-
2012
- 2012-08-20 US US13/590,032 patent/US9727606B2/en active Active
-
2013
- 2013-08-13 JP JP2015528521A patent/JP6305406B2/ja active Active
- 2013-08-13 WO PCT/US2013/054808 patent/WO2014031393A1/en active Application Filing
- 2013-08-13 EP EP13753036.6A patent/EP2885727B1/en active Active
- 2013-08-13 CN CN201380050949.6A patent/CN104685499B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040220904A1 (en) * | 2003-04-30 | 2004-11-04 | International Business Machines Corporation | Information retrieval system and method using index ANDing for improving performance |
US20080189251A1 (en) * | 2006-08-25 | 2008-08-07 | Jeremy Branscome | Processing elements of a hardware accelerated reconfigurable processor for accelerating database operations and queries |
US20090300002A1 (en) * | 2008-05-28 | 2009-12-03 | Oracle International Corporation | Proactive Information Security Management |
US20100088315A1 (en) * | 2008-10-05 | 2010-04-08 | Microsoft Corporation | Efficient large-scale filtering and/or sorting for querying of column based data encoded structures |
US20100306219A1 (en) * | 2009-05-28 | 2010-12-02 | Balasubramanyam Sthanikam | Cache-Based Predicate Handling For Queries On XML Data Using Uncorrelated Path-Based Row Sources |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112639769A (zh) * | 2018-06-08 | 2021-04-09 | 微软技术许可有限责任公司 | 利用概率谓词来加速机器学习推理 |
Also Published As
Publication number | Publication date |
---|---|
US20140052743A1 (en) | 2014-02-20 |
JP6305406B2 (ja) | 2018-04-04 |
CN104685499B (zh) | 2018-12-14 |
EP2885727A1 (en) | 2015-06-24 |
JP2015532748A (ja) | 2015-11-12 |
EP2885727B1 (en) | 2019-10-23 |
US9727606B2 (en) | 2017-08-08 |
WO2014031393A1 (en) | 2014-02-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104685499A (zh) | 过滤/投影操作的硬件实现 | |
CN104685497B (zh) | 通过过滤方法操作的聚合/分组的硬件实现 | |
US11514045B2 (en) | Structured cluster execution for data streams | |
Kitsuregawa et al. | Application of hash to data base machine and its architecture | |
US20200117664A1 (en) | Generation of a query plan in a database system | |
EP1738290B1 (en) | Partial query caching | |
US8738649B2 (en) | Distributed processing of streaming data records | |
US10452632B1 (en) | Multi-input SQL-MR | |
CN104685498A (zh) | 聚合/分组操作的硬件实现方式:散列表方法 | |
KR20140014123A (ko) | 데이터 질의 관리 | |
AU5046100A (en) | Method and apparatus for populating multiple data marts in a single aggregation process | |
CN103714058A (zh) | 数据库查询的优化 | |
US20210240458A1 (en) | Systems and methods for generating distributed software packages using nondistributed source code | |
US20230177048A1 (en) | Generating classification data via a query processing system | |
WO2022251001A1 (en) | Query execution utilizing probabilistic indexing | |
US11599540B2 (en) | Query execution apparatus, method, and system for processing data, query containing a composite primitive | |
US11507578B2 (en) | Delaying exceptions in query execution | |
Vemuri et al. | Execution primitives for scalable joins and aggregations in map reduce | |
CN105631047A (zh) | 一种分层级联的数据处理方法及系统 | |
CN111639103B (zh) | 业务数据处理方法、装置、计算机系统和介质 | |
US20230010912A1 (en) | Utilizing array field distribution data in database systems | |
EP4352627A1 (en) | Query execution utilizing probabilistic indexing | |
CN114297260A (zh) | 分布式rdf数据查询方法、装置和计算机设备 | |
CN114385669A (zh) | 数据联机分析方法、系统、客户端及服务端 | |
CN112286995A (zh) | 一种数据分析方法、装置、服务器、系统及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |