Connect public, paid and private patent data with Google Patents Public Datasets

聚合/分组操作的硬件实现方式:散列表方法

Download PDF

Info

Publication number
CN104685498A
CN104685498A CN 201380050947 CN201380050947A CN104685498A CN 104685498 A CN104685498 A CN 104685498A CN 201380050947 CN201380050947 CN 201380050947 CN 201380050947 A CN201380050947 A CN 201380050947A CN 104685498 A CN104685498 A CN 104685498A
Authority
CN
Grant status
Application
Patent type
Prior art keywords
aggregation
group
value
column
data
Prior art date
Application number
CN 201380050947
Other languages
English (en)
Inventor
P·安博格
J·施奥尔
R·D·霍博金斯二世
Original Assignee
甲骨文国际公司
Priority date (The priority date 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 date listed.)
Filing date
Publication date

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/30Information retrieval; Database structures therefor ; File system structures therefor
    • G06F17/30286Information retrieval; Database structures therefor ; File system structures therefor in structured data stores
    • G06F17/30386Retrieval requests
    • G06F17/30389Query formulation
    • G06F17/30404Query languages
    • G06F17/30412Grouping and aggregation

Abstract

描述了用于执行分组和聚合操作的技术。在一个实施例中,接收到对按照第一列分组的数据进行聚合的请求。响应于接收到该请求,第一列的行中的组值被映射到地址。第一组的指针被存储在由该地址识别的第一位置。该指针识别第一组的聚合数据集的第二位置。基于第二列的该行中的值更新所述聚合数据集中所包括的聚合值。

Description

聚合/分组操作的硬件实现方式:散列表方法

技术领域

[0001] 本公开一般地涉及用于执行数据库操作的技术,并且更具体地讲,涉及用于执行 分组和聚合操作的技术。

背景技术

[0002] 在这个章节中描述的方案是能够被执行的方案,但未必是以前已经想到或执行的 方案。因此,除非另外指示,否则不应该认为在这个章节中描述的任何方案仅由于其被包括 在这个章节中而作为现有技术。

[0003] 数据库包括存储在一个或多个存储装置(诸如一组硬盘)上的数据和元数据。根 据实现方式,数据库内的数据可根据各种数据模型而被以逻辑方式组织。例如,关系数据库 系统通常将数据存储在一组表中,其中每个表被组织成一组行和列。在多数情况下,每个行 代表不同对象,并且每个列代表不同属性。然而,其它数据模型也可被用于组织数据。

[0004] 为了访问和操纵数据库中的数据,数据库管理系统(DBMS)通常被构造为接收和 处理各种数据库命令(经常被称为查询)。在许多实现方式中,DBMS支持符合数据操纵语 言(DML)(诸如结构化查询语言(SQL))的查询。当DBMS接收到查询时,DBMS执行由该查 询指定的一个或多个数据库操作并且可输出查询结果。示例性数据库操作包括以下描述的 聚合和分组操作。

[0005] 聚合和分组操作

[0006] 聚合和分组操作是提供关于特定列中的数据的汇总统计的数据库操作。在SQL 中,分组操作使用GROUP BY语法按照一个或多个列对聚合函数的结果进行分组。以下的表 1表示可在数据库查询中使用的示例性聚合函数。

[0007]

[0008] 表1 :示例性聚合函数

[0009] 示例性聚合和分组查询在下面被示出在表2中。

[0010]

[0011] 表2:示例性聚合查询

[0012] 以上查询中的每一个在由DBMS执行时,根据销售表的AMOUNT列内的值来聚合数 据。例如,以下的表3表示示例性销售表。

[0013]

[0014] 表3:示例性销售表

[0015] 查询1请求公司已完成的总美元销售额。当执行查询1时,DBMS执行聚合但不执 行分组。DBMS无条件地计算销售表中的所有金额之和以返回最后结果。考虑表3的示例性 销售表,以下的表4表示执行查询1的预期输出。

[0016]

[0017] 表4:查询1的结果表

[0018] 查询2请求按照完成销售的销售员分组的总美元销售额。当执行查询2时,DBMS 既执行分组又执行聚合。具体地讲,DBMS为销售表中每个独一无二的销售员产生一个聚合 结果,其中所述结果是由特定的销售员完成的总销售额。考虑表3的示例性销售表,以下的 表5表不执行查询2的预期输出。

[0019]

[0020] 表5:查询2的结果表

[0021] 查询3请求按照与销售关联的顾客和销售员来分组的总美元销售额。当执行查询 3时,DBMS执行多列分组和聚合。在这种情况下,针对每个唯一的销售员-顾客对,将会存 在一个聚合结果,并且聚合结果是该特定销售员-顾客对的总销售额。考虑表3的示例性 销售表,以下的表6表不执行查询3的预期输出。

[0022]

[0023] 表6:查询3的结采表

附图说明

[0024] 在附图中作为例子而非作为限制示出本公开,其中相同的附图标记表示相似元 件,并且其中:

[0025] 图IA和IB是表示根据一个实施例的用于执行分组和聚合操作的示例性系统架构 的方框图;

[0026] 图2是表示根据一个实施例的组列访问块的示例性架构的方框图;

[0027] 图3是表示根据一个实施例的散列表访问块的示例性架构的方框图;

[0028] 图4是表示根据一个实施例的聚合状态访问块的示例性架构的方框图;

[0029] 图5是表示根据一个实施例的值列访问块的示例性架构的方框图;

[0030] 图6是表示根据一个实施例的用于执行分组和聚合操作的示例性处理的流程图;

[0031] 图7是表示根据一个实施例的存储器中的销售表的布局的方框图;

[0032] 图8是根据一个实施例的累加器数据结构的方框图;

[0033] 图9A-9C是根据一个实施例的在分组和聚合操作期间的累加器数据结构的状态 的方框图;

[0034] 图10是表示根据一个实施例的在已执行分组和聚合操作之后的存储器的状态的 方框图;

[0035] 图11是表不根据一个实施例的不例性散列表结构的方框图;

[0036] 图12是可实现实施例的计算机系统的方框图。

具体实施方式

[0037] 在下面的描述中,为了解释的目的,阐述许多具体细节以便提供对本发明的彻底 的理解。然而,可在没有这些具体细节的情况下实施本发明,这将是显然的。在其它实例中, 以方框图形式示出公知结构和装置,以便避免不必要地使本发明难以理解。

[0038] 概述

[0039] 这里描述用于执行分组和聚合数据库操作的技术。在一个实施例中,专用硬件被 构造为高效地并且有效地执行分组和聚合数据库操作。当执行分组操作时,专用硬件可支 持任意数量的组。

