CN104685498A - 聚合/分组操作的硬件实现方式:散列表方法 - Google Patents
聚合/分组操作的硬件实现方式:散列表方法 Download PDFInfo
- Publication number
- CN104685498A CN104685498A CN201380050947.7A CN201380050947A CN104685498A CN 104685498 A CN104685498 A CN 104685498A CN 201380050947 A CN201380050947 A CN 201380050947A CN 104685498 A CN104685498 A CN 104685498A
- Authority
- CN
- China
- Prior art keywords
- row
- value
- class value
- group
- address
- 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/242—Query formulation
- G06F16/2433—Query languages
- G06F16/244—Grouping and aggregation
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
描述了用于执行分组和聚合操作的技术。在一个实施例中,接收到对按照第一列分组的数据进行聚合的请求。响应于接收到该请求,第一列的行中的组值被映射到地址。第一组的指针被存储在由该地址识别的第一位置。该指针识别第一组的聚合数据集的第二位置。基于第二列的该行中的值更新所述聚合数据集中所包括的聚合值。
Description
技术领域
本公开一般地涉及用于执行数据库操作的技术,并且更具体地讲,涉及用于执行分组和聚合操作的技术。
背景技术
在这个章节中描述的方案是能够被执行的方案,但未必是以前已经想到或执行的方案。因此,除非另外指示,否则不应该认为在这个章节中描述的任何方案仅由于其被包括在这个章节中而作为现有技术。
数据库包括存储在一个或多个存储装置(诸如一组硬盘)上的数据和元数据。根据实现方式,数据库内的数据可根据各种数据模型而被以逻辑方式组织。例如,关系数据库系统通常将数据存储在一组表中,其中每个表被组织成一组行和列。在多数情况下,每个行代表不同对象,并且每个列代表不同属性。然而,其它数据模型也可被用于组织数据。
为了访问和操纵数据库中的数据,数据库管理系统(DBMS)通常被构造为接收和处理各种数据库命令(经常被称为查询)。在许多实现方式中,DBMS支持符合数据操纵语言(DML)(诸如结构化查询语言(SQL))的查询。当DBMS接收到查询时,DBMS执行由该查询指定的一个或多个数据库操作并且可输出查询结果。示例性数据库操作包括以下描述的聚合和分组操作。
聚合和分组操作
聚合和分组操作是提供关于特定列中的数据的汇总统计的数据库操作。在SQL中,分组操作使用GROUP BY语法按照一个或多个列对聚合函数的结果进行分组。以下的表1表示可在数据库查询中使用的示例性聚合函数。
函数名称 | 描述 |
AVG | 返回列的平均值 |
COUNT | 返回列中的行的数量 |
FIRST | 返回列中的第一个值 |
LAST | 返回列中的最后一个值 |
MAX | 返回列中的最大值 |
MIN | 返回列中的最小值 |
SUM | 返回列中的所有值之和 |
表1:示例性聚合函数
示例性聚合和分组查询在下面被示出在表2中。
表2:示例性聚合查询
以上查询中的每一个在由DBMS执行时,根据销售表的AMOUNT列内的值来聚合数据。例如,以下的表3表示示例性销售表。
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:示例性销售表
查询1请求公司已完成的总美元销售额。当执行查询1时,DBMS执行聚合但不执行分组。DBMS无条件地计算销售表中的所有金额之和以返回最后结果。考虑表3的示例性销售表,以下的表4表示执行查询1的预期输出。
sum(AMOUNT) |
2820 |
表4:查询1的结果表
查询2请求按照完成销售的销售员分组的总美元销售额。当执行查询2时,DBMS既执行分组又执行聚合。具体地讲,DBMS为销售表中每个独一无二的销售员产生一个聚合结果,其中所述结果是由特定的销售员完成的总销售额。考虑表3的示例性销售表,以下的表5表示执行查询2的预期输出。
SALESMAN | sum(AMOUNT) |
Pedro | 1070 |
Alex | 1400 |
Michael | 350 |
表5:查询2的结果表
查询3请求按照与销售关联的顾客和销售员来分组的总美元销售额。当执行查询3时,DBMS执行多列分组和聚合。在这种情况下,针对每个唯一的销售员-顾客对,将会存在一个聚合结果,并且聚合结果是该特定销售员-顾客对的总销售额。考虑表3的示例性销售表,以下的表6表示执行查询3的预期输出。
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 |
表6:查询3的结果表
附图说明
在附图中作为例子而非作为限制示出本公开,其中相同的附图标记表示相似元件,并且其中:
图1A和1B是表示根据一个实施例的用于执行分组和聚合操作的示例性系统架构的方框图;
图2是表示根据一个实施例的组列访问块的示例性架构的方框图;
图3是表示根据一个实施例的散列表访问块的示例性架构的方框图;
图4是表示根据一个实施例的聚合状态访问块的示例性架构的方框图;
图5是表示根据一个实施例的值列访问块的示例性架构的方框图;
图6是表示根据一个实施例的用于执行分组和聚合操作的示例性处理的流程图;
图7是表示根据一个实施例的存储器中的销售表的布局的方框图;
图8是根据一个实施例的累加器数据结构的方框图;
图9A-9C是根据一个实施例的在分组和聚合操作期间的累加器数据结构的状态的方框图;
图10是表示根据一个实施例的在已执行分组和聚合操作之后的存储器的状态的方框图;
图11是表示根据一个实施例的示例性散列表结构的方框图;
图12是可实现实施例的计算机系统的方框图。
具体实施方式
在下面的描述中,为了解释的目的,阐述许多具体细节以便提供对本发明的彻底的理解。然而,可在没有这些具体细节的情况下实施本发明,这将是显然的。在其它实例中,以方框图形式示出公知结构和装置,以便避免不必要地使本发明难以理解。
概述
这里描述用于执行分组和聚合数据库操作的技术。在一个实施例中,专用硬件被构造为高效地并且有效地执行分组和聚合数据库操作。当执行分组操作时,专用硬件可支持任意数量的组。
另外,可在没有对表数据进行全局排序的情况下执行分组和聚合。避免全局排序减轻了在对大的列表进行排序的同时发生的随机存储器访问问题。例如,在对列表进行排序的同时,一个项目可能进入位于存储器的一个块中的组,而下一个项目可能属于位于存储器的不同块中的组。在这种情况下写入排序的表将会通常需要反复地关闭和打开新存储页。根据这里描述的技术,可在存储器的小内存块(chunk)上执行分组和聚合,这允许随机访问发生在快速、低功率高速缓存中。
在一个实施例中,系统接收到请求按照第一列来分组的聚合操作的查询。因为对第一列执行grouped by操作,所以第一列中的不同值在这里被称为“组值”。
响应于接收到该查询,系统将第一列的组值映射到一个或多个地址。例如,系统可将散列函数应用于每个组值以确定特定组值映射到的地址。相同组值映射到相同地址,并且不同组值映射到不同地址,除非发生冲突。
在一个实施例中,组值被映射到的每个地址识别表或内容可寻址存储器(CAM)内的一个条目。该条目可存储指针,该指针识别一个组的聚合数据集的存储位置,所述一个组与被散列到该存储位置的组值关联。例如,如果第一列具有被散列到存储位置Y的值X,则存储位置Y识别存储指向在第一列中具有X的行的聚合数据的指针的条目。
当行的组值映射到该条目时,系统可更新该组的所述聚合数据集中所包括的聚合值。系统可针对第一列的每一行执行映射组值和更新聚合值的步骤。
在一个实施例中,系统可执行冲突检测以确保两个或更多的不同组不更新相同聚合值。例如,除了聚合值之外,所述聚合数据集可包括组值。如果第二组值映射到与第一组值相同的地址,则针对存储在所述聚合数据集中的组值检查第二组值。如果它们匹配,则未发生冲突并且聚合值可被更新。然而,如果组值不匹配,则检测到冲突。
为了处理冲突,所述聚合数据集可包括指示下一组的聚合数据的存储位置的指针。这个指针可最初被设置为空值。当冲突发生时,该指针可被更新以指向下一组的聚合数据集。如果在已设置该指针之后发生随后的冲突,则可检索下一组的聚合数据集,并且可对下一组重复冲突检测和处理过程。
用于处理分组和聚合操作的示例性架构
图1A和1B是表示根据一个实施例的用于执行分组和聚合操作的示例性系统架构的方框图。系统100通常包括随机存取存储器(RAM)102、RAM控制器104、高速缓存110、请求队列120、组列访问单元130、值列访问单元140、散列表访问单元150和聚合状态访问单元160。
可使用允许随机访问其存储的数据的任何形式的数据存储器来实现RAM 102。RAM 102的例子非限制性地包括动态RAM(DRAM)和静态RAM(SRAM)。根据一个实施例,RAM 102至少存储由分组/聚合数据库查询所查询的数据库的一部分。RAM 102内存储的数据的组织可因实现方式而不同。在一个实施例中,RAM 102以混合列格式存储数据库。根据这个格式,RAM 102存储N个数据块,其中N可以是任何正整数。在每个块内,以面向列的方式存储一个或多个列的固定数量的行。例如,第一个块可存储数据库表的一个或多个列的前50行,第二个块存储接下来的50行,并且第三个块存储接下来的30行。在每个块内,每个列的列值被连续地存储。
RAM控制器104是管理前往RAM 102和来自RAM 102的数据流的存储器控制器。因此,RAM控制器104可处理来自高速缓存110或请求队列120的请求以针对RAM 102读取数据和写入数据。可使用任何合适的存储器控制器(非限制性地包括双倍数据速率DDR存储器控制器、双通道存储器控制器或全缓冲存储器控制器)实现RAM控制器104。
高速缓存110存储在分组/聚合查询的处理期间由访问块使用的数据。类似于RAM,高速缓冲存储器可允许随机访问存储的数据;然而,与RAM相比,高速缓冲存储器通常在大小方面更小并且具有更小的延时。因此,当处理用于分组/聚合查询的数据时,通过减少针对RAM 102的I/O操作的数量,对数据进行高速缓冲可减少数据瓶颈并且提高系统100的性能。
请求队列120缓冲对访问块的请求和来自访问块的请求,所述访问块包括组列访问单元130、值列访问单元140、散列表访问单元150和聚合状态访问单元160。例如,当接收到分组/聚合查询时,访问块可从RAM 102或高速缓存110请求特定行或行值。请求队列120可缓冲来自访问块的多个这些请求,这允许以流水线方式实现存储器获取,维持高带宽,以防请求的读取导致长延时RAM访问。
根据以下进一步详细地描述的技术,系统100中的访问块(包括组列访问单元130、值列访问单元140、散列表访问单元150和聚合状态访问单元160)负责获取、更新组累加器并且将结果写回至存储器。
存储器组织
系统100的存储器系统可被划分为不同部分以优化在查询处理期间的数据访问。图1B是表示系统100的示例性存储器分级体系的方框图。如图中所示,存储器系统被划分为两个部分:缓冲器112和多级高速缓存114。
缓冲器112可被实现为片上缓冲器并且可以在不被管理的方式下工作。例如,缓冲器112可接收起始存储地址,并且作为响应,顺序地从RAM 102读取数据。在一个实施例中,组列访问单元130和值列访问单元140通过缓冲器112访问RAM 102。根据以下描述的技术,这些块顺序地读取数据并且不对这种数据执行任何修改。因此,数据可被高效地预先加载到缓冲器112中,因为访问模式是已知的并且是顺序的。
多级高速缓存114是可以在与中央处理单元(CPU)高速缓存分级体系(诸如包括第1级(L1)、第2级(L2)和第3级(L3)高速缓存的分级体系)类似的方式下工作的被管理的高速缓存。因此,多级高速缓存114可包括由较大、较慢、较高级高速缓存补充的较小、较快、较低级高速缓存(诸如第1级(L1)高速缓存)。
在一个实施例中,散列表访问单元150和聚合状态访问单元160通过多级高速缓存114访问RAM 102。当访问位于RAM 102中或盘上的数据时,这些单元可首先搜索多级高速缓存114的较低级高速缓存,然后搜索多级高速缓存114的较高级高速缓存。例如,这些单元可首先在L1高速缓存中寻找相关数据,然后在L2高速缓存中寻找相关数据,然后在L3高速缓存中寻找相关数据。如果在高速缓存级别中的任何一级中均未找到该数据,则可从RAM 102请求该数据。如以下更详细地描述,散列表访问单元150和聚合状态访问单元160随机地读取和修改数据,并且对于这些数据访问可能存在某种程度的空间和时间局部性。因此,多级高速缓存很适合支持这些单元。
请求队列120缓冲从访问单元接收的存储器访问请求。在一个实施例中,请求队列120可按照与它接收请求的次序相同次序处理请求。例如,请求队列120可分派访问存储器的请求并且在处理下一个请求之前等待直至已完成该事务。替代地,支持散列表访问单元150和聚合状态访问单元160的请求队列可被构造为支持无序分派。例如,即使对RAM 102的请求被先发送,也可在对RAM 102的长延时访问之前返回对多级高速缓存114的低延时访问。从而,可在慢存储器访问的情况下更好地使用可用硬件资源。
组列访问单元
图2是表示组列访问单元130的示例性架构的方框图。组列访问单元130通常包括地址产生器204、标签分派器206和本地存储器208。组列访问单元130负责获取正被分组的列的值。为了解释的目的,将假设正在执行查询2。在查询2中,正被分组的列是SALESMAN。因此,在本例中,组列访问单元130负责从SALESMAN列获取值。
地址产生器204产生正被分组的列的存储地址并且将该地址发送给存储器请求队列202。在一个实施例中,地址产生器204开始于分组列的起始地址。从而,在本例中,地址产生器204将会将SALESMAN列的起始地址发送给请求队列202。
在图2中,由地址产生器204发出的请求被示出为发送“至存储器”。如参照图1所解释的,将请求发送到存储器实际上可以包括:在多级高速缓存114的一个或多个级中寻找数据,并且如果数据不位于多级高速缓存114中,则从RAM 102检索数据。然而,为了解释的目的,将假设请求被简单地发送给“存储器系统”,并且由组列访问单元130从“存储器系统”接收请求的数据。
从而,响应于由地址产生器204产生的地址,存储器系统从分组列(例如SALESMAN)逐行地顺序地返回组名。请求队列202将这些组名存储在本地存储器208中。另外,标签分派器206为进入的组名中的每个组名分派一个唯一标签,所述唯一标签与对应名称一起被存储在本地存储器208中。例如,在本例中,地址产生器204可提交SALESMAN列的起始的地址。作为响应,“Pedro”被接收并且与标签TAG1一起被存储在本地存储器208中。然后,地址产生器204提交SALESMAN列的下一个值的地址。作为响应,“Pedro”被接收并且与标签TAG2一起被存储在本地存储器208中。可对于SALESMAN列的其余行重复这个处理。
在一个实施例中,由标签分派器206分派的标签用作行标识符,所述行标识符可被用于跟踪对应行并且使它与稍后可在聚合处理中到达的其它数据(诸如值)关联。标签分派器206可按照任何合适的方式产生标签以唯一地识别进入的行。例如,标签分派器可被实现为将顺序编号分派给每个进入的组名的计数器。因此,标签可为每个行提供唯一标识符,用作ROWID属性的代理,而不需要向RAM 102发出访问ROWID列的存储器请求。标签还能够实现数据条目的无序处理,并且可被用于识别跨越多个访问块的特定事务。
根据一个实施例,组列访问单元130将进入的组名直接发送给散列表访问单元150以用于进行散列。另外,小的本地存储器208的内容(包括标签和关联的组名)被发送给聚合状态访问单元160,在聚合状态访问单元160中,组名被用于冲突检查。
散列表访问单元
图3是表示根据一个实施例的散列表访问单元150的示例性架构的方框图。散列表访问单元150通常包括散列产生器304和本地存储器306。散列表访问单元150负责将散列函数应用于组名并且获取对应的指针。
散列产生器304从组列访问单元130逐行地接收组名,并且将散列函数应用于每个进入的组名。可使用将组名映射到散列表条目的地址的任何合适的函数实现散列函数。在已应用散列函数之后,散列产生器304将存储器请求发送给请求队列302以在与由散列函数产生的散列值对应的地址处从散列表条目获取指针。请求队列302从本地高速缓存(例如多级高速缓存114)或RAM 102获取指针,并且将指针返回到本地存储器306。
提供给散列产生器304的组值在这里被称为“进入的组值”。在一个实施例中,如果未在以前遇到进入的组值,则散列表条目存储空指针。例如,当“Alex”被第一次提供给散列产生器304时,将返回具有空指针的散列表条目。
另一方面,如果以前已遇到过该进入的组值或者发生散列冲突,则基于散列值获得的散列表条目将存储指向“累加器”数据结构的指针。如果未发生冲突,则累加器数据结构用于进入的组值。在冲突的情况下,累加器数据结构可用于具有散列运算到与进入的组值相同的散列值的组名的另一组。
累加器数据结构存储组的各种数据,并且将在下面被更详细地描述。一旦存储器系统返回指针,它被与和正被处理的特定行对应的标签一起存储在本地存储器306中。可从组列访问单元130接收该对应标签。本地存储器306的输出(包括标签和对应指针)被发送给聚合状态访问单元160,聚合状态访问单元160在由该指针指示的地址处获取有效载荷数据。
聚合状态访问单元
图4是表示根据一个实施例的聚合状态访问单元160的示例性架构的方框图。聚合状态访问单元160通常包括复用器(mux)404、冲突检查块406、存储器分配器408和本地存储器410。聚合状态访问单元160负责在由散列表指针指示的地址处获取有效载荷数据,并且对这个有效载荷数据执行冲突检查。
Mux 404从散列表访问单元150接收散列表指针。首先检查来自散列表访问单元150的进入的指针,以确定它是否是空指针。空指针指示还未遇到对应的组并且应该分配存储器以存储该组的累加器。如果指针是空的,则存储器分配器408为这个组分配存储器,将对应的组累加器中的字段初始化为初始状态,并且将数据写入本地存储器410。新遇到的组在本地存储器410中的初始聚合值可保持为空或者可被设置为零。
如果指针不是空的,则mux 404将由该指针识别的存储地址发送给请求队列402以获取有效载荷数据。请求队列402通过本地高速缓存(例如多级高速缓存114)获取有效载荷数据,并且将数据返回给冲突检查406。当本地高速缓存递送这个有效载荷时,冲突检查406将返回的有效载荷数据中的组名与由组列访问单元130发送的组名进行比较。如果组名匹配,则不存在冲突,并且有效载荷数据(包括该组的聚合值)被与识别发生冲突检查事务的对应行的标签一起被写入本地存储器410。
如果组名不匹配,则检测到冲突,并且从有效载荷数据提取指向下一个有效载荷的指针,并且该指针被发送回给在mux 404处的空检查,在mux 404处如以前一样针对新指针发生相同处理。重复这个处理,直至指向下一个有效载荷的指针是空,或者返回的组名与由组列访问单元130发送的组名匹配。
本地存储器高速缓存410的输出被发送给值列访问单元140,值列访问单元140更新累加器数据结构。
值列访问单元
图5是表示根据一个实施例的值列访问单元140的示例性架构的方框图。值列访问单元140通常包括地址产生器504、标签分派器506、聚合操作单元508和本地存储器510。值列访问单元140负责获取正被聚合的列(例如,在查询2的情况下的AMOUNT列)的值。
类似于组列访问单元130,地址产生器504开始于列的起始地址并且将预期地址发送给请求队列502。存储器系统逐行地返回这些值。标签分派器506将标签分派给与行标识符对应的每个行,并且结果被写入本地存储器510。在一个实施例中,由标签分派器506为给定行分派的标签与分派给从该给定行读取的组名的标签匹配,因此当值列访问单元140聚合组数据时,这两部分数据能够彼此关联,如下所述。
来自本地存储器510的值、来自聚合状态访问单元160的对应标签和当前累加器状态被发送给聚合操作单元508。聚合操作单元508使用该标签从本地存储器510检索具有匹配的标签的值。聚合操作单元508随后基于在查询中指定的聚合函数和由本地存储器510提供的值来更新该组的聚合值。聚合操作单元508可非限制性地执行表1中示出的任何函数。例如,在查询2的情况下,用于Pedro组的累加器数据结构将在处理第一行之后具有值400。当处理第二行时,本地存储器510将把值200提供给聚合操作单元508,聚合操作单元508将把这个值与400相加以产生值600。用于Pedro组的累加器数据结构将随后被更新为这个值。在该操作完成之后,更新的累加器被写回至聚合状态访问单元160中的本地存储器410或本地高速缓存。
累加器数据结构
在一个实施例中,系统100针对它处理的每个组产生并且保持一个累加器数据结构。每个组的累加器数据结构存储该组的聚合数据集。根据实现方式和正被执行的聚合操作的类型,存储在累加器数据结构中的所述数据集可以不同。
图8是根据一个示例性实施例的累加器数据结构的方框图。累加器数据结构800包括值字段802、聚合结果字段804和指针字段806。在替代实施例中,累加器数据结构800可包括更多字段或省略一个或多个示出的字段。
值字段802可存储任何合适的组标识符,诸如组名或任何其它字母数字值。当存储器分配器408使用来自进入的行的组值将这个字段初始化为它的初始状态时,可存储这个值。
聚合结果字段804存储组的聚合值。存储器分配器408可将这个字段初始化为空或零值。可随后由聚合操作单元508根据上述技术更新这个字段。在一个实施例中,多个聚合能够被一起存储在这个字段中。例如,对于下面的查询:
SELECT sum(amount),count(*)
FROM sales
GROUP BY salesman
sum(amount)和count(*)聚合结果能够被存储在这个单个数据结构中。
指针字段806存储空指针或指向组值与当前组的组值冲突的另一组的累加器数据结构的指针。存储器分配器408可将这个字段初始化为空值。如果散列冲突发生在与数据结构800关联的组和新遇到的组之间,则为新遇到的组创建累加器数据结构,并且利用指向该新累加器数据结构的指针更新指针字段。例如,该指针可对应于新遇到的组的值字段的存储地址。
无序处理
标签可被用于在分组和聚合期间实现对行的无序处理。当支持散列表访问单元150和聚合状态访问单元160的请求队列被构造为支持无序分派时,这可以是有用的。
例如,当处理SALESMAN列的第四行时,聚合状态访问单元160可提交获取Michael组的有效载荷数据的请求。聚合状态访问单元160可利用对应标签(诸如TAG4)将这个请求提交给请求队列。请求队列可首先尝试从多级高速缓存114获取该数据,并且如果未在多级高速缓存114中找到该数据,则从RAM 102获取该数据。为了例示的目的,假设获取Michael的有效载荷数据导致长延时RAM访问。
在等待返回Michael组的有效载荷数据的同时,聚合状态访问单元160可处理SALESMAN列的第五行。因此,聚合状态访问单元160利用对应标签(TAG5)将获取Alex组的有效载荷数据的请求提交给请求队列。请求队列可随后从多级高速缓存114获取这个组的有效载荷数据,并且将该有效载荷数据和关联的标签在返回Michael的有效载荷数据之前返回给聚合状态访问单元160。这个有效载荷数据和对应标签(标签5)随后被提交给值访问列单元140。
响应于从聚合状态访问单元160接收到该数据,值列访问单元140将从聚合状态访问单元160接收的TAG5与存储在本地存储器510中的TAG5进行匹配,以识别应该在聚合操作中使用的值数据。关联的值数据被发送给聚合操作单元508以更新Alex组的有效载荷数据内的聚合值。从而,在第四行的处理之前,可完成第五行的处理。
示例性处理和实现方式
图6表示根据一个实施例的用于执行分组和聚合操作的示例性处理。这个处理可被实现在任何合适系统(非限制性地包括系统100)上。
当接收到分组/聚合查询时,在步骤602中,从由该查询识别的表读取一行。在步骤604中,从该行的相关列检索组名和值数据。在步骤606中,对组名执行散列运算以识别散列表或其它形式的内容可寻址存储器内的位置。在步骤608中,从通过散列运算指示的位置读取指针。在步骤610中,确定该指针是否是空。如果该指针是空,则还未遇到过该组,并且在步骤612,为新组分配存储器,并且利用识别分配的存储器的位置的指针更新散列表。将对散列运算产生相同存储地址的所有随后的行返回这个散列指针。从而,如果在步骤610确定该指针不是空,则该处理继续前进至步骤614。
在步骤614中,将进入的行的组名与存储在由当前指针识别的位置的有效载荷数据的组名进行比较。在步骤616中,确定是否存在冲突。如果进入的行的组名与存储在由该指针识别的有效载荷数据中的组名匹配,则不存在冲突,并且该处理继续前进至步骤626。如果组名不匹配,则该处理继续前进至步骤618。在步骤618,从有效载荷数据检索指向具有相同散列值的下一个组的指针。在步骤620中,确定这个指针是否是空。如果该指针是空,则以前未遇到与当前组名关联的组,并且该处理继续前进至步骤624。在步骤624,为新组分配存储器,并且在步骤614检索的有效载荷数据被更新以包括识别新分配的存储器的位置的指针。如果在步骤620确定该指针不是空,则检索在由该指针识别的位置处的有效载荷数据,并且该处理返回到步骤614以对该下一个有效载荷数据重复冲突检查处理。
一旦遇到新组或者未检测到冲突,则在步骤626,根据聚合操作和在步骤604检索的值数据更新对应组的有效载荷数据中的聚合值。
图7、9和10表示图6中示出的处理的示例性实现方式。特别地,这些图示出在表2中示出的查询2的处理期间的系统100的各种状态。
图7是表示根据一个示例性实现方式的存储器中的销售表702的布局的方框图。参照图7,SALE_ID列704、SALESMAN列706、CUSTOMER列708和AMOUNT列710被以面向列的格式存储,使得来自特定列的所有行被连续地存储在存储器中。在查询2的情况下,步骤602和604可包括:组列访问单元130读取SALESMAN列706的第一条目以检索组名“Pedro”,以及值列访问单元140读取AMOUNT列710的第一元素以检索值数据“400”。
组名“Pedro”随后被执行散列运算以产生将存储指向这个组的累加器数据结构的指针的存储地址。由于两个或更多的唯一输入值能够在一些情况下散列运算到相同值,所以组名“Pedro”和对应指针被发送给散列表访问单元150以检查冲突。因为“Pedro”是被处理的第一组,所以聚合状态访问单元160确定指针是空并且为Pedro组分配存储器。在一个实施例中,聚合状态访问单元160产生诸如图8中示出的累加器数据结构,并且将每个字段初始化为起始状态。
图9A是根据一个实施例的在初始化之后的Pedro累加器数据结构的状态的方框图。值字段被初始化为与组名对应的Pedro,并且聚合结果字段的值被初始化为“0”。由于还不存在对于这个地址的冲突,所以指向下一个值的指针被设置为空。
一旦Pedro累加器数据结构已被初始化,聚合结果字段的值由聚合状态访问单元160读取并且存储。聚合状态访问单元160将“400”值提供给聚合操作单元508,聚合操作单元508将从该行提取的值数据与由聚合状态访问单元160提供的聚合结果值相加。在聚合结果值已被更新之后,聚合结果值被写回至存储器。图9B是在已处理第一行之后的Pedro累加器数据结构的状态的方框图。参照图9B,在处理第一行之后,聚合结果字段存储与聚合操作的结果对应的值“400”。
在累加器数据结构已被更新之后,对于表中的其余行中的每一行重复该处理。对于第二行,组名也是“Pedro”,该组名被散列运算至与第一行相同的地址。因此,聚合状态访问单元160确定Pedro组已经存在于这个位置。冲突检查块406随后将第二元素的组名“Pedro”与存储在图9B中示出的累加器数据结构中的组名(该组名也是“Pedro”)进行比较。组名相同;因此,聚合状态访问单元160确定不存在冲突。Pedro累加器数据结构的聚合结果字段的值随后被读取到值列访问单元140中,值列访问单元140利用新值(400+200=600)更新该字段并且将更新的字段写回至存储器。
为了例示的目的,假设:“Pedro”的散列运算和“Michael”的散列运算在本例中引起冲突。从而,由散列表访问单元150应用的散列函数为这些组名中的每个组名产生相同存储地址。在这种情况下,冲突检查406发现存储在这个位置的值(“Pedro”)不等于进入的行值(“Michael”)。冲突检查406随后尝试跟随存储在该位置的下一个值指针以对下一个元素执行冲突检查。在这种情况下,下一个值指针是零,意味着没有其它值存在于这个散列位置并且这是在这个位置的第一个冲突。存储器分配器随后为Michael组创建新数据结构,并且更新Pedro组中的下一个值以指向Michael。
图9C表示在存储器分配器已初始化Michael的值之后的累加器数据结构的状态。如所示出的,存储在Pedro累加器数据结构中的指针指向Michael。组名Alex未引起冲突,并且因此被分开存储。
在产生Michael累加器数据结构之后,它的聚合值字段被根据以上处理进行更新。对于表中的其余行重复这个处理以获得每个组的最后的聚合结果。
图10是表示在聚合处理的末尾的存储器的状态的方框图,散列表1002是四条目散列表。然而,条目的数量可因实现方式而不同。散列表1002存储两个指针:一个指向Pedro累加器1004,另一个指向Alex累加器1006。Pedro累加器1004存储Pedro的聚合结果以及指向Michael累加器1008的指针。Alex累加器1006存储Alex的聚合结果,Michael累加器1008存储Michael的聚合结果。这两个累加器中的指针都是空,这指示针对这些组未发生冲突。作为查询2的结果,可返回每个累加器的组名和对应的聚合结果。
选择散列表的大小
散列表的大小可因实现方式而不同。较小的散列表更加可能导致更多的冲突,这可能降低系统性能。相反地,大的散列表更加可能浪费系统内的存储器容量。
例如,图11是表示根据一个实施例的示例性散列表结构的方框图。散列函数1102被应用于进入的N位值以产生存储在存储器1104中的散列表1106的3位地址。因此,在散列表1106中存在八个不同的可用散列表条目。如所示出的,散列表存储对于三个不同值的三个指针。在这种情况下,较小的2位可寻址散列表将会为这三个指针提供足够的存储。然而,较小的散列表将会增加冲突的可能性,当接收更多值时尤其如此。较大的表(诸如4位可寻址散列表)将会浪费存储资源,当未接收到新的值时尤其如此。
在一个实施例中,基于分组操作的基数(cardinality)的估计确定并且设置特定查询的散列表的大小。可能处于分组操作中的组越多,为散列表分配的存储器越多。例如,N位可寻址散列表中的值N可与分组操作的基数成比例。因此,可选择散列表的大小以在存储消耗和冲突概率之间实现令人满意的平衡。
散列表冲突处理
用于解决散列表冲突的技术可因实现方式而不同。作为上述冲突处理技术的替换方案,系统100可预先计算将映射到散列表中的相同位置的所有组名。当数据库被加载到系统100中时,可执行该预先计算。冲突的组可随后被放置在专用于这些冲突的第二表中。原始散列表中的条目可随后被利用指示在该地址发生冲突并且聚合数据位于第二表中的特殊键替换。
当检测到冲突时,存在搜索第二表的多种方法。如果第二表中的条目的数量小,则线性搜索可能是有效的。冲突处理算法可以对第二表中的每个条目进行遍历,将预期组名与第二表中的组名进行比较。当发现匹配时,返回并且更新这个元素的聚合值字段。
在另一实施例中,也可利用使用不同散列函数的第二散列表实现搜索。该第二散列表的有效载荷数据可使用全累加器数据结构,因为冲突仍然可能发生。
在另一实施例中,能够以二叉树结构组织冲突表。二叉树中的每个节点可存储组名和聚合值。当发现正确节点时,返回并且更新聚合值。如果二叉树很好地平衡,则能够在O(log(N))时间中搜索该表。
该预先计算方案的一个优点在于:它减小累加器数据结构800的大小,因为不再需要字段802和字段806来处理冲突。因此,当存在很少的冲突时,这个方案可相对于实时方案而言节省存储空间。然而,预先计算组可包括比上述其它方案多的处理开销,在存在频繁的产生新组的数据库更新的情况下尤其如此。在这个情形中,当加载新组时,可能需要执行许多预先计算。
硬件概述
根据一个实施例,这里描述的技术由一个或多个专用计算装置实现。专用计算装置可被硬连线以执行该技术,或者可包括被持久编程为执行该技术的数字电子装置(诸如一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)),或者可包括被编程为根据固件、存储器、其它存储器或组合中的程序指令执行该技术的一个或多个通用硬件处理器。这种专用计算装置还可组合定制硬连线逻辑、ASIC或FPGA与定制编程以完成该技术。专用计算装置可以是台式计算机系统、便携式计算机系统、手持式装置、联网装置或包括用于实现该技术的硬连线和/或程序逻辑的任何其它装置。
例如,图12是表示可实现本发明的实施例的计算机系统1200的方框图。计算机系统1200包括用于传送信息的总线1202或其它通信机构、以及用于处理信息的与总线1202耦接的硬件处理器1204。硬件处理器1204可以是例如通用微处理器。
计算机系统1200还包括主存储器1206(诸如随机存取存储器(RAM)或其它动态存储装置),主存储器1206耦接到总线1202以存储信息和由处理器1204执行的指令。例如,RAM 102可被实现在主存储器1206中。主存储器1206还可用于在由处理器1204执行的指令的执行期间存储临时变量或其它中间信息。这种指令在被存储在处理器1204可访问的非暂态存储介质中时,使计算机系统1200变为定制为执行该指令中指定的操作的专用机器。
计算机系统1200还包括只读存储器(ROM)1208或其它静态存储装置,所述只读存储器(ROM)1208或其它静态存储装置耦接到总线1202以存储静态信息和用于处理器1204的指令。提供存储装置1210(诸如磁盘或光盘)并且将存储装置1210耦接到总线1202以存储信息和指令。
计算机系统1200可经总线1202耦接到显示器1212(诸如阴极射线管(CRT))以将信息显示给计算机用户。输入装置1214(包括字母数字和其它键)耦接到总线1202以将信息和命令选择传送给处理器1204。另一类型的用户输入装置是用于将方向信息和命令选择传送给处理器1204并且用于控制显示器1212上的光标移动的光标控制装置1216,诸如鼠标、跟踪球或光标方向键。这个输入装置通常具有沿两个轴(第一轴(例如x)和第二轴(例如y))的两个自由度,这允许该装置指定平面中的位置。
计算机系统1200还可包括用于执行过滤、投影、分组和/或聚合操作的查询处理逻辑1232。查询处理逻辑1232可被构造为执行图6中示出的处理,并且可被使用任何合适硬件(诸如系统100的访问单元)实现。查询处理逻辑1232耦接到存储器1234,存储器1234高速缓冲在查询处理操作期间使用和产生的数据。例如,高速缓存110可被实现在存储器1234中。
计算机系统1200可使用定制硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现这里描述的技术,所述自定义硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑结合计算机系统使计算机系统1200变为专用机器或对计算机系统1200编程以使其变为专用机器。根据一个实施例,响应于处理器1204执行主存储器1206中所包含的一个或多个指令的一个或多个序列,由计算机系统1200执行这里的技术。这种指令可被从另一存储介质(诸如存储装置1210)读取到主存储器1206中。主存储器1206中所包含的指令的序列的执行使处理器1204执行这里描述的处理步骤。在替代实施例中,可替代于软件指令使用硬连线电路或者结合软件指令使用硬连线电路。
这里所使用的术语“存储介质”表示存储使机器以特定方式工作的指令和/或数据的任何非暂态介质。这种存储介质可包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如,存储装置1210。易失性介质包括动态存储器,诸如主存储器1206。存储介质的通常形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其它磁数据存储介质、CD-ROM、任何其它光学数据存储介质、具有孔的图案的任何物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储芯片或存储匣。
存储介质不同于传输介质,但可结合传输介质使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴线缆、铜线和光纤,所述同轴线缆、铜线和光纤包括包含总线1202的导线。传输介质还能够采用声波或光波的形式,诸如在无线电波和红外数据通信期间产生的声波或光波。
各种形式的介质可参与将一个或多个指令的一个或多个序列运送给处理器1204用于执行。例如,所述指令可最初被携带在远程计算机的磁盘或固态驱动器上。远程计算机能够将指令加载到它的动态存储器中,并且使用调制解调器在电话线上发送指令。计算机系统1200的本地的调制解调器能够接收电话线上的数据,并且使用红外发射器将数据转换成红外信号。红外检测器能够接收红外信号中携带的数据,并且合适的电路能够将数据放置在总线1202上。总线1202将数据运送给主存储器1206,处理器1204从主存储器1206检索指令并且执行指令。由主存储器1206接收的指令可在由处理器1204执行之前或之后可选地存储在存储装置1210上。
计算机系统1200还包括耦接到总线1202的通信接口1218。通信接口1218提供与连接到本地网络1222的网络链路1220的双向数据通信耦接。例如,通信接口1218可以是综合业务数字网(ISDN)卡、线缆调制解调器、卫星调制解调器或用于提供与对应类型的电话线的数据通信连接的调制解调器。作为另一例子,通信接口1218可以是用于提供与兼容LAN的数据通信连接的局域网(LAN)卡。还可实现无线链路。在任何这种实现方式中,通信接口1218发送和接收携带代表各种类型的信息的数字数据流的电、电磁或光信号。
网络链路1220通常通过一个或多个网络提供与其它数据装置的数据通信。例如,网络链路1220可通过本地网络1222提供与主机计算机1224或与由互联网服务提供商(ISP)1226经营的数据设备的连接。ISP 1226进而通过全球分组数据通信网络(现在通常被称为“互联网”1228)提供数据通信服务。本地网络1222和互联网1228都使用携带数字数据流的电、电磁或光信号。通过各种网络的信号以及在网络链路1220上并且通过通信接口1218的信号(所述信号将数字数据运送给计算机系统1200,并且运送来自计算机系统1200的数字数据)是传输介质的示例性形式。
计算机系统1200能够通过网络、网络链路1220和通信接口1218发送消息和接收数据(包括程序代码)。在互联网例子中,服务器1230可通过互联网1228、ISP 1226、本地网络1222和通信接口1218传输请求的应用程序的代码。
当接收到代码时,接收的代码可由处理器1204执行,和/或接收的代码可被存储在存储装置1210或其它非易失性存储器中用于在以后执行。
扩展和替换
在前面的说明书中,已参照可因实现方式而不同的许多具体细节描述本发明的实施例。因此,要以例示的而非限制性意义来看待说明书和附图。本发明的范围和申请人希望成为本发明的范围的内容的唯一专门标志是本申请以特定形式发布的一组权利要求(包括任何随后的校正)的文字和等同范围。
Claims (22)
1.一种方法,包括:
接收对按照第一列分组的数据进行聚合的请求;
响应于接收到该请求,对多个行中的每一行执行下面的步骤:
将行中的组值映射到地址;
使用该地址来定位与该组值关联的组的聚合数据集;以及
基于该行的第二列中的值更新所述聚合数据集中所包括的聚合值;
其中所述方法由一个或多个计算装置执行。
2.如权利要求1所述的方法,还包括:
对于所述多个行中的特定行,确定还未产生与该特定行关联的组值的聚合数据;
响应于确定还未产生与该特定行关联的组值的聚合数据,分配存储器以存储与该特定行关联的组值的聚合数据。
3.如权利要求1所述的方法,其中对于所述多个行中的至少两个行,不同组值映射到相同地址,所述方法还包括:
对于映射到该相同地址的来自所述多个行中的特定行的特定组值:
使用该相同地址定位包括存储的组值的特定聚合数据集;
将存储的组值与该特定组值进行比较;
响应于确定存储的组值和该特定组值匹配,基于来自第二列的该特定行的第二值更新所述聚合数据集中所包括的聚合值。
4.如权利要求3所述的方法,还包括:
响应于确定存储的组值和第一组值不匹配:
分配存储器以存储新组的聚合数据;
产生识别分配的存储器的地址的指针;
将第二指针存储在所述特定聚合数据集中。
5.如权利要求1所述的方法,其中将组值映射到地址包括将散列函数应用于组值。
6.如权利要求1所述的方法,其中所述组的所述聚合数据集包括组值、聚合值和指向冲突组的第二聚合数据集的指针。
7.如权利要求1所述的方法,其中所述地址被存储在散列表中;其中基于对与对聚合数据的请求关联的组的数量的估计选择散列表的大小。
8.如权利要求1所述的方法,其中通过在接收到该请求之前预先计算映射到相同地址的第一列中的所有组名来检测冲突。
9.一种或多种存储指令的非暂态计算机可读介质,当所述指令由一个或多个处理器执行时使一个或多个计算装置执行:
接收对按照第一列分组的数据进行聚合的请求;
响应于接收到该请求,对多个行中的每一行执行下面的步骤:
将行中的组值映射到地址;
使用该地址定位与该组值关联的组的聚合数据集;以及
基于该行的第二列中的值更新所述聚合数据集中所包括的聚合值。
10.如权利要求9所述的非暂态计算机可读介质,还存储指令,所述指令使所述一个或多个计算装置执行:
对于所述多个行中的特定行,确定还未产生与该特定行关联的组值的聚合数据;
响应于确定还未产生与该特定行关联的组值的聚合数据,分配存储器以存储与该特定行关联的组值的聚合数据。
11.如权利要求9所述的非暂态计算机可读介质,其中对于所述多个行中的至少两个行,不同组值映射到相同地址,所述非暂态计算机可读介质还存储指令,所述指令使所述一个或多个计算装置执行:
对于映射到该相同地址的来自所述多个行中的特定行的特定组值:
使用该相同地址定位包括存储的组值的特定聚合数据集;
将存储的组值与该特定组值进行比较;
响应于确定存储的组值和该特定组值匹配,基于来自第二列的该特定行的第二值更新所述聚合数据集中所包括的聚合值。
12.如权利要求11所述的非暂态计算机可读介质,还存储指令,所述指令使所述一个或多个计算装置对于第一列的第二行执行:
分配存储器以存储新组的聚合数据;
产生识别分配的存储器的地址的指针;
将第二指针存储在所述特定聚合数据集中。
13.如权利要求9所述的非暂态计算机可读介质,其中用于将组值映射到地址的指令包括用于将散列函数应用于组值的指令。
14.如权利要求9所述的非暂态计算机可读介质,其中所述组的所述聚合数据集包括组值、聚合值和指向冲突组的第二聚合数据集的指针。
15.如权利要求9所述的非暂态计算机可读介质,其中所述地址被存储在散列表中;其中基于对与对聚合数据的请求关联的组的数量的估计选择散列表的大小。
16.如权利要求9所述的非暂态计算机可读介质,其中通过在接收到该请求之前预先计算映射到相同地址的第一列中的所有组名来检测冲突。
17.一种用于执行分组和聚合操作的系统,包括:
组列访问单元,被构造为从第一列的行检索第一组的组值;
散列表访问单元,被构造为将组值映射到地址;
聚合状态访问单元,被构造为检索由存储在第一组的地址处的指针识别的聚合数据;
值列访问单元,被构造为基于第二列的该行中的值更新所述聚合数据集中所包括的聚合值。
18.如权利要求17所述的系统,其中所述聚合状态访问单元还被构造为:
确定还未产生第一组的指针;
响应于确定还未产生第一组的指针,分配存储器以存储第一组的聚合数据;
产生第一组的指针;
其中第一组的指针识别分配的存储器的地址。
19.如权利要求17所述的系统,其中:
所述散列表访问单元还被构造为将存储在第二行中的第二组值映射到第二地址;
聚合状态访问单元还被构造为检索由存储在第二组的第二地址处的第二指针识别的聚合数据;
值列访问单元还被构造为基于第二列的第二行中的值更新由第二指针识别的聚合数据中的聚合值。
20.如权利要求17所述的系统,其中:
所述散列表访问单元还被构造为将第一列的第二行中的第二组值映射到该地址;
所述聚合状态访问单元还被构造为将该组值与第二组值进行比较,并且响应于确定该组值和第二组值匹配,基于第二列的第二行中的第二值更新该聚合数据中的聚合值。
21.如权利要求20所述的系统,其中响应于确定该组值和第二组值不匹配:所述聚合状态访问单元还被构造为:
分配存储器以存储第二组的聚合数据;
产生识别分配的存储器的地址的第二指针;
将第二指针存储在第一组的聚合数据中。
22.如权利要求17所述的系统,其中所述散列表访问单元被构造为将散列函数应用于该组值以将该组值映射到该地址。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/590,057 | 2012-08-20 | ||
US13/590,057 US9563658B2 (en) | 2012-08-20 | 2012-08-20 | Hardware implementation of the aggregation/group by operation: hash-table method |
PCT/US2013/055020 WO2014031416A2 (en) | 2012-08-20 | 2013-08-14 | Hardware implementation of the aggregation/group by operation: hash-table method |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104685498A true CN104685498A (zh) | 2015-06-03 |
CN104685498B CN104685498B (zh) | 2018-06-08 |
Family
ID=49083762
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380050947.7A Active CN104685498B (zh) | 2012-08-20 | 2013-08-14 | 聚合/分组操作的硬件实现方式:散列表方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9563658B2 (zh) |
EP (1) | EP2885728B1 (zh) |
JP (1) | JP6356675B2 (zh) |
CN (1) | CN104685498B (zh) |
WO (1) | WO2014031416A2 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106570022A (zh) * | 2015-10-10 | 2017-04-19 | 阿里巴巴集团控股有限公司 | 一种跨数据源查询方法、装置及系统 |
CN110603530A (zh) * | 2017-04-07 | 2019-12-20 | 美光科技公司 | 基于位旗标草图的存储器管理的方法及利用所述方法的存储器装置 |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10127281B2 (en) * | 2010-12-23 | 2018-11-13 | Sap Se | Dynamic hash table size estimation during database aggregation processing |
US9697174B2 (en) | 2011-12-08 | 2017-07-04 | Oracle International Corporation | Efficient hardware instructions for processing bit vectors for single instruction multiple data processors |
US10534606B2 (en) | 2011-12-08 | 2020-01-14 | Oracle International Corporation | Run-length encoding decompression |
US9792117B2 (en) | 2011-12-08 | 2017-10-17 | Oracle International Corporation | Loading values from a value vector into subregisters of a single instruction multiple data register |
US9600522B2 (en) | 2012-08-20 | 2017-03-21 | Oracle International Corporation | Hardware implementation of the aggregation/group by operation: filter method |
US9727606B2 (en) | 2012-08-20 | 2017-08-08 | Oracle International Corporation | Hardware implementation of the filter/project operations |
US9779137B2 (en) * | 2013-07-09 | 2017-10-03 | Logicblox Inc. | Salient sampling for query size estimation |
US11113054B2 (en) | 2013-09-10 | 2021-09-07 | Oracle International Corporation | Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression |
US9430390B2 (en) | 2013-09-21 | 2016-08-30 | Oracle International Corporation | Core in-memory space and object management architecture in a traditional RDBMS supporting DW and OLTP applications |
KR101642072B1 (ko) * | 2014-05-08 | 2016-07-22 | 주식회사 알티베이스 | 하이브리드스토리지장치 및 방법 |
US11250001B2 (en) | 2014-08-01 | 2022-02-15 | International Business Machines Corporation | Accurate partition sizing for memory efficient reduction operations |
US10007615B1 (en) * | 2015-05-01 | 2018-06-26 | Marvell International Ltd. | Methods and apparatus for performing fast caching |
US10025822B2 (en) | 2015-05-29 | 2018-07-17 | Oracle International Corporation | Optimizing execution plans for in-memory-aware joins |
US9971808B2 (en) | 2015-06-24 | 2018-05-15 | International Business Machines Corporation | Fast query processing in columnar databases with GPUs |
US10067954B2 (en) | 2015-07-22 | 2018-09-04 | Oracle International Corporation | Use of dynamic dictionary encoding with an associated hash table to support many-to-many joins and aggregations |
US11023468B2 (en) * | 2015-11-20 | 2021-06-01 | Sap Se | First/last aggregation operator on multiple keyfigures with a single table scan |
US10055358B2 (en) | 2016-03-18 | 2018-08-21 | Oracle International Corporation | Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors |
US10061714B2 (en) | 2016-03-18 | 2018-08-28 | Oracle International Corporation | Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors |
US10061832B2 (en) | 2016-11-28 | 2018-08-28 | Oracle International Corporation | Database tuple-encoding-aware data partitioning in a direct memory access engine |
US10402425B2 (en) | 2016-03-18 | 2019-09-03 | Oracle International Corporation | Tuple encoding aware direct memory access engine for scratchpad enabled multi-core processors |
US10552413B2 (en) | 2016-05-09 | 2020-02-04 | Sap Se | Database workload capture and replay |
US10885009B1 (en) * | 2016-06-14 | 2021-01-05 | Amazon Technologies, Inc. | Generating aggregate views for data indices |
US10599488B2 (en) | 2016-06-29 | 2020-03-24 | Oracle International Corporation | Multi-purpose events for notification and sequence control in multi-core processor systems |
US10380058B2 (en) | 2016-09-06 | 2019-08-13 | Oracle International Corporation | Processor core to coprocessor interface with FIFO semantics |
US10783102B2 (en) * | 2016-10-11 | 2020-09-22 | Oracle International Corporation | Dynamically configurable high performance database-aware hash engine |
US11061876B2 (en) * | 2016-11-15 | 2021-07-13 | Sap Se | Fast aggregation on compressed data |
US10176114B2 (en) | 2016-11-28 | 2019-01-08 | Oracle International Corporation | Row identification number generation in database direct memory access engine |
US10459859B2 (en) | 2016-11-28 | 2019-10-29 | Oracle International Corporation | Multicast copy ring for database direct memory access filtering engine |
US10725947B2 (en) | 2016-11-29 | 2020-07-28 | Oracle International Corporation | Bit vector gather row count calculation and handling in direct memory access engine |
US10558704B2 (en) * | 2017-07-20 | 2020-02-11 | Sap Se | Smart rollover |
US10698892B2 (en) * | 2018-04-10 | 2020-06-30 | Sap Se | Order-independent multi-record hash generation and data filtering |
CN110442574B (zh) * | 2019-07-01 | 2022-05-03 | 上海赜睿信息科技有限公司 | 一种数据处理方法、电子设备和计算机可读存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5511190A (en) * | 1995-01-20 | 1996-04-23 | Tandem Computers, Inc. | Hash-based database grouping system and method |
US20010037345A1 (en) * | 2000-03-21 | 2001-11-01 | International Business Machines Corporation | Tagging XML query results over relational DBMSs |
US20060116989A1 (en) * | 2004-11-30 | 2006-06-01 | Srikanth Bellamkonda | Efficient data aggregation operations using hash tables |
US20090313210A1 (en) * | 2008-06-17 | 2009-12-17 | Bestgen Robert J | Encoded matrix index |
CN101635001A (zh) * | 2008-07-18 | 2010-01-27 | QlikTech国际公司 | 从数据库提取信息的方法和设备 |
US20120197868A1 (en) * | 2009-08-24 | 2012-08-02 | Dietmar Fauser | Continuous Full Scan Data Store Table And Distributed Data Store Featuring Predictable Answer Time For Unpredictable Workload |
CN102640144A (zh) * | 2009-09-15 | 2012-08-15 | 美国结构数据有限公司 | 协同操作数据的方法和系统 |
Family Cites Families (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63143627A (ja) * | 1986-12-05 | 1988-06-15 | Nippon Telegr & Teleph Corp <Ntt> | 連想集約演算装置 |
JP2568657B2 (ja) * | 1988-11-28 | 1997-01-08 | シャープ株式会社 | データ駆動型マイクロプロセッサにおけるハッシュ衝突回避方法 |
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 |
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 |
US5890147A (en) * | 1997-03-07 | 1999-03-30 | Microsoft Corporation | Scope testing of documents in a search engine using document to folder mapping |
JP2000187668A (ja) * | 1998-12-22 | 2000-07-04 | Hitachi Ltd | グループ化方法と重複排除方法 |
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 |
US6957225B1 (en) | 2002-05-07 | 2005-10-18 | Oracle International Corporation | Automatic discovery and use of column correlations in tables |
US7111025B2 (en) | 2003-04-30 | 2006-09-19 | International Business Machines Corporation | Information retrieval system and method using index ANDing for improving performance |
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 |
US8244718B2 (en) | 2006-08-25 | 2012-08-14 | Teradata Us, Inc. | Methods and systems for hardware acceleration of database operations and queries |
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 |
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 |
US8374986B2 (en) | 2008-05-15 | 2013-02-12 | Exegy Incorporated | Method and system for accelerated stream processing |
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 |
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 |
US8478775B2 (en) | 2008-10-05 | 2013-07-02 | Microsoft Corporation | Efficient large-scale filtering and/or sorting for querying of column based data encoded structures |
US8312038B2 (en) | 2008-12-18 | 2012-11-13 | Oracle International Corporation | Criteria builder for query builder |
US8745031B2 (en) | 2009-05-28 | 2014-06-03 | Oracle International Corporation | Cache-based predicate handling for queries on XML data using uncorrelated path-based row sources |
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 |
US9727606B2 (en) | 2012-08-20 | 2017-08-08 | Oracle International Corporation | Hardware implementation of the filter/project operations |
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,057 patent/US9563658B2/en active Active
-
2013
- 2013-08-14 JP JP2015528526A patent/JP6356675B2/ja active Active
- 2013-08-14 WO PCT/US2013/055020 patent/WO2014031416A2/en active Application Filing
- 2013-08-14 CN CN201380050947.7A patent/CN104685498B/zh active Active
- 2013-08-14 EP EP13753948.2A patent/EP2885728B1/en active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5511190A (en) * | 1995-01-20 | 1996-04-23 | Tandem Computers, Inc. | Hash-based database grouping system and method |
US20010037345A1 (en) * | 2000-03-21 | 2001-11-01 | International Business Machines Corporation | Tagging XML query results over relational DBMSs |
US20060116989A1 (en) * | 2004-11-30 | 2006-06-01 | Srikanth Bellamkonda | Efficient data aggregation operations using hash tables |
US20090313210A1 (en) * | 2008-06-17 | 2009-12-17 | Bestgen Robert J | Encoded matrix index |
CN101635001A (zh) * | 2008-07-18 | 2010-01-27 | QlikTech国际公司 | 从数据库提取信息的方法和设备 |
US20120197868A1 (en) * | 2009-08-24 | 2012-08-02 | Dietmar Fauser | Continuous Full Scan Data Store Table And Distributed Data Store Featuring Predictable Answer Time For Unpredictable Workload |
CN102640144A (zh) * | 2009-09-15 | 2012-08-15 | 美国结构数据有限公司 | 协同操作数据的方法和系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106570022A (zh) * | 2015-10-10 | 2017-04-19 | 阿里巴巴集团控股有限公司 | 一种跨数据源查询方法、装置及系统 |
CN106570022B (zh) * | 2015-10-10 | 2020-06-23 | 菜鸟智能物流控股有限公司 | 一种跨数据源查询方法、装置及系统 |
CN110603530A (zh) * | 2017-04-07 | 2019-12-20 | 美光科技公司 | 基于位旗标草图的存储器管理的方法及利用所述方法的存储器装置 |
CN110603530B (zh) * | 2017-04-07 | 2023-06-30 | 美光科技公司 | 基于位旗标草图的存储器管理的方法及利用所述方法的存储器装置 |
Also Published As
Publication number | Publication date |
---|---|
EP2885728B1 (en) | 2019-07-31 |
EP2885728A2 (en) | 2015-06-24 |
US20140052726A1 (en) | 2014-02-20 |
JP6356675B2 (ja) | 2018-07-11 |
CN104685498B (zh) | 2018-06-08 |
WO2014031416A2 (en) | 2014-02-27 |
US9563658B2 (en) | 2017-02-07 |
WO2014031416A3 (en) | 2014-07-24 |
JP2015528603A (ja) | 2015-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104685498A (zh) | 聚合/分组操作的硬件实现方式:散列表方法 | |
US8099440B2 (en) | Method for laying out fields in a database in a hybrid of row-wise and column-wise ordering | |
CN101916261B (zh) | 一种分布式并行数据库系统的数据分区方法 | |
US7051013B2 (en) | Database diagnostic system and method | |
US6381601B1 (en) | Grouping and duplicate removal method in a database | |
US8868484B2 (en) | Efficiently updating rows in a data warehouse | |
US20120239612A1 (en) | User defined functions for data loading | |
CN102567329B (zh) | 一种数据查询方法及系统 | |
CN103970902A (zh) | 一种大量数据情况下的可靠即时检索方法及系统 | |
CN105117417A (zh) | 一种读优化的内存数据库Trie树索引方法 | |
CN107329987A (zh) | 一种基于mongo数据库的搜索系统 | |
CN102067116A (zh) | 数据仓库中的空间查询 | |
CN111506559A (zh) | 数据存储方法、装置、电子设备及存储介质 | |
CN104685499A (zh) | 过滤/投影操作的硬件实现 | |
US20230418824A1 (en) | Workload-aware column inprints | |
CN104714974A (zh) | 一种查询语句解析与再处理的方法和装置 | |
CN105518669A (zh) | 数据模型改变管理 | |
CN101520801A (zh) | 一种数据库空间几何对象存取方法 | |
CN114064660B (zh) | 基于ElasticSearch的数据结构化分析方法 | |
WO2012164738A1 (ja) | データベース管理システム、装置及び方法 | |
CN111831684A (zh) | 数据的查询方法、装置和计算机可读存储介质 | |
US10528538B2 (en) | Leveraging SQL with user defined aggregation to efficiently merge inverted indexes stored as tables | |
JPWO2005041067A1 (ja) | 情報処理方法及び情報処理システム | |
US20230153286A1 (en) | Method and system for hybrid query based on cloud analysis scene, and storage medium | |
CN111465929A (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 |