[0040] 另外,可在没有对表数据进行全局排序的情况下执行分组和聚合。避免全局排序 减轻了在对大的列表进行排序的同时发生的随机存储器访问问题。例如,在对列表进行排 序的同时,一个项目可能进入位于存储器的一个块中的组,而下一个项目可能属于位于存 储器的不同块中的组。在这种情况下写入排序的表将会通常需要反复地关闭和打开新存储 页。根据这里描述的技术,可在存储器的小内存块(chunk)上执行分组和聚合,这允许随机 访问发生在快速、低功率高速缓存中。

[0041] 在一个实施例中,系统接收到请求按照第一列来分组的聚合操作的查询。因为对 第一列执行grouped by操作,所以第一列中的不同值在这里被称为"组值"。

[0042] 响应于接收到该查询,系统将第一列的组值映射到一个或多个地址。例如,系统可 将散列函数应用于每个组值以确定特定组值映射到的地址。相同组值映射到相同地址,并 且不同组值映射到不同地址,除非发生冲突。

[0043] 在一个实施例中,组值被映射到的每个地址识别表或内容可寻址存储器(CAM)内 的一个条目。该条目可存储指针,该指针识别一个组的聚合数据集的存储位置,所述一个组 与被散列到该存储位置的组值关联。例如,如果第一列具有被散列到存储位置Y的值X,则 存储位置Y识别存储指向在第一列中具有X的行的聚合数据的指针的条目。

[0044] 当行的组值映射到该条目时,系统可更新该组的所述聚合数据集中所包括的聚合 值。系统可针对第一列的每一行执行映射组值和更新聚合值的步骤。

[0045] 在一个实施例中,系统可执行冲突检测以确保两个或更多的不同组不更新相同聚 合值。例如,除了聚合值之外,所述聚合数据集可包括组值。如果第二组值映射到与第一组 值相同的地址,则针对存储在所述聚合数据集中的组值检查第二组值。如果它们匹配,则未 发生冲突并且聚合值可被更新。然而,如果组值不匹配,则检测到冲突。

[0046] 为了处理冲突,所述聚合数据集可包括指示下一组的聚合数据的存储位置的指 针。这个指针可最初被设置为空值。当冲突发生时,该指针可被更新以指向下一组的聚合 数据集。如果在已设置该指针之后发生随后的冲突,则可检索下一组的聚合数据集,并且可 对下一组重复冲突检测和处理过程。

[0047] 用于处理分组和聚合操作的示例性架构

[0048] 图IA和IB是表示根据一个实施例的用于执行分组和聚合操作的示例性系统架构 的方框图。系统100通常包括随机存取存储器(RAM) 102、RAM控制器104、高速缓存110、请 求队列120、组列访问单元130、值列访问单元140、散列表访问单元150和聚合状态访问单 元 160〇

[0049] 可使用允许随机访问其存储的数据的任何形式的数据存储器来实现RAM 102»RAM 102的例子非限制性地包括动态RAM(DRAM)和静态RAM(SRAM)。根据一个实施例,RAM 102 至少存储由分组/聚合数据库查询所查询的数据库的一部分。RAM 102内存储的数据的组 织可因实现方式而不同。在一个实施例中,RAM 102以混合列格式存储数据库。根据这个 格式,RAM 102存储N个数据块,其中N可以是任何正整数。在每个块内,以面向列的方式 存储一个或多个列的固定数量的行。例如,第一个块可存储数据库表的一个或多个列的前 50行,第二个块存储接下来的50行,并且第三个块存储接下来的30行。在每个块内,每个 列的列值被连续地存储。

[0050] RAM控制器104是管理前往RAM 102和来自RAM 102的数据流的存储器控制器。 因此,RAM控制器104可处理来自高速缓存110或请求队列120的请求以针对RAM 102读 取数据和写入数据。可使用任何合适的存储器控制器(非限制性地包括双倍数据速率DDR 存储器控制器、双通道存储器控制器或全缓冲存储器控制器)实现RAM控制器104。

[0051] 高速缓存110存储在分组/聚合查询的处理期间由访问块使用的数据。类似于 RAM,高速缓冲存储器可允许随机访问存储的数据;然而,与RAM相比,高速缓冲存储器通常 在大小方面更小并且具有更小的延时。因此,当处理用于分组/聚合查询的数据时,通过减 少针对RAM 102的I/O操作的数量,对数据进行高速缓冲可减少数据瓶颈并且提高系统100 的性能。

[0052] 请求队列120缓冲对访问块的请求和来自访问块的请求,所述访问块包括组列访 问单元130、值列访问单元140、散列表访问单元150和聚合状态访问单元160。例如,当接 收到分组/聚合查询时,访问块可从RAM 102或高速缓存110请求特定行或行值。请求队 列120可缓冲来自访问块的多个这些请求,这允许以流水线方式实现存储器获取,维持高 带宽,以防请求的读取导致长延时RAM访问。

[0053] 根据以下进一步详细地描述的技术,系统100中的访问块(包括组列访问单元 130、值列访问单元140、散列表访问单元150和聚合状态访问单元160)负责获取、更新组累 加器并且将结果写回至存储器。

[0054] 存储器组织

[0055] 系统100的存储器系统可被划分为不同部分以优化在查询处理期间的数据访问。 图IB是表示系统100的示例性存储器分级体系的方框图。如图中所示,存储器系统被划分 为两个部分:缓冲器112和多级高速缓存114。

[0056] 缓冲器112可被实现为片上缓冲器并且可以在不被管理的方式下工作。例如,缓 冲器112可接收起始存储地址,并且作为响应,顺序地从RAM 102读取数据。在一个实施例 中,组列访问单元130和值列访问单元140通过缓冲器112访问RAM 102。根据以下描述的 技术,这些块顺序地读取数据并且不对这种数据执行任何修改。因此,数据可被高效地预先 加载到缓冲器112中,因为访问模式是已知的并且是顺序的。

[0057] 多级高速缓存114是可以在与中央处理单元(CPU)高速缓存分级体系(诸如包括 第1级(LI)、第2级(L2)和第3级(L3)高速缓存的分级体系)类似的方式下工作的被管 理的高速缓存。因此,多级高速缓存114可包括由较大、较慢、较高级高速缓存补充的较小、 较快、较低级高速缓存(诸如第1级(LI)高速缓存)。

[0058] 在一个实施例中,散列表访问单元150和聚合状态访问单元160通过多级高速缓 存114访问RAM 102。当访问位于RAM 102中或盘上的数据时,这些单元可首先搜索多级 高速缓存114的较低级高速缓存,然后搜索多级高速缓存114的较高级高速缓存。例如,这 些单元可首先在Ll高速缓存中寻找相关数据,然后在L2高速缓存中寻找相关数据,然后在 L3高速缓存中寻找相关数据。如果在高速缓存级别中的任何一级中均未找到该数据,则可 从RAM 102请求该数据。如以下更详细地描述,散列表访问单元150和聚合状态访问单元 160随机地读取和修改数据,并且对于这些数据访问可能存在某种程度的空间和时间局部 性。因此,多级高速缓存很适合支持这些单元。

[0059] 请求队列120缓冲从访问单元接收的存储器访问请求。在一个实施例中,请求队 列120可按照与它接收请求的次序相同次序处理请求。例如,请求队列120可分派访问存 储器的请求并且在处理下一个请求之前等待直至已完成该事务。替代地,支持散列表访问 单元150和聚合状态访问单元160的请求队列可被构造为支持无序分派。例如,即使对RAM 102的请求被先发送,也可在对RAM 102的长延时访问之前返回对多级高速缓存114的低延 时访问。从而,可在慢存储器访问的情况下更好地使用可用硬件资源。

[0060] 组列访问单元

[0061] 图2是表示组列访问单元130的示例性架构的方框图。组列访问单元130通常 包括地址产生器204、标签分派器206和本地存储器208。组列访问单元130负责获取正 被分组的列的值。为了解释的目的,将假设正在执行查询2。在查询2中,正被分组的列是 SALESMAN。因此,在本例中,组列访问单元130负责从SALESMAN列获取值。

[0062] 地址产生器204产生正被分组的列的存储地址并且将该地址发送给存储器请求 队列202。在一个实施例中,地址产生器204开始于分组列的起始地址。从而,在本例中,地 址产生器204将会将SALESMAN列的起始地址发送给请求队列202。

[0063] 在图2中,由地址产生器204发出的请求被示出为发送"至存储器"。如参照图1 所解释的,将请求发送到存储器实际上可以包括:在多级高速缓存114的一个或多个级中 寻找数据,并且如果数据不位于多级高速缓存114中,则从RAM 102检索数据。然而,为了 解释的目的,将假设请求被简单地发送给"存储器系统",并且由组列访问单元130从"存储 器系统"接收请求的数据。

[0064] 从而,响应于由地址产生器204产生的地址,存储器系统从分组列(例如 SALESMAN)逐行地顺序地返回组名。请求队列202将这些组名存储在本地存储器208中。 另外,标签分派器206为进入的组名中的每个组名分派一个唯一标签,所述唯一标签与对 应名称一起被存储在本地存储器208中。例如,在本例中,地址产生器204可提交SALESMAN 列的起始的地址。作为响应,"Pedro"被接收并且与标签TAGl -起被存储在本地存储器208 中。然后,地址产生器204提交SALESMAN列的下一个值的地址。作为响应,"Pedro"被接 收并且与标签TAG2 -起被存储在本地存储器208中。可对于SALESMAN列的其余行重复这 个处理。

[0065] 在一个实施例中,由标签分派器206分派的标签用作行标识符,所述行标识符可 被用于跟踪对应行并且使它与稍后可在聚合处理中到达的其它数据(诸如值)关联。标签 分派器206可按照任何合适的方式产生标签以唯一地识别进入的行。例如,标签分派器可 被实现为将顺序编号分派给每个进入的组名的计数器。因此,标签可为每个行提供唯一标 识符,用作ROWID属性的代理,而不需要向RAM 102发出访问ROWID列的存储器请求。标签 还能够实现数据条目的无序处理,并且可被用于识别跨越多个访问块的特定事务。

[0066] 根据一个实施例,组列访问单元130将进入的组名直接发送给散列表访问单元 150以用于进行散列。另外,小的本地存储器208的内容(包括标签和关联的组名)被发送 给聚合状态访问单元160,在聚合状态访问单元160中,组名被用于冲突检查。

[0067] 散列表访问单元

[0068] 图3是表示根据一个实施例的散列表访问单元150的示例性架构的方框图。散列 表访问单元150通常包括散列产生器304和本地存储器306。散列表访问单元150负责将 散列函数应用于组名并且获取对应的指针。

[0069] 散列产生器304从组列访问单元130逐行地接收组名,并且将散列函数应用于每 个进入的组名。可使用将组名映射到散列表条目的地址的任何合适的函数实现散列函数。 在已应用散列函数之后,散列产生器304将存储器请求发送给请求队列302以在与由散列 函数产生的散列值对应的地址处从散列表条目获取指针。请求队列302从本地高速缓存 (例如多级高速缓存114)或RAM 102获取指针,并且将指针返回到本地存储器306。

[0070] 提供给散列产生器304的组值在这里被称为"进入的组值"。在一个实施例中,如 果未在以前遇到进入的组值,则散列表条目存储空指针。例如,当"Alex"被第一次提供给 散列产生器304时,将返回具有空指针的散列表条目。

[0071] 另一方面,如果以前已遇到过该进入的组值或者发生散列冲突,则基于散列值获 得的散列表条目将存储指向"累加器"数据结构的指针。如果未发生冲突,则累加器数据结 构用于进入的组值。在冲突的情况下,累加器数据结构可用于具有散列运算到与进入的组 值相同的散列值的组名的另一组。

[0072] 累加器数据结构存储组的各种数据,并且将在下面被更详细地描述。一旦存储器 系统返回指针,它被与和正被处理的特定行对应的标签一起存储在本地存储器306中。可 从组列访问单元130接收该对应标签。本地存储器306的输出(包括标签和对应指针)被 发送给聚合状态访问单元160,聚合状态访问单元160在由该指针指示的地址处获取有效 载荷数据。

[0073] 聚合状态访问单元

[0074] 图4是表示根据一个实施例的聚合状态访问单元160的示例性架构的方框图。聚 合状态访问单元160通常包括复用器(mux) 404、冲突检查块406、存储器分配器408和本地 存储器410。聚合状态访问单元160负责在由散列表指针指示的地址处获取有效载荷数据, 并且对这个有效载荷数据执行冲突检查。

[0075] Mux 404从散列表访问单元150接收散列表指针。首先检查来自散列表访问单元 150的进入的指针,以确定它是否是空指针。空指针指示还未遇到对应的组并且应该分配存 储器以存储该组的累加器。如果指针是空的,则存储器分配器408为这个组分配存储器,将 对应的组累加器中的字段初始化为初始状态,并且将数据写入本地存储器410。新遇到的组 在本地存储器410中的初始聚合值可保持为空或者可被设置为零。

[0076] 如果指针不是空的,则mux 404将由该指针识别的存储地址发送给请求队列402 以获取有效载荷数据。请求队列402通过本地高速缓存(例如多级高速缓存114)获取有 效载荷数据,并且将数据返回给冲突检查406。当本地高速缓存递送这个有效载荷时,冲突 检查406将返回的有效载荷数据中的组名与由组列访问单元130发送的组名进行比较。如 果组名匹配,则不存在冲突,并且有效载荷数据(包括该组的聚合值)被与识别发生冲突检 查事务的对应行的标签一起被写入本地存储器410。

[0077] 如果组名不匹配,则检测到冲突,并且从有效载荷数据提取指向下一个有效载荷 的指针,并且该指针被发送回给在mux 404处的空检查,在mux 404处如以前一样针对新指 针发生相同处理。重复这个处理,直至指向下一个有效载荷的指针是空,或者返回的组名与 由组列访问单元130发送的组名匹配。

[0078] 本地存储器高速缓存410的输出被发送给值列访问单元140,值列访问单元140更 新累加器数据结构。

[0079] 值列访问单元

[0080] 图5是表示根据一个实施例的值列访问单元140的示例性架构的方框图。值列 访问单元140通常包括地址产生器504、标签分派器506、聚合操作单元508和本地存储器 510。值列访问单元140负责获取正被聚合的列(例如,在查询2的情况下的AMOUNT列) 的值。

[0081] 类似于组列访问单元130,地址产生器504开始于列的起始地址并且将预期地址 发送给请求队列502。存储器系统逐行地返回这些值。标签分派器506将标签分派给与行 标识符对应的每个行,并且结果被写入本地存储器510。在一个实施例中,由标签分派器 506为给定行分派的标签与分派给从该给定行读取的组名的标签匹配,因此当值列访问单 元140聚合组数据时,这两部分数据能够彼此关联,如下所述。

[0082] 来自本地存储器510的值、来自聚合状态访问单元160的对应标签和当前累加器 状态被发送给聚合操作单元508。聚合操作单元508使用该标签从本地存储器510检索具 有匹配的标签的值。聚合操作单元508随后基于在查询中指定的聚合函数和由本地存储器 510提供的值来更新该组的聚合值。聚合操作单元508可非限制性地执行表1中示出的任 何函数。例如,在查询2的情况下,用于Pedro组的累加器数据结构将在处理第一行之后具 有值400。当处理第二行时,本地存储器510将把值200提供给聚合操作单元508,聚合操 作单元508将把这个值与400相加以产生值600。用于Pedro组的累加器数据结构将随后 被更新为这个值。在该操作完成之后,更新的累加器被写回至聚合状态访问单元160中的 本地存储器410或本地高速缓存。

[0083] 累加器数据结构

[0084] 在一个实施例中,系统100针对它处理的每个组产生并且保持一个累加器数据结 构。每个组的累加器数据结构存储该组的聚合数据集。根据实现方式和正被执行的聚合操 作的类型,存储在累加器数据结构中的所述数据集可以不同。

[0085] 图8是根据一个示例性实施例的累加器数据结构的方框图。累加器数据结构800 包括值字段802、聚合结果字段804和指针字段806。在替代实施例中,累加器数据结构800 可包括更多字段或省略一个或多个示出的字段。

[0086] 值字段802可存储任何合适的组标识符,诸如组名或任何其它字母数字值。当存 储器分配器408使用来自进入的行的组值将这个字段初始化为它的初始状态时,可存储这 个值。

[0087] 聚合结果字段804存储组的聚合值。存储器分配器408可将这个字段初始化为空 或零值。可随后由聚合操作单元508根据上述技术更新这个字段。在一个实施例中,多个 聚合能够被一起存储在这个字段中。例如,对于下面的查询:

[0088] SELECT sum(amount),count(*)

[0089] FROM sales

[0090] GROUP BY salesman

[0091] sum (amount)和count (*)聚合结果能够被存储在这个单个数据结构中。

[0092] 指针字段806存储空指针或指向组值与当前组的组值冲突的另一组的累加器数 据结构的指针。存储器分配器408可将这个字段初始化为空值。如果散列冲突发生在与数 据结构800关联的组和新遇到的组之间,则为新遇到的组创建累加器数据结构,并且利用 指向该新累加器数据结构的指针更新指针字段。例如,该指针可对应于新遇到的组的值字 段的存储地址。

[0093] 无序处理

[0094] 标签可被用于在分组和聚合期间实现对行的无序处理。当支持散列表访问单元 150和聚合状态访问单元160的请求队列被构造为支持无序分派时,这可以是有用的。

[0095] 例如,当处理SALESMAN列的第四行时,聚合状态访问单元160可提交获取Michael 组的有效载荷数据的请求。聚合状态访问单元160可利用对应标签(诸如TAG4)将这个请 求提交给请求队列。请求队列可首先尝试从多级高速缓存114获取该数据,并且如果未在 多级高速缓存114中找到该数据,则从RAM 102获取该数据。为了例示的目的,假设获取 Michael的有效载荷数据导致长延时RAM访问。

[0096] 在等待返回Michael组的有效载荷数据的同时,聚合状态访问单元160可处理 SALESMAN列的第五行。因此,聚合状态访问单元160利用对应标签(TAG5)将获取Alex组 的有效载荷数据的请求提交给请求队列。请求队列可随后从多级高速缓存114获取这个组 的有效载荷数据,并且将该有效载荷数据和关联的标签在返回Michael的有效载荷数据之 前返回给聚合状态访问单元160。这个有效载荷数据和对应标签(标签5)随后被提交给值 访问列单元140。

[0097] 响应于从聚合状态访问单元160接收到该数据,值列访问单元140将从聚合状态 访问单元160接收的TAG5与存储在本地存储器510中的TAG5进行匹配,以识别应该在聚 合操作中使用的值数据。关联的值数据被发送给聚合操作单元508以更新Alex组的有效 载荷数据内的聚合值。从而,在第四行的处理之前,可完成第五行的处理。

[0098] 示例性处理和实现方式

[0099] 图6表示根据一个实施例的用于执行分组和聚合操作的示例性处理。这个处理可 被实现在任何合适系统(非限制性地包括系统100)上。

[0100] 当接收到分组/聚合查询时,在步骤602中,从由该查询识别的表读取一行。在步 骤604中,从该行的相关列检索组名和值数据。在步骤606中,对组名执行散列运算以识别 散列表或其它形式的内容可寻址存储器内的位置。在步骤608中,从通过散列运算指示的 位置读取指针。在步骤610中,确定该指针是否是空。如果该指针是空,则还未遇到过该 组,并且在步骤612,为新组分配存储器,并且利用识别分配的存储器的位置的指针更新散 列表。将对散列运算产生相同存储地址的所有随后的行返回这个散列指针。从而,如果在 步骤610确定该指针不是空,则该处理继续前进至步骤614。

[0101] 在步骤614中,将进入的行的组名与存储在由当前指针识别的位置的有效载荷数 据的组名进行比较。在步骤616中,确定是否存在冲突。如果进入的行的组名与存储在由该 指针识别的有效载荷数据中的组名匹配,则不存在冲突,并且该处理继续前进至步骤626。 如果组名不匹配,则该处理继续前进至步骤618。在步骤618,从有效载荷数据检索指向具 有相同散列值的下一个组的指针。在步骤620中,确定这个指针是否是空。如果该指针是 空,则以前未遇到与当前组名关联的组,并且该处理继续前进至步骤624。在步骤624,为新 组分配存储器,并且在步骤614检索的有效载荷数据被更新以包括识别新分配的存储器的 位置的指针。如果在步骤620确定该指针不是空,则检索在由该指针识别的位置处的有效 载荷数据,并且该处理返回到步骤614以对该下一个有效载荷数据重复冲突检查处理。

[0102] 一旦遇到新组或者未检测到冲突,则在步骤626,根据聚合操作和在步骤604检索 的值数据更新对应组的有效载荷数据中的聚合值。

[0103] 图7、9和10表示图6中示出的处理的示例性实现方式。特别地,这些图示出在表 2中示出的查询2的处理期间的系统100的各种状态。

[0104] 图7是表示根据一个示例性实现方式的存储器中的销售表702的布局的方框图。 参照图 7, SALE_ID 列 704、SALESMAN 列 706、CUSTOMER 列 708 和 AMOUNT 列 710 被以面向 列的格式存储,使得来自特定列的所有行被连续地存储在存储器中。在查询2的情况下, 步骤602和604可包括:组列访问单元130读取SALESMAN列706的第一条目以检索组名 "Pedro",以及值列访问单元140读取AMOUNT列710的第一元素以检索值数据"400"。

[0105] 组名"Pedro"随后被执行散列运算以产生将存储指向这个组的累加器数据结构的 指针的存储地址。由于两个或更多的唯一输入值能够在一些情况下散列运算到相同值,所 以组名"Pedro"和对应指针被发送给散列表访问单元150以检查冲突。因为"Pedro"是被 处理的第一组,所以聚合状态访问单元160确定指针是空并且为Pedro组分配存储器。在 一个实施例中,聚合状态访问单元160产生诸如图8中示出的累加器数据结构,并且将每个 字段初始化为起始状态。

[0106] 图9A是根据一个实施例的在初始化之后的Pedro累加器数据结构的状态的方框 图。值字段被初始化为与组名对应的Pedro,并且聚合结果字段的值被初始化为"0"。由于 还不存在对于这个地址的冲突,所以指向下一个值的指针被设置为空。

[0107] -旦Pedro累加器数据结构已被初始化,聚合结果字段的值由聚合状态访问单元 160读取并且存储。聚合状态访问单元160将"400"值提供给聚合操作单元508,聚合操作 单元508将从该行提取的值数据与由聚合状态访问单元160提供的聚合结果值相加。在 聚合结果值已被更新之后,聚合结果值被写回至存储器。图9B是在已处理第一行之后的 Pedro累加器数据结构的状态的方框图。参照图9B,在处理第一行之后,聚合结果字段存储 与聚合操作的结果对应的值" 400 "。

[0108] 在累加器数据结构已被更新之后,对于表中的其余行中的每一行重复该处理。对 于第二行,组名也是"Pedro",该组名被散列运算至与第一行相同的地址。因此,聚合状态 访问单元160确定Pedro组已经存在于这个位置。冲突检查块406随后将第二元素的组名 "Pedro"与存储在图9B中示出的累加器数据结构中的组名(该组名也是"Pedro")进行比 较。组名相同;因此,聚合状态访问单元160确定不存在冲突。Pedro累加器数据结构的聚 合结果字段的值随后被读取到值列访问单元140中,值列访问单元140利用新值(400+200 =600)更新该字段并且将更新的字段写回至存储器。

[0109] 为了例示的目的,假设:"Pedr〇"的散列运算和"Michael"的散列运算在本例中引 起冲突。从而,由散列表访问单元150应用的散列函数为这些组名中的每个组名产生相同 存储地址。在这种情况下,冲突检查406发现存储在这个位置的值("Pedro")不等于进入 的行值("Michael")。冲突检查406随后尝试跟随存储在该位置的下一个值指针以对下 一个元素执行冲突检查。在这种情况下,下一个值指针是零,意味着没有其它值存在于这个 散列位置并且这是在这个位置的第一个冲突。存储器分配器随后为Michael组创建新数据 结构,并且更新Pedro组中的下一个值以指向Michael。

[0110] 图9C表示在存储器分配器已初始化Michael的值之后的累加器数据结构的状态。 如所示出的,存储在Pedro累加器数据结构中的指针指向Michael。组名Alex未引起冲突, 并且因此被分开存储。

[0111] 在产生Michael累加器数据结构之后,它的聚合值字段被根据以上处理进行更 新。对于表中的其余行重复这个处理以获得每个组的最后的聚合结果。

[0112] 图10是表示在聚合处理的末尾的存储器的状态的方框图,散列表1002是四条目 散列表。然而,条目的数量可因实现方式而不同。散列表1002存储两个指针:一个指向 Pedro累加器1004,另一个指向Alex累加器1006。Pedro累加器1004存储Pedro的聚合结 果以及指向Michael累加器1008的指针。Alex累加器1006存储Alex的聚合结果,Michael 累加器1008存储Michael的聚合结果。这两个累加器中的指针都是空,这指示针对这些组 未发生冲突。作为查询2的结果,可返回每个累加器的组名和对应的聚合结果。

[0113] 选择散列表的大小

[0114] 散列表的大小可因实现方式而不同。较小的散列表更加可能导致更多的冲突,这 可能降低系统性能。相反地,大的散列表更加可能浪费系统内的存储器容量。

[0115] 例如,图11是表示根据一个实施例的示例性散列表结构的方框图。散列函数1102 被应用于进入的N位值以产生存储在存储器1104中的散列表1106的3位地址。因此,在 散列表1106中存在八个不同的可用散列表条目。如所示出的,散列表存储对于三个不同值 的三个指针。在这种情况下,较小的2位可寻址散列表将会为这三个指针提供足够的存储。 然而,较小的散列表将会增加冲突的可能性,当接收更多值时尤其如此。较大的表(诸如4 位可寻址散列表)将会浪费存储资源,当未接收到新的值时尤其如此。

[0116] 在一个实施例中,基于分组操作的基数(cardinality)的估计确定并且设置特定 查询的散列表的大小。可能处于分组操作中的组越多,为散列表分配的存储器越多。例如, N位可寻址散列表中的值N可与分组操作的基数成比例。因此,可选择散列表的大小以在存 储消耗和冲突概率之间实现令人满意的平衡。

[0117] 散列表冲突处理

[0118] 用于解决散列表冲突的技术可因实现方式而不同。作为上述冲突处理技术的替换 方案,系统100可预先计算将映射到散列表中的相同位置的所有组名。当数据库被加载到 系统100中时,可执行该预先计算。冲突的组可随后被放置在专用于这些冲突的第二表中。 原始散列表中的条目可随后被利用指示在该地址发生冲突并且聚合数据位于第二表中的 特殊键替换。

[0119] 当检测到冲突时,存在搜索第二表的多种方法。如果第二表中的条目的数量小,则 线性搜索可能是有效的。冲突处理算法可以对第二表中的每个条目进行遍历,将预期组名 与第二表中的组名进行比较。当发现匹配时,返回并且更新这个元素的聚合值字段。

[0120] 在另一实施例中,也可利用使用不同散列函数的第二散列表实现搜索。该第二散 列表的有效载荷数据可使用全累加器数据结构,因为冲突仍然可能发生。

[0121] 在另一实施例中,能够以二叉树结构组织冲突表。二叉树中的每个节点可存储组 名和聚合值。当发现正确节点时,返回并且更新聚合值。如果二叉树很好地平衡,则能够在 Odog(N))时间中搜索该表。

[0122] 该预先计算方案的一个优点在于:它减小累加器数据结构800的大小,因为不再 需要字段802和字段806来处理冲突。因此,当存在很少的冲突时,这个方案可相对于实时 方案而言节省存储空间。然而,预先计算组可包括比上述其它方案多的处理开销,在存在频 繁的产生新组的数据库更新的情况下尤其如此。在这个情形中,当加载新组时,可能需要执 行许多预先计算。

[0123] 硬件概述

[0124] 根据一个实施例,这里描述的技术由一个或多个专用计算装置实现。专用计算装 置可被硬连线以执行该技术,或者可包括被持久编程为执行该技术的数字电子装置(诸如 一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)),或者可包括被编程为根据 固件、存储器、其它存储器或组合中的程序指令执行该技术的一个或多个通用硬件处理器。 这种专用计算装置还可组合定制硬连线逻辑、ASIC或FPGA与定制编程以完成该技术。专 用计算装置可以是台式计算机系统、便携式计算机系统、手持式装置、联网装置或包括用于 实现该技术的硬连线和/或程序逻辑的任何其它装置。

[0125] 例如,图12是表示可实现本发明的实施例的计算机系统1200的方框图。计算机系 统1200包括用于传送信息的总线1202或其它通信机构、以及用于处理信息的与总线1202 耦接的硬件处理器1204。硬件处理器1204可以是例如通用微处理器。

[0126] 计算机系统1200还包括主存储器1206 (诸如随机存取存储器(RAM)或其它动态 存储装置),主存储器1206耦接到总线1202以存储信息和由处理器1204执行的指令。例 如,RAM 102可被实现在主存储器1206中。主存储器1206还可用于在由处理器1204执行 的指令的执行期间存储临时变量或其它中间信息。这种指令在被存储在处理器1204可访 问的非暂态存储介质中时,使计算机系统1200变为定制为执行该指令中指定的操作的专 用机器。

[0127] 计算机系统1200还包括只读存储器(ROM) 1208或其它静态存储装置,所述只读存 储器(ROM) 1208或其它静态存储装置耦接到总线1202以存储静态信息和用于处理器1204 的指令。提供存储装置1210 (诸如磁盘或光盘)并且将存储装置1210耦接到总线1202以 存储信息和指令。

[0128] 计算机系统1200可经总线1202耦接到显示器1212(诸如阴极射线管(CRT))以 将信息显示给计算机用户。输入装置1214(包括字母数字和其它键)耦接到总线1202以 将信息和命令选择传送给处理器1204。另一类型的用户输入装置是用于将方向信息和命令 选择传送给处理器1204并且用于控制显示器1212上的光标移动的光标控制装置1216,诸 如鼠标、跟踪球或光标方向键。这个输入装置通常具有沿两个轴(第一轴(例如X)和第二 轴(例如y))的两个自由度,这允许该装置指定平面中的位置。

[0129] 计算机系统1200还可包括用于执行过滤、投影、分组和/或聚合操作的查询处理 逻辑1232。查询处理逻辑1232可被构造为执行图6中示出的处理,并且可被使用任何合适 硬件(诸如系统100的访问单元)实现。查询处理逻辑1232耦接到存储器1234,存储器 1234高速缓冲在查询处理操作期间使用和产生的数据。例如,高速缓存110可被实现在存 储器1234中。

[0130] 计算机系统1200可使用定制硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程 序逻辑来实现这里描述的技术,所述自定义硬连线逻辑、一个或多个ASIC或FPGA、固件和/ 或程序逻辑结合计算机系统使计算机系统1200变为专用机器或对计算机系统1200编程以 使其变为专用机器。根据一个实施例,响应于处理器1204执行主存储器1206中所包含的 一个或多个指令的一个或多个序列,由计算机系统1200执行这里的技术。这种指令可被从 另一存储介质(诸如存储装置1210)读取到主存储器1206中。主存储器1206中所包含的 指令的序列的执行使处理器1204执行这里描述的处理步骤。在替代实施例中,可替代于软 件指令使用硬连线电路或者结合软件指令使用硬连线电路。

[0131] 这里所使用的术语"存储介质"表示存储使机器以特定方式工作的指令和/或数 据的任何非暂态介质。这种存储介质可包括非易失性介质和/或易失性介质。非易失性介 质包括例如光盘或磁盘,诸如,存储装置1210。易失性介质包括动态存储器,诸如主存储器 1206。存储介质的通常形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其它磁 数据存储介质、CD-ROM、任何其它光学数据存储介质、具有孔的图案的任何物理介质、RAM、 PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储芯片或存储匣。

[0132] 存储介质不同于传输介质,但可结合传输介质使用。传输介质参与在存储介质之 间传送信息。例如,传输介质包括同轴线缆、铜线和光纤,所述同轴线缆、铜线和光纤包括包 含总线1202的导线。传输介质还能够采用声波或光波的形式,诸如在无线电波和红外数据 通信期间产生的声波或光波。

[0133] 各种形式的介质可参与将一个或多个指令的一个或多个序列运送给处理器1204 用于执行。例如,所述指令可最初被携带在远程计算机的磁盘或固态驱动器上。远程计算 机能够将指令加载到它的动态存储器中,并且使用调制解调器在电话线上发送指令。计算 机系统1200的本地的调制解调器能够接收电话线上的数据,并且使用红外发射器将数据 转换成红外信号。红外检测器能够接收红外信号中携带的数据,并且合适的电路能够将数 据放置在总线1202上。总线1202将数据运送给主存储器1206,处理器1204从主存储器 1206检索指令并且执行指令。由主存储器1206接收的指令可在由处理器1204执行之前或 之后可选地存储在存储装置1210上。

[0134] 计算机系统1200还包括耦接到总线1202的通信接口 1218。通信接口 1218提供 与连接到本地网络1222的网络链路1220的双向数据通信耦接。例如,通信接口 1218可以 是综合业务数字网(ISDN)卡、线缆调制解调器、卫星调制解调器或用于提供与对应类型的 电话线的数据通信连接的调制解调器。作为另一例子,通信接口 1218可以是用于提供与兼 容LAN的数据通信连接的局域网(LAN)卡。还可实现无线链路。在任何这种实现方式中, 通信接口 1218发送和接收携带代表各种类型的信息的数字数据流的电、电磁或光信号。

[0135] 网络链路1220通常通过一个或多个网络提供与其它数据装置的数据通信。例如, 网络链路1220可通过本地网络1222提供与主机计算机1224或与由互联网服务提供商 (ISP) 1226经营的数据设备的连接。ISP 1226进而通过全球分组数据通信网络(现在通常 被称为"互联网"1228)提供数据通信服务。本地网络1222和互联网1228都使用携带数字 数据流的电、电磁或光信号。通过各种网络的信号以及在网络链路1220上并且通过通信接 口 1218的信号(所述信号将数字数据运送给计算机系统1200,并且运送来自计算机系统 1200的数字数据)是传输介质的示例性形式。

[0136] 计算机系统1200能够通过网络、网络链路1220和通信接口 1218发送消息和接收 数据(包括程序代码)。在互联网例子中,服务器1230可通过互联网1228、ISP 1226、本地 网络1222和通信接口 1218传输请求的应用程序的代码。

[0137] 当接收到代码时,接收的代码可由处理器1204执行,和/或接收的代码可被存储 在存储装置1210或其它非易失性存储器中用于在以后执行。

[0138] 扩展和替换

[0139] 在前面的说明书中,已参照可因实现方式而不同的许多具体细节描述本发明的实 施例。因此,要以例示的而非限制性意义来看待说明书和附图。本发明的范围和申请人希望 成为本发明的范围的内容的唯一专门标志是本申请以特定形式发布的一组权利要求(包 括任何随后的校正)的文字和等同范围。

Claims (22)

1. 一种方法,包括: 接收对按照第一列分组的数据进行聚合的请求; 响应于接收到该请求,对多个行中的每一行执行下面的步骤: 将行中的组值映射到地址; 使用该地址来定位与该组值关联的组的聚合数据集;W及 基于该行的第二列中的值更新所述聚合数据集中所包括的聚合值; 其中所述方法由一个或多个计算装置执行。
2. 如权利要求1所述的方法,还包括: 对于所述多个行中的特定行,确定还未产生与该特定行关联的组值的聚合数据; 响应于确定还未产生与该特定行关联的组值的聚合数据,分配存储器W存储与该特定 行关联的组值的聚合数据。
3. 如权利要求1所述的方法,其中对于所述多个行中的至少两个行,不同组值映射到 相同地址,所述方法还包括: 对于映射到该相同地址的来自所述多个行中的特定行的特定组值: 使用该相同地址定位包括存储的组值的特定聚合数据集; 将存储的组值与该特定组值进行比较; 响应于确定存储的组值和该特定组值匹配,基于来自第二列的该特定行的第二值更新 所述聚合数据集中所包括的聚合值。
4. 如权利要求3所述的方法,还包括; 响应于确定存储的组值和第一组值不匹配: 分配存储器W存储新组的聚合数据; 产生识别分配的存储器的地址的指针; 将第二指针存储在所述特定聚合数据集中。
5. 如权利要求1所述的方法,其中将组值映射到地址包括将散列函数应用于组值。
6. 如权利要求1所述的方法,其中所述组的所述聚合数据集包括组值、聚合值和指向 冲突组的第二聚合数据集的指针。
7. 如权利要求1所述的方法,其中所述地址被存储在散列表中;其中基于对与对聚合 数据的请求关联的组的数量的估计选择散列表的大小。
8. 如权利要求1所述的方法,其中通过在接收到该请求之前预先计算映射到相同地址 的第一列中的所有组名来检测冲突。
9. 一种或多种存储指令的非暂态计算机可读介质,当所述指令由一个或多个处理器执 行时使一个或多个计算装置执行: 接收对按照第一列分组的数据进行聚合的请求; 响应于接收到该请求,对多个行中的每一行执行下面的步骤: 将行中的组值映射到地址; 使用该地址定位与该组值关联的组的聚合数据集;W及 基于该行的第二列中的值更新所述聚合数据集中所包括的聚合值。
10. 如权利要求9所述的非暂态计算机可读介质,还存储指令,所述指令使所述一个或 多个计算装置执行: 对于所述多个行中的特定行,确定还未产生与该特定行关联的组值的聚合数据; 响应于确定还未产生与该特定行关联的组值的聚合数据,分配存储器W存储与该特定 行关联的组值的聚合数据。
11. 如权利要求9所述的非暂态计算机可读介质,其中对于所述多个行中的至少两个 行,不同组值映射到相同地址,所述非暂态计算机可读介质还存储指令,所述指令使所述一 个或多个计算装置执行: 对于映射到该相同地址的来自所述多个行中的特定行的特定组值: 使用该相同地址定位包括存储的组值的特定聚合数据集; 将存储的组值与该特定组值进行比较; 响应于确定存储的组值和该特定组值匹配,基于来自第二列的该特定行的第二值更新 所述聚合数据集中所包括的聚合值。
12. 如权利要求11所述的非暂态计算机可读介质,还存储指令,所述指令使所述一个 或多个计算装置对于第一列的第二行执行: 分配存储器W存储新组的聚合数据; 产生识别分配的存储器的地址的指针; 将第二指针存储在所述特定聚合数据集中。
13. 如权利要求9所述的非暂态计算机可读介质,其中用于将组值映射到地址的指令 包括用于将散列函数应用于组值的指令。
14. 如权利要求9所述的非暂态计算机可读介质,其中所述组的所述聚合数据集包括 组值、聚合值和指向冲突组的第二聚合数据集的指针。
15. 如权利要求9所述的非暂态计算机可读介质,其中所述地址被存储在散列表中;其 中基于对与对聚合数据的请求关联的组的数量的估计选择散列表的大小。
16. 如权利要求9所述的非暂态计算机可读介质,其中通过在接收到该请求之前预先 计算映射到相同地址的第一列中的所有组名来检测冲突。
17. -种用于执行分组和聚合操作的系统,包括: 组列访问单元,被构造为从第一列的行检索第一组的组值; 散列表访问单元,被构造为将组值映射到地址; 聚合状态访问单元,被构造为检索由存储在第一组的地址处的指针识别的聚合数据; 值列访问单元,被构造为基于第二列的该行中的值更新所述聚合数据集中所包括的聚 合值。
18. 如权利要求17所述的系统,其中所述聚合状态访问单元还被构造为: 确定还未产生第一组的指针; 响应于确定还未产生第一组的指针,分配存储器W存储第一组的聚合数据; 产生第一组的指针. 其中第一组的指针识别分配的存储器的地址。
19. 如权利要求17所述的系统,其中: 所述散列表访问单元还被构造为将存储在第二行中的第二组值映射到第二地址; 聚合状态访问单元还被构造为检索由存储在第二组的第二地址处的第二指针识别的 聚合数据; 值列访问单元还被构造为基于第二列的第二行中的值更新由第二指针识别的聚合数 据中的聚合值。
20. 如权利要求17所述的系统,其中: 所述散列表访问单元还被构造为将第一列的第二行中的第二组值映射到该地址; 所述聚合状态访问单元还被构造为将该组值与第二组值进行比较,并且响应于确定该 组值和第二组值匹配,基于第二列的第二行中的第二值更新该聚合数据中的聚合值。
21. 如权利要求20所述的系统,其中响应于确定该组值和第二组值不匹配:所述聚合 状态访问单元还被构造为: 分配存储器W存储第二组的聚合数据; 产生识别分配的存储器的地址的第二指针; 将第二指针存储在第一组的聚合数据中。
22. 如权利要求17所述的系统,其中所述散列表访问单元被构造为将散列函数应用于 该组值W将该组值映射到该地址。
CN 201380050947 2012-08-20 2013-08-14 聚合/分组操作的硬件实现方式:散列表方法 CN104685498A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US13590057 US9563658B2 (en) 2012-08-20 2012-08-20 Hardware implementation of the aggregation/group by operation: hash-table method
PCT/US2013/055020 WO2014031416A3 (en) 2012-08-20 2013-08-14 Hardware implementation of the aggregation/group by operation: hash-table method

Publications (1)

Publication Number Publication Date
CN104685498A true true CN104685498A (zh) 2015-06-03

Family

ID=49083762

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201380050947 CN104685498A (zh) 2012-08-20 2013-08-14 聚合/分组操作的硬件实现方式:散列表方法

Country Status (4)

Country Link
US (1) US9563658B2 (zh)
CN (1) CN104685498A (zh)
EP (1) EP2885728A2 (zh)
WO (1) WO2014031416A3 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US9697174B2 (en) 2011-12-08 2017-07-04 Oracle International Corporation Efficient hardware instructions for processing bit vectors for single instruction multiple data processors
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
US9779137B2 (en) * 2013-07-09 2017-10-03 Logicblox Inc. Salient sampling for query size estimation
US9606921B2 (en) 2013-09-21 2017-03-28 Oracle International Corporation Granular creation and refresh of columnar data
KR101642072B1 (ko) * 2014-05-08 2016-07-22 주식회사 알티베이스 하이브리드스토리지장치 및 방법

Citations (7)

* Cited by examiner, † Cited by third party
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 (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
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
US7908259B2 (en) 2006-08-25 2011-03-15 Teradata Us, Inc. Hardware accelerated reconfigurable processor for accelerating 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
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
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
US20120166447A1 (en) 2010-12-28 2012-06-28 Microsoft Corporation 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

Patent Citations (7)

* Cited by examiner, † Cited by third party
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 美国结构数据有限公司 协同操作数据的方法和系统

Also Published As

Publication number Publication date Type
US20140052726A1 (en) 2014-02-20 application
JP2015528603A (ja) 2015-09-28 application
WO2014031416A3 (en) 2014-07-24 application
EP2885728A2 (en) 2015-06-24 application
US9563658B2 (en) 2017-02-07 grant
WO2014031416A2 (en) 2014-02-27 application

Similar Documents

Publication Publication Date Title
US20090106218A1 (en) Support for user defined aggregations in a data stream management system
US6289352B1 (en) Apparatus and method for compound on-line analytical processing in databases
US20040186832A1 (en) System and method for controlling processing in a distributed system
US20050182758A1 (en) Method and system for dynamic templatized query language in software
US20110138123A1 (en) Managing Data Storage as an In-Memory Database in a Database Management System
US20120054225A1 (en) Query and Exadata Support for Hybrid Columnar Compressed Data
US20100223606A1 (en) Framework for dynamically generating tuple and page classes
US20090254774A1 (en) Methods and systems for run-time scheduling database operations that are executed in hardware
US8126870B2 (en) System and methodology for parallel query optimization using semantic-based partitioning
US20040181522A1 (en) Shared memory router system and method for node communication in a distributed system
US20110213775A1 (en) Database Table Look-up
US20120036146A1 (en) Apparatus for elastic database processing with heterogeneous data
US20100293338A1 (en) Cache cleanup and latching
US20040181523A1 (en) System and method for generating and processing results data in a distributed system
US20090319498A1 (en) Query processing pipelines with single-item and multiple-item query operators
US7908259B2 (en) Hardware accelerated reconfigurable processor for accelerating database operations and queries
US20090287986A1 (en) Managing storage of individually accessible data units
US20100082648A1 (en) Hash join using collaborative parallel filtering in intelligent storage with offloaded bloom filters
US20120047126A1 (en) Methods and systems for hardware acceleration of streamed database operations and queries based on multiple hardware accelerators
US20090228433A1 (en) System and method for multiple distinct aggregate queries
US7966343B2 (en) Accessing data in a column store database based on hardware compatible data structures
US20120011144A1 (en) Aggregation in parallel computation environments with shared memory
US20140032525A1 (en) Aggregation framework system architecture and method
US20090254516A1 (en) Accessing data in a column store database based on hardware compatible indexing and replicated reordered columns
US20120239612A1 (en) User defined functions for data loading

Legal Events

Date Code Title Description
C06 Publication
EXSB Decision made by sipo to initiate substantive examination