CN111699480A - 数据库系统中的加速过滤、分组和聚合 - Google Patents

数据库系统中的加速过滤、分组和聚合 Download PDF

Info

Publication number
CN111699480A
CN111699480A CN201880088339.8A CN201880088339A CN111699480A CN 111699480 A CN111699480 A CN 111699480A CN 201880088339 A CN201880088339 A CN 201880088339A CN 111699480 A CN111699480 A CN 111699480A
Authority
CN
China
Prior art keywords
values
encoded
register
column vector
value
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.)
Pending
Application number
CN201880088339.8A
Other languages
English (en)
Inventor
米哈尔·诺娃凯维奇
埃里克·布廷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Macintosh Ltd
Singlestore Inc
Original Assignee
Macintosh Ltd
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
Application filed by Macintosh Ltd filed Critical Macintosh Ltd
Publication of CN111699480A publication Critical patent/CN111699480A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • G06F16/244Grouping and aggregation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Advance Control (AREA)

Abstract

提供了一种用于使处理器对编码值的列存储表执行查询的方法。该方法包括配置处理器以接收查询,该查询包括要应用于编码值的至少第一列向量的过滤器。处理器处理针对第一列向量中的编码值的查询,以生成指示通过或未通过过滤器的相应编码值的第一向量。处理器相对于第一列向量中的编码值从第一向量确定通过过滤器的编码值和未通过过滤器的编码值的指示符。处理器确定编码值的位长度。处理器基于指示符和所确定的编码值的位长度来选择用于处理查询的算法。还提供了一种系统和非暂时性计算机可读介质。

Description

数据库系统中的加速过滤、分组和聚合
技术领域
本申请涉及数据库搜索,并且更具体地涉及用于提高数据库系统中的搜索查询的效率的方法和系统。
背景技术
随着技术的发展,以电子形式存储的信息量和对搜索这种信息的实时或伪实时能力的需求不断增加。数据库管理系统被设计为以促进选择信息的有效搜索和检索的形式组织数据。典型的数据库管理系统允许用户以查询语言提交“查询”用于检索满足特定搜索参数的信息。
在已知的数据库管理系统中,可以利用基于查询的静态算法或过程针对数据库内的数据处理特定查询,而无需考虑查询的特定特征。由于处理查询所针对的数据可能非常大(例如数亿或数十亿个单独条目),因此这种静态算法或过程通常需要比单独条目多一个或多个数量级的时钟周期来将结果返回到查询,使查询响应时间不可接受地大。因此,减少返回针对数据库管理系统的用户查询的结果所需的时间将是有利的。
发明内容
一方面提供了一种用于使处理器对编码值的列存储表执行查询的方法。该方法包括配置处理器以接收查询,该查询包括要应用于编码值的至少第一列向量的过滤器。该方法包括配置处理器以处理针对第一列向量中的编码值中的每一个编码值的查询,从而生成指示通过过滤器或未通过过滤器的相应编码值的第一向量。该方法包括配置处理器以相对于第一列向量中的编码值,从第一向量确定通过过滤器的编码值和未通过过滤器的编码值的指示符。该方法包括配置处理器以确定第一列向量中的编码值的位长度。该方法包括配置处理器以针对第一列向量中的编码值的至少一个子集,基于指示符和所确定的编码值的位长度,从多个算法中选择用于处理查询的算法。
另一方面提供了一种包括代码的非暂时性计算机可读介质,该代码在被执行时使处理器接收查询,该查询包括要应用于编码值的至少第一列向量的过滤器。该代码在被执行时使处理器处理针对第一列向量中的编码值中的每一个编码值的查询,从而生成指示通过过滤器或未通过过滤器的相应编码值的第一向量。该代码在被执行时使处理器相对于第一列向量中的编码值从第一向量确定通过过滤器的编码值和未通过过滤器的编码值的指示符。该代码在被执行时使处理器确定第一列向量中的编码值的位长度。该代码在被执行时使处理器针对第一列向量中的编码值的至少一个子集,基于指示符和所确定的编码值的位长度,从多个算法中选择用于处理查询的算法。
另一方面提供了一种被配置为对编码值的列存储表执行查询的系统。该系统包括至少一个寄存器,被配置为保持一个或多个值。该系统包括至少一个处理器。该系统包括计算机可读介质,该计算机可读介质包括代码,该代码在被执行时使处理器接收查询,该查询包括要应用于编码值的至少第一列向量的过滤器。该代码在被执行时使处理器处理针对第一列向量中的编码值中的每一个编码值的查询,从而生成指示通过过滤器或未通过过滤器的相应编码值的第一向量。该代码在被执行时使处理器相对于第一列向量中的编码值从第一向量确定通过过滤器的编码值和未通过过滤器的编码值的指示符。该代码在被执行时使处理器确定第一列向量中的编码值的位长度。该代码在被执行时使处理器针对第一列向量中的编码值的至少一个子集,基于该指示符和所确定的编码值的位长度,从多个算法中选择用于处理查询的算法。
附图说明
图1是示出根据一些实施方式的用于执行针对数据集合进行的查询的系统的框图;
图2是示出根据一些实施方式的包括可以结合到图1的系统中的几个模块或引擎的框图;
图3示出了根据一些实施方式的用于对编码值的表执行查询的过程的流程图;
图4示出了根据一些实施方式的用于针对查询执行通过压缩进行选择的过程;
图5是示出由图4描述的某些数据向量、寄存器和操作的框图;
图6示出了根据一些实施方式的用于针对查询执行聚合选择的过程;
图7A和图7B示出了由图6描述的某些数据向量、寄存器和操作的框图;
图8示出了根据一些实施方式的用于针对查询执行通过特殊组分配进行选择的过程;
图9是示出由图8描述的某些数据向量、寄存器和操作的框图;
图10示出了根据一些实施方式的用于针对查询执行基于按和分组的分类的过程;
图11A和图11B示出了由图10描述的某些数据向量、寄存器和操作的框图;
图12示出了根据一些实施方式的用于针对查询执行寄存器内按计数分组和按和分组的过程;
图13是示出由图12描述的某些数据向量、寄存器和操作的框图;
图14示出了根据一些实施方式的用于针对查询执行按和多聚合分组的过程;
图15是示出由图14描述的某些数据向量、寄存器和操作的框图;
图16示出了根据一些实施方式的用于针对查询执行使用位级逻辑按计数(*)快速分组的过程;
图17是示出由图16描述的某些数据向量、寄存器和操作的框图。
具体实施方式
在以下描述中,出于解释而不是限制的目的,阐述了诸如特定体系结构、接口、技术等的具体细节,以便提供对本文描述的概念的透彻理解。然而,对于本领域技术人员显而易见的是,可以实践脱离这些具体细节的其他实施方式。类似地,本申请针对如附图所示的示例实施方式,并且不旨在限制超出明确包括在权利要求中的术语。出于简单和清楚的目的,省略了对公知装置和方法的详细描述,以便不以不必要的细节模糊描述。然而,缺乏对任何特定装置或方法的任何描述不一定指示其或其功能是公知的。
附图描述了使用数据库查询系统的范例的示例查询处理系统,该数据库查询系统处理使用标准结构化查询语言(SQL)的操作和格式形成的查询。然而,本领域技术人员将认识到,本文描述的原理也可以应用于其他编程和查询语言中的查询的处理。
图1是示出根据一些实施方式的用于执行针对数据集合进行的查询的系统100的框图。系统100包括中央处理单元(CPU)102、内存120和存储器130。CPU 102包括处理器106、至少一个高速缓存108、时钟110和多个寄存器104a,104b…104n(104a至104n)。在一些实施方式中,本文描述的包括寄存器104a至104n的一个或多个寄存器可以是单指令多数据(SIMD)寄存器。然而,本公开设想使用具有任意数量的位的容量的任意类型的数据寄存器。
寄存器104a至104n中的每一个寄存器可以被配置为保持从彼此和/或从处理器106、高速缓存108、内存120或存储器130中的一个或多个接收的数据。寄存器104a至104n中的每一个寄存器可以是256位寄存器,被配置为存储多达256位的数据,例如处理器106对其同时进行一个或多个操作。然而,寄存器104a至104n不限于此,并且可以具有任何其他数量的位和/或可以是任何其他类型的寄存器。
处理器106被配置为执行一个或多个操作或指令,用于处理对保持在寄存器104a至104n中的至少一个寄存器中的数据(该数据最终从高速缓存108、内存120或存储器130中的一个或多个中检索)或对保持在高速缓存108、内存120或存储器130中的一个或多个中的数据的查询。在一些实施方式中,这样的指令可以是与诸如将大多数整数命令扩展到256位的AVX2、将大多数整数命令扩展到512位的AVX512或者将整数命令扩展到任意数量的位的任何其他扩展的高级向量扩展(AVX)兼容的单输入多数据(SIMD)指令。
时钟110被配置为提供用于定时、控制和执行系统100内的计算机操作的时钟信号串。
高速缓存108可以包括数据存储器,该数据存储器在物理上比内存120或存储器130更靠近处理器106。在一些实施方式中,高速缓存108可以具有比内存120或存储器130更小的存储容量,但是特定数据可以在比特定数据可以以其他方式从内存120或存储器130读取或写入到内存120或存储器130的时间段更短的时间段内从高速缓存108读取或写入到高速缓存108。
内存120可以包括与高速缓存108和存储器130分离的数据存储器,诸如随机存取内存(RAM),存储在其上的数据可以从该数据存储器访问。在一些实施方式中,内存120可以具有比高速缓存108更大的存储容量和比存储器130更小的存储容量。在一些实施方式中,特定数据可以在比特数据可以以其他方式从存储器130读取或写入到存储器130更短的时间段内从内存120读取或写入到内存120,但是特定数据可以以其他方式从高速缓存108读取或写入到高速缓存108花费更长的时间段来从内存120读取或写入到内存120。
存储器130可以包括与高速缓存108和内存120分离的数据存储器,诸如硬盘驱动器或数据库服务器,存储在其上的数据可以从该数据存储器访问。在一些实施方式中,存储器130可以具有比高速缓存108或内存120更大的存储容量,然而,特定数据可能花费比特定数据可以以其他方式从高速缓存108或内存120读取或写入到高速缓存108或内存120更长的时间段来从存储器130读取或写入到存储器130。
尽管CPU 102被示出为具有一个处理器106、高速缓存108、时钟110和一组寄存器104a至104n,但是本公开不限于此,并且多个这样的特征可以存在于一个或多个CPU中的每一个CPU中,例如,为系统100提供一个或多个多核处理器。此外,对由处理器106执行的操作的任何讨论可以指示由单个处理器106执行的操作,或者由多个类似处理器的不同处理器执行的操作。
图2是示出根据一些实施方式的包括可以结合到图1的系统100中的几个模块或引擎的200的框图。
示图200包括解码引擎212,其被配置为对一项或多项编码数据进行解码。示图200还包括过滤引擎214,其被配置为根据由查询250定义的一组过滤器参数过滤一组或多组数据。示图200还包括组ID映射引擎216,其被配置为根据由查询250定义的一组参数来映射来自将被分组的一组或多组数据的一个或多个组ID。示图200还包括聚合引擎218,其被配置为基于由查询250定义的一组参数来聚合一个或多个数据值以提供结果输出240。在一些实施方式中,解码引擎212、过滤引擎214、组ID映射引擎216和聚合引擎218中的一个或多个可以由处理器106(参见图1)的至少一部分和/或类似于系统100的处理器106的另一处理器来实现。
在一些实施方式中,表220包括可以针对其执行查询250的数据。表220可以包括以列存储格式存储的编码数据。例如,在列存储格式中,编码数据的一个或多个列222中的每一列保持特定字段的值,并且被存储在内存(例如内存120和/或存储器130(参见图1))中的对应位置。在一些实施方式中,列222可以各自包括数十亿行或更多行的编码数据。因此,每一列222可以被划分为例如1百万(M)行编码数据的多个连续片段224。给定列222的每个片段224可以利用诸如字典编码、游程编码(run length encoding)或整数值编码的编码技术与另一列222的每个其他片段224分开编码,但是也可以考虑其他编码技术。
字典编码包括将原始数据内的相同循环位的实例映射到对应字典内的对应整数,并且然后用对应整数替换循环位,从而减少描述原始数据所需的位数。字典可以被采用来表示在一个或两个方向上映射在原始数据值与这些值的整数序列号之间的对象的集合。下面的表1示出了示例未编码表。
Figure BDA0002612325740000071
表1
由于每个列222(“划分”、“州”、“sale_amt”)的每个片段224可以利用其自身的值的字典进行编码,因此表2示出了用于“划分”列的示例字典,表3示出了用于“州”列的示例字典,并且表4示出了用于“sale_amt”列的示例字典。
编码值 原始值
0
1 西
表2
编码值 原始值
000 纽约
001 加利福尼亚
010 佛罗里达
011 华盛顿
100 内华达
表3
编码值 原始值
00 1,000
01 2,000
10 3,000
11 4,000
表4
表1的字典具有两个不同的原始值(东/西),并且因此可以使用1位来完成编码。表2的字典具有5个不同的原始值(纽约/加利福尼亚/佛罗里达/华盛顿/内华达),并且因此可以使用3位来完成编码。表3的字典具有4个原始值(1,000/2,000/3,000/4,000),并且因此可以使用2位来完成编码。因此,使用表2至表4的字典,表1所示的数据可以如表5所示被字典编码。这种字典编码可以用于任何数据类型,例如整数、字符串等。
Figure BDA0002612325740000081
Figure BDA0002612325740000091
表5
游程编码包括通过指示重复数字的最小单位接着指示最小单位被连续重复的次数的整数来指示多个重复值。例如,WWWWWWWWWWWWBBBBBBBBBBBB将被编码为W12B12,将24个字符减少到6个。类似地,WWBWWBWWBWWB将被编码为WWB4,将12个字符减少到4个。尽管利用ASCII字符示出了游程编码的这个示例,但是通常也可以最终以二进制形式存储这种数据。
出于本公开的目的,通过在批次230中评估表220的列222的片段224中的编码数据来执行针对表220中的编码数据执行的查询250。例如,批次230可以包括每列222的固定数量的行(例如高达4096行)的移动窗口。每个批次在前进到下一批次的行之前被完全处理,并且在处理同一查询或子查询期间不会重新访问先前处理的批次。
因此,解码引擎212、过滤引擎214、组ID映射引擎216和聚合引擎218中的一个或多个可以根据特定查询或子查询250的参数顺序地处理每个批次230。在一些实施方式中,这样的处理可以包括将编码数据从每个批次230加载到寄存器104a至104n中,并且至少部分地如下面结合本文中的任何附图所描述的那样处理该数据。然而,本文描述的具有在寄存器中加载和/或操纵的任何类型的数据的任何操作可以可选地在存储在阵列或其他类型的数据结构(诸如高速缓存108、内存120或存储器130)中时对数据进行操作。
在执行这样的处理时,解码引擎212、过滤引擎214、组ID映射引擎216和聚合引擎218中的一个或多个可以利用一组功能,例如向量工具箱202内的C编程语言功能,其被配置为在特定时间对保持在一个或多个列向量、相关联的字典和聚合字典中的所有数据同时执行特定操作。在一些实施方式中,一个或多个列向量中的数据部分可以任选地在诸如寄存器104a至104n(图1)的寄存器中存储和操纵。在一些实施方式中,这样的功能可以包括选择功能,其根据查询或子查询250的参数来收集值,同时保留它们的编码,如下面将描述的。这样的功能可以进一步包括级联功能,其可以级联来自表220的多于一列的数据,如下面将描述的。在一些情况下,这种级联可以组合利用不同编码方案(例如RLE和字典编码)编码的数据。这样的功能可以进一步包括聚合功能,其可以包括基于查询或子查询250的一个或多个参数对数据进行分组和/或执行需要聚合多个值的操作,例如确定通过特定过滤器并且属于特定组的项目的计数、和、平均值、最小值、最大值、标准偏差、中值、模式等,如下面将描述的。这样的功能可以进一步包括字典编码和解码功能,例如生成和利用字典。
图3示出了根据一些实施方式的用于对编码值的表220执行查询250的过程的流程图300。尽管结合图3描述了某些步骤或动作,但是用于对编码值的表220执行查询250的过程可以包括少于所描述的所有步骤,和/或所描述的步骤的附加或替代步骤。
在一些实施方式中,流程图300可以用于处理查询或子查询250,该查询或子查询250包括选择(例如,基于查询或子查询250的一个或多个参数来选择表220的一个或多个列222中的值的子集)和对由选择识别的值的子集的分组和聚合(例如,基于查询或子查询250的一个或多个参数对所选择的值的子集分类和执行聚合操作,诸如和、最小值、最大值、平均值、标准偏差、中值、模式等)两者。
框302包括接收查询,该查询包括要应用于编码值的至少第一列向量的过滤器。例如,处理器106(图1)可以接收查询250(图2)。查询250可以包括要应用于表220的列222的编码值的至少一个列向量的过滤器。这种查询的非限制性示例如下所示:
选择州,sum(sale_amt)
从table_of_sales
其中,划分=='东'
按州分组
该示例查询从表“table_of_sales”中选择条目,其中,划分是“东”,并且指示输出结果应该是针对每个“州”的“sale_amt”的和,按“州”分组。因此,在这样的示例查询中,划分=='东'将是过滤器或选择,sum(sale_amt)将是聚合(和),并且按州分组将是结果应当如何被分组或分类的指示。
框304包括处理针对第一列向量中的编码值中的每一个编码值的查询,从而生成指示通过过滤器或未通过过滤器的相应编码值的第一向量。例如,处理器106(图1)可以被配置为生成第一向量(在本文中可选地描述为选择字节向量),其指示批次230中的每一行是否经由第一值(例如0x00或所有位未被设置)满足过滤器参数,或经由第二值(例如0xFF或所有位被设置)不满足过滤器参数。这样的选择字节向量可以具有长度为1字节(8位)的条目,与AVX2比较指令如何存储单字节元素的输出一致。由于表220的编码数据是在批次230中处理的,因此这样的选择字节向量可以具有等于在批次230中处理的表220的行数(例如4096行)的行数。在下面的表6中示出了这样的选择字节向量的一部分的非限制性示例,对应于表5的table_of_sales的部分并且利用先前结合表2至表4描述的示例字典编码用于前面段落所示的查询:
0xFF
0x00
0xFF
0xFF
0x00
0x00
0xFF
0xFF
表6
框306包括相对于第一列向量中的编码值,从第一向量确定通过过滤器的编码值和未通过过滤器的编码值的指示符。例如,处理器106(图1)可以被配置为相对于第一列向量中的编码值,从第一向量确定通过过滤器的编码值和未通过过滤器的编码值的指示符。这样的指示符可以指示由包括在当前批次230中的表220的部分上的查询250的参数定义的过滤器的选择性。使用表6作为示例,这样的选择性的指示符可以指示过滤器通过8行中的5行,对应于62.5%或0.625的选择性。在该示例中,过滤器或选择消除了8行中的3行。然而,根据所使用的特定过滤器的参数,选择性可以在从0%(0.000)到100%(1.000)(包括端值)的范围内。
框308包括确定第一列向量中的编码值的位长度。例如,处理器106(参见图1)可以被配置为确定正在被评估的列向量中的编码值的位长度,例如,针对以上所示的示例查询,表5的sale_amt的列向量具有2位的位长度。
框310包括针对第一列向量中的编码值的子集,基于指示符和所确定的编码值的位长度,从多个算法中选择用于处理查询的算法。例如,下面描述用于执行编码值的选择、分组和/或聚合以生成输出240(参见图2)的几个过程或算法。然而,根据由查询250定义的过滤器的选择性和编码值的位长度,就执行查询250所需的时钟周期而言,这些过程或算法中的一些过程或算法比其他过程或算法更有效。例如,如下面将描述的,在通过压缩进行选择、聚合选择与通过特殊组分配进行选择之间,在62.5%的选择性和2位的位宽度下,一些实施方式可以选择通过压缩进行选择作为优选的选择过程。
通过压缩进行选择
压缩的向量操作采用两个输入:先前结合图3的框304描述的选择字节向量(第一向量),以及具有任意数字元素的输入列向量,从该输入列向量可以生成输出列向量。输入列向量的元素大小可以是1字节、2字节、4字节或8字节中的任一个。压缩的结果是具有由选择字节向量指示的输入列向量的所有条目已经被由查询250定义的过滤器通过(例如具有0xFF的对应行条目)的输出列向量。以下参考图4和图5描述通过压缩进行选择,图4示出了根据一些实施方式的用于针对查询250执行通过压缩进行选择的过程,图5是示出由图4描述的某些数据向量、寄存器和操作的框图。
尽管结合图4描述了某些步骤或动作,但是用于针对查询250执行通过压缩进行选择的过程可以包括少于所描述的所有步骤和/或所描述的步骤的附加或替代步骤。
框402包括将位添加到第一列向量中编码值的至少子集中的每一个子集中,从而生成第一列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度。相同的长度可以是一个字节、两个字节、四个字节或八个字节。例如,参考图5,给定第一列向量512的编码值不必以全字节长度编码。因此,为了确保寄存器104a至104n(参见图1)的最大使用,并且为了确保第一列向量512的编码值各自完全适合于给定寄存器104a,处理器106(图1)可以利用解压缩操作514将第一列向量512的编码值解压缩到1字节、2字节、4字节或8字节的下一最大大小,以生成解压缩的编码值的对应第一列向量516。2n字节大小(其中,n=0、1、2或3)提供这样的保证。
框404包括将值的第一子集加载到第一寄存器的相应通道中,第一子集包括解压缩的编码值。例如,参考图5,处理器106(图1)可以利用加载操作522将现在具有全字节长度的解压缩的编码值的第一子集从解压缩的第一列向量516加载到寄存器104a的相应通道中。在图5中,尽管通道可以是基于正被加载的数据的任何长度,但是通道由具有1字节长度的单个框指示。
框406包括将值的第二子集加载到第二寄存器的相应通道中,第二子集包括对应于值的第一子集的第一向量的值。例如,参考图5,处理器106(图1)可以执行加载操作524以将选择字节向量518(第一向量)的值的第二子集加载到寄存器104b的相应通道中。值的第二子集518对应于解压缩的第一列向量516的值的第一子集并且被加载到寄存器104b中。由于选择字节向量518(第一向量)的值各自具有1字节的长度,因此可以将整数个解压缩的编码值加载到寄存器104b中。由于加载到寄存器104b中的选择字节向量的值的第二子集对应于加载到寄存器104a中的解压缩的编码值的第一子集,因此与解压缩的编码值被加载到寄存器104a中一样,第二字节向量518的相同数量的值被加载到寄存器104b中,并且以相同的顺序。
框408包括利用单个指令基于第二子集中的值将通过过滤器的解压缩的编码值从第一寄存器输出到过滤的第一列向量中。例如,参考图5,处理器106(图1)可以利用单个指令(输出操作530)基于加载到寄存器104b中的选择字节向量518(第一向量)的值将通过过滤器的解压缩的编码值从寄存器104a输出到过滤的第一列向量540中。在一些实施方式中,这样的操作可以是寄存器104a和104b的对应通道之间(例如,来自加载到寄存器104a的解压缩的第一列向量516的解压缩的编码值与来自加载到寄存器104b的选择字节向量518(第一向量)的对应值之间)的AND操作。
聚合选择
聚合选择的向量操作利用先前描述的用于通过压缩进行选择的过程的一些步骤,同时引入了附加和/或替代步骤。以下参考图6以及图7A和7B描述聚合选择,图6示出了根据一些实施方式的用于针对查询250执行聚合选择的过程,图7A和7B示出了由图6描述的某些数据向量、寄存器和操作的框图。
尽管结合图6描述了某些步骤或动作,但是用于针对查询250执行聚合选择的过程可以包括少于所描述的所有步骤和/或所描述的步骤的附加或替代步骤。
框602包括生成包括多个连续整数值的第二向量。在一些实施方式中,整数值的长度可以是一个字节、两个字节、四个字节或八个字节。例如,参考图7A,处理器106可以被配置为生成具有作为连续整数值的条目的第二向量702。在一些实施方式中,连续整数以零开始,并且第二向量702可以具有与先前描述的选择索引向量518一样多的条目。
框604包括将值的第一子集加载到第一寄存器的相应通道中,第一子集包括第二向量的连续整数值。例如,参考图7A,处理器106(图1)可以利用加载操作722将连续整数值的第一子集从第二向量702加载到寄存器104a的相应通道中。
框606包括将值的第二子集加载到第二寄存器的相应通道中,第二子集包括第一向量的值。例如,参考图7A,处理器106(图1)可以执行加载操作724以将选择字节向量518的值的第二子集加载到寄存器104b的相应通道中。值的第一子集是在第二向量712内与选择字节向量518内的值的第二子集的位置相同的位置处并且以相同顺序的那些值。因此,当比较寄存器104a和104b的对应通道时,寄存器104b中的值可以用作寄存器104a中的值的掩码。
框608包括利用单个指令基于第二子集中的值将整数值从第一寄存器输出到索引向量中。例如,参考图7A,处理器106(图1)可以利用单个AVX2 SIMD指令(输出操作730)将每个整数值从寄存器104a输出到第三向量740中,其中,寄存器104b的相应通道保持指示过滤器通过的选择字节向量518的值,而不将每个整数值从寄存器104a输出到第三向量740中,其中,寄存器104b的相应通道保持指示过滤器未通过的选择字节向量518的值。在一些实施方式中,这样的操作可以是寄存器104a和104b的对应通道之间(例如,来自加载到寄存器104a的第二向量712的整数值与来自加载到寄存器104b的选择字节向量518的对应值之间)的AND操作。第三向量740可以被称为“选择索引向量”,并且可以指示保持指示过滤器通过的值的选择字节向量518的行的序号位置。
框610包括将第三向量的整数值与第一列向量的索引匹配。例如,参考图7B,处理器106(图1)可以利用AVX2 SIMD指令将第三向量740的整数值与第一列向量512的索引进行比较。
框612包括基于匹配,检索并解码第一列向量的编码值。例如,参考图7B,处理器106(图1)可以利用AVX2 SIMD指令来执行检索或聚合操作752,该检索或聚合操作752检索存储在列向量512内与选择索引向量740的整数值匹配的索引处的列向量512的编码值。这些检索到的编码值可以直接加载到寄存器104a至104n中的一个寄存器的对应通道中。处理器106可以通过在适当的编码字典中查找映射到检索到的编码值的解码值来对检索到的编码值执行解码操作754以生成解码的列向量760。在一些实施方式中,这样的解码操作可以利用AVX2 SIMD指令来同时对多个检索到的编码值进行操作。
聚合选择有效地组合位解压缩和去除编码的列向量的过滤出的行。针对表220的查询250为其定义“按…分组”参数的每一列222和针对表220的查询250为其定义聚合参数的每一列222,可以重复至少框610。
通过特殊组分配进行选择
通过特殊组分配进行选择将与此类型选择之后的“按…分组”聚合结合使用。通过特殊组分配进行选择是可以被视为在处理流水线中的选择操作的部分之前推送分组和聚合的优化。
以下参考图8和图9描述通过特殊组分配进行选择,图8示出了根据一些实施方式的用于针对查询250执行通过特殊组分配进行选择的过程,图9是示出由图8描述的某些数据向量、寄存器和操作的框图。
尽管结合图8描述了某些步骤或动作,但是用于针对查询250执行通过特殊组分配进行选择的过程可以包括少于所描述的所有步骤和/或所描述的步骤的附加或替代步骤。
框802包括将位添加到第二列向量中的编码值,查询通过该第二列向量指示结果将被分组,从而生成第二列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度。相同的长度可以是一个字节、两个字节、四个字节或八个字节。这样的编码值可以被视为组ID,因为每个不同的编码值表示不同的条目,通过该条目可以对结果进行分组。例如,查询250(图2)可以包括具有编码值的第二列向量的指示,结果通过该编码值被分组。查询250中的这种指示可以具有一般形式“按…分组”,之后是表220的一个或多个列222的标识符,例如“州”。参考图9,第二列向量910的编码值不必以全字节长度(例如,如图9所示的3位)编码。因此,为了确保寄存器104a至104n(参见图1)的最大使用,并且为了确保第二列向量910的编码值各自完全适合于给定寄存器104a,处理器106(图1)可以利用解压缩操作514将第二列向量910的编码值解压缩到1字节、2字节、4字节或8字节的下一最大大小,以生成解压缩的编码值的对应第二列向量916。
框804包括将值的第一子集加载到第一寄存器的相应通道中,第一子集包括第二列向量的解压缩的编码值。例如,参考图9,处理器106(图1)可以使用加载操作522将现在具有全字节长度的解压缩的编码值的第一子集从解压缩的第二列向量916加载到寄存器104a的相应通道中。
框806包括将值的第二子集加载到第二寄存器的相应通道中,第二子集包括对应于值的第一子集的第一向量的值。例如,参考图9,处理器106(图1)可以执行加载操作524以将选择字节向量518的值的第二子集加载到寄存器104b的相应通道中。与解压缩的编码值被加载到寄存器104a中一样,选择字节向量518的相同数量的值被加载到寄存器104b中,并且按照相同的顺序。
框808包括利用单个指令将第一寄存器的对应于第二寄存器的包括未通过过滤器的指示的通道的通道中的解压缩的编码值更新为常数值,从而生成更新的第二列向量。例如,参考图9,处理器106(图1)可以利用单个AVX2 SIMD指令(更新操作930)将寄存器104a的对应于寄存器104b的包括未通过过滤器的指示(例如,0x00)的通道的通道中的解压缩的编码值更新为常数值(例如,0x04),从而生成更新的第二列向量940。在一些实施方式中,常数值可以是解压缩的第二列向量916的第一未使用的值(例如,0x04在图9中示出为第一未使用的值)。然而,也可以利用解压缩的第二列向量916的任何未使用的值。这样的更新操作可以是例如寄存器104a和104b的对应通道之间(例如,来自加载到寄存器104a的解压缩的第二列向量916的解压缩的编码值与来自加载到寄存器104b的选择字节向量918的对应值之间)的NOT AND操作。
框810包括利用更新的第二列向量对列存储表执行查询,从而生成查询的结果,该结果包括除了对应于常数值的组之外的所有组的结果。例如,参考图9,处理器106(图1)可以利用现在包括更新的行中的常数值的更新的第二列向量940对列存储表220执行查询250,而不考虑由查询250定义的过滤器。因此,通过更新第二列向量940中由查询250定义的未通过过滤器的行的条目,不合格的行被有效地分组到常数值的组中,并且可以在输出查询250的结果之前丢弃而无需完全处理过滤器。执行查询可以包括执行如由查询250定义的任何“按…分组”和任何“聚合”操作。
通过压缩进行选择、聚合选择以及通过特殊组分配进行选择的比较
通常,聚合选择将最适合于具有低选择性的过滤器(其中,表220的批次230中的相对较小比例的行通过或满足查询250的过滤器的条件),通过压缩进行选择将最适合于具有中等选择性的过滤器,并且通过特殊组分配进行选择将最适合于具有接近1的选择性的过滤器(其中,表220的批次230中的几乎所有行通过或满足过滤器或查询250的条件)。
针对所有这三种方法运行查询的每行成本可以分别表示为ccompact、cgather和cspecial。如果聚合结果(例如,计算和、最小值、最大值、平均值、标准偏差等)的成本被表示为caggregate,并且过滤器选择性被表示为α,则当α<ccompact/cgather时,聚合选择将优于通过压缩进行选择,并且当α<(cspecial+caggregate-ccompact)/caggregate时,通过压缩进行选择将优于通过特殊组分配进行选择。因此,针对编码数据的每个位宽度,存在固定的过滤器选择性,超过该选择性,通过压缩进行选择开始优于聚合选择。例如,已经确定,针对4位宽度,通过压缩进行选择针对≥约2%(至少2%的行通过过滤器)的过滤器选择性优于聚合选择,针对7位宽度,通过压缩进行选择针对≥约4%的过滤器选择性优于聚合选择,针对14位宽度,通过压缩进行选择针对≥约30%的过滤器选择性优于聚合选择,以及针对21位宽度,通过压缩进行选择针对≥约38%的过滤器选择性优于聚合选择。
基于按和分组的分类
使用SIMD的基于按和分组的分类操作基于结果如何在查询250中被分组的指示将行的每个批次230内的行索引分类到组中。
下面参考图10以及图11A和图11B描述基于按和分组的分类,图10示出了根据一些实施方式用于针对查询250执行基于按和分组的分类的过程,图11A和图11B示出了作为图10的过程的主题的某些数据向量、寄存器和操作。
尽管结合图10描述了某些步骤或动作,但是用于针对查询250执行基于按和分组的分类的过程可以包括少于所描述的所有步骤和/或所描述的步骤的附加或替代步骤。
框1002包括针对第二列向量中的每个唯一编码值,确定第二列向量中的唯一编码值的计数。例如,查询250(图2)可以包括具有编码值的第二列向量的指示,结果通过该编码值被分组。查询250中的这种指示可以具有一般形式“按…分组”,之后是表220的一个或多个列222的指示,例如“州”。参考图11A,处理器106可以被配置为对第二列向量910执行按计数分组(*)操作1112,其返回第二列向量910中每个唯一编码值的相应计数1114。在一些实施方式中,具有发生在第二列向量910的连续行中的相同编码值可以导致用于跟踪由第二列向量910指示的每个组的计数的单个计数器中的写入冲突。因此,在一些实施方式中,为了避免这种写入冲突,可以利用两个或更多个计数器来跟踪每个组的计数,并且可以在计数过程结束时将来自给定组的每个计数器的部分和相加在一起。
框1004包括生成多个子阵列,每个子阵列与第二列向量中的不同唯一编码值相关联,并且具有基于对应于唯一编码值的计数的长度。例如,参考图11,处理器106(图1)可以生成多个子阵列1120、1122、1124、1126。每个子阵列1120、1122、1124、1126具有基于第二列向量910中对应唯一编码值的相应计数1114的长度。
框1006包括针对第二列向量的每一行,基于该行处的编码值,将该行的指示插入多个子阵列的一个子阵列中。例如,参考图11A,处理器106(图1)可以通过基于行中的编码值将行的指示插入多个子阵列1120、1122、1124、1126中的一个子阵列中来对第二列向量910的每个索引执行插入操作1116。
框1008包括级联多个子阵列中的每一个子阵列以生成第一阵列。例如,参考图11A,处理器106(图1)可以执行级联操作1118以级联多个子阵列1120、1122、1124、1126中的每一个子阵列以生成用于第二列向量的分类行的第一阵列1130。第一阵列1130包含落入该组的批次230内的所有行的指示。利用这样的阵列,然后可以计算在一个或多个列的行处的编码值的和。在一些实施方式中,框1008的级联步骤可以是任选的。例如,这样的级联可以替代地包括逻辑操作,在该逻辑操作中,可以物理上彼此相邻地存储在内存中的多个子阵列1120、1122、1124、1126实际上未级联以形成第一阵列1130,而是可选地一起解释为第一阵列1130。
框1010包括针对第一阵列的子阵列中的一个子阵列,将子阵列中的行的指示与第一列向量的行匹配。例如,参考图11B,处理器106(图1)可以被配置为执行匹配操作1152,该匹配操作1152将第一阵列1130的子阵列1120中的行的指示与第一列向量512的行匹配。
框1012包括基于该匹配,检索并解码第一列向量的编码值。例如,参考图11B,处理器106(图1)可以被配置为基于框1010处的匹配,经由检索操作1154检索第一列向量512的编码值,并经由解码操作1156解码第一列向量512的编码值。因此,处理器106可以检索位于与第一阵列1130的子阵列1120中的行的指示匹配的第一列向量512的行处的编码值。处理器106可以利用编码值来执行对应于编码值的编码字典中的查找,并返回解码值1160。在一些实施方式中,框1012的解码部分可以是任选的。例如,在一些情况下,针对具有足够小以适合于64位寄存器内的编码值的数字列,例如,在利用可以唯一地表示小数字中的每一个小数字的最小数量的位来编码小整数范围(例如,0至10)的情况下,解码可能不是必需的,因为编码值可以仍在不解码的情况下被添加到更大的、扩展的字节级长度。例如,在利用4位编码数字0至10的情况下(例如,整数1被表示为0001,整数2被表示为0010,整数3被表示为0011等),编码的4位值可以在不解码的情况下被添加到更大的、扩展的字节级大小。在这样的实施方式中,框1012可以包括基于该匹配从第一列向量检索编码值。
框1014包括将第一列向量的解码值加载到第一寄存器的相应通道中。例如,参考图11B,处理器106可以被配置为将第一列向量512的解码值1160加载到寄存器104a的相应通道中。尽管仅示出了两个值被加载到寄存器104a中,但是这仅是示例,并且任何数量的合格值可以被加载到寄存器104a中。在不执行框1012的解码部分的实施方式中,如上所述,框1014可以替代地利用第一列向量的编码值来操作。
框1016包括利用单个指令将第一寄存器的每个通道中的解码值添加到其他寄存器中的对应通道中,从而在其他寄存器的对应通道中生成来自第一寄存器的对应通道的解码值的和。例如,参考图11B,处理器106可以被配置为利用单个指令(例如,SIMD指令)将寄存器104a的每个通道中的解码值添加到寄存器104f中的对应通道中,从而在寄存器104f的对应通道中生成来自寄存器104a的对应通道的解码值的和。可以重复框1014的加载步骤和框1016的操作,直到已经处理了特定列和特定组的所有值。然后,处理器106可以通过利用求和操作1158(有时也被称为“减小”)来确定如查询250所示的针对组的和1170,该求和操作1158将寄存器104f的通道中的所有运行和相加以获得寄存器104f的通道的和1170。和1170可以包括由查询250指示的和。
处理器106可以针对每一列和每一组执行该匹配、检索、解码、加载和求和操作,其中由查询250指示和。
寄存器内按计数分组和按和分组
在一些实施方式中,计算具有分组的聚合可以基于将中间结果完全保持在CPU寄存器中而不是内存120中。可以利用一些这样的实施方式,其中,将通过其对结果进行分组的组数为大约32或更少。每个聚合(和、最小值、最大值等)可以单独处理。
以下参考图12和图13描述寄存器内按计数分组和按和分组,图12示出了根据一些实施方式的用于针对查询250执行寄存器内按计数分组和按和分组的过程,图13是示出由图12描述的某些数据向量、寄存器和操作的框图。
尽管结合图12描述了某些步骤或动作,但是用于针对查询250执行寄存器内按计数分组和按和分组的过程可以包括少于所描述的所有步骤和/或所描述的步骤的附加或替代步骤。
查询250还包括具有编码值的第二列向量910的指示,查询250的结果通过该编码值被分组。作为示例,假设查询250将结果定义为对应于每个组的列的行数,如由列内的1字节编码值所标识的(例如,按计数分组)。
框1202包括将位添加到第二列向量中的编码值,从而生成第二列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度。尽管设想了任何其他全字节长度,但是相同的长度可以是一个字节。这样的编码值可以被认为是组ID,因为每个不同的编码值表示不同的条目,结果可以通过该条目分组。例如,查询250(图2)可以包括具有编码值的第二列向量910的指示,结果通过该编码值被分组。查询250中的这种指示可以具有一般形式“按…分组”,之后是表220的一个或多个列222的标识符,例如“州”。参考图13,第二列向量910的编码值不必以全字节长度(例如,如图13所示的3位)编码。因此,为了确保寄存器104a(参见图1)的最大使用,并且为了确保第二列向量910的编码值中各自完全适合于给定寄存器104a,处理器106(图1)可以利用解压缩操作514将第二列向量910的编码值解压缩到1字节的下一最大大小,以生成解压缩的编码值的对应第二列向量916。
框1204包括将值的第一子集中的每个值加载到第一寄存器的相应通道中,第一子集包括第二列向量的解压缩的编码值。例如,参考图13,处理器106(图1)可以利用加载操作522将现在具有全字节长度的解压缩的编码值的第一子集中的每个值从解压缩的第二列向量916加载到寄存器104a的相应通道中。
框1206包括针对第一寄存器的每个通道,初始化多个其他寄存器中的每一个其他寄存器的对应通道中的第一计数器,使得多个其他寄存器中的每一个其他寄存器保持用于第一寄存器的每个通道的相应的第一计数器,并且每个其他寄存器中的所有第一计数器对应于第二列向量的唯一解压缩的编码值。例如,参考图13,处理器126(图1)可以初始化多个寄存器104b、104c、104d中的每一个寄存器的对应通道中的部分计数器,使得多个寄存器104b至104e中的每一个寄存器保持用于第一寄存器104a的每个通道的相应的部分计数器,并且寄存器104b、104c、104d、104e中的所有部分计数器对应于第二列向量916的唯一解压缩的编码值。例如,寄存器104b可以保持用于组“0”的部分计数器,寄存器104c可以保持用于组“1”的部分计数器,寄存器104d可以保持用于组“2”的部分计数器,并且寄存器104e可以保持用于组“3”的部分计数器。尽管仅示出了4个寄存器104b至104e,但是这样的实现将具有N-1个寄存器,其保持用于列向量916中的N个唯一解压缩的编码值中的N-1个唯一解压缩的编码值的部分计数器。如以下将更详细描述的,可以利用比组N少一个的寄存器,因为最后的组计数可以通过从第二列向量916中的总行数中减去所有其他组计数来获得。
框1208包括针对第一寄存器的每个通道,递增多个其他寄存器中的一个寄存器的对应通道中的对应于第一寄存器的通道中的解压缩的编码值的第一计数器。例如,参考图13,处理器126(图1)可以针对寄存器104a逐通道地进行,以递增对应于第一寄存器104a的通道中的解压缩的编码值的多个寄存器104b至104e中的一个寄存器的对应通道中的部分计数器。例如,从右向左工作,寄存器104a的第一通道保持解压缩的编码值“0”。因此,保持用于组“0”的部分计数器的寄存器104b的对应通道中的部分计数器递增,例如,其值被改变为0xFF或1。寄存器104a的第二通道也保持解压缩的编码值“0”。因此,寄存器104b的对应通道中的部分计数器递增,例如,其值改变为0xFF或1。寄存器104a的第三通道和第五通道保持解压缩的编码值“1”。因此,保持用于组“1”的计数器的寄存器104c的对应通道中的部分计数器递增,例如,其值改变为0xFF或1。寄存器104a的第四通道和第七通道保持解压缩的编码值“2”。因此,保持用于组“2”的计数器的寄存器104d的对应通道中的部分计数器递增,例如,其值改变为0xFF或1。如可以理解的,每次寄存器104a被加载来自第二列向量916的解压缩的编码值的后续集合时,针对寄存器104a的对应通道中的任何对应的解压缩的编码值,将仅递增跨寄存器104b至104d的一个通道。
框1210包括针对多个其他寄存器中的每一个其他寄存器,对该其他寄存器中的第一计数器求和,并且将该和添加到用于对应的唯一解压缩的编码值的对应的第二计数器。例如,参考图13,处理器126(图1)可以被配置为执行求和操作1322,该求和操作1322针对每个寄存器104b至104d,例如对特定寄存器104b中的所有部分计数器求和,并且将结果添加到第二阵列1340中的对应总计数器。如图所示,寄存器104b具有值为1的两个通道(第一通道和第二通道),其可以被求和并且被添加到第二阵列1340中的对应总计数器C0。类似地,寄存器104c和104d中的每一个寄存器的两个值为1的通道可以被求和并且分别被添加到第二阵列1340中的对应总计数器C1和C2。因此,寄存器104b至104d可以保持用于在寄存器104a的每次加载中出现唯一解压缩的编码值的部分计数器,而第二阵列1340保持用于在本节中描述的寄存器104a的所有加载中出现唯一解压缩的编码值的总计数器。
在寄存器104b至104d中的部分计数器的递增值为0xFF的实施方式中,这种求和操作可以包括求反该递增值0xFF(因为0xFF意味着带符号的8位整数减去1)并且将每个值合并到第二阵列1340中的计数器中。在一些实施方式中,框1210的动作可以利用寄存器104a至104d的单组SIMD指令来执行。
框1212包括通过从第二列向量的总行数中减去对应的第二计数器来确定第三计数器,第三计数器值对应于第二列向量中的唯一解压缩的编码值的最后一个。例如,参考图13,处理器126(图1)可以被配置为通过从第二列向量916的总行数中减去第二阵列中的所有对应的总计数器C0、C1、C2来确定第二阵列1340中的最后的总计数器C3。最后的总计数器值C3对应于第二列向量916中的唯一解压缩的编码值中的最后一个,例如值“3”。
按和多聚合分组
在一些实施方式中,查询250可能需要确定跨多个列的多个和。尽管先前的实施方式垂直地利用数据级并行性,但是利用该按和多聚合分组处理的实施方式可以水平地利用数据级并行性,这意味着针对同一输入行跨多个列的多个聚合而不是针对同一聚合列的多个输入行求和。在一些实施方式中,针对多个和的按时间行聚合可以比按时间列聚合更快。可以通过将针对同一行的多个和的输入加载到一个寄存器中,并且针对所有这些输入仅执行一组加载-添加-存储指令来获得进一步的改进。如前所述,列存储表将值按列存储在内存中。因此,来自待求和的列的值经由矩阵转置来重组,如以下更详细地描述的。
以下参考图14和图15描述按和多聚合分组,图14示出了根据一些实施方式的用于针对查询250执行按和多聚合分组的过程,图15是示出由图14描述的某些数据向量、寄存器和操作的框图。
尽管结合图14描述了某些步骤或动作,但是用于针对查询250执行按和多聚合分组的过程可以包括少于所描述的所有步骤和/或所描述的步骤的附加或替代步骤。
参考图15,查询250(图2)可以包括多个列向量1520、1522、1524、1526、1528(参见图15)的指示,每个列向量具有要被求和的编码值,并且查询的结果通过该编码值被分组。列向量1520、1522、1524、1526的编码值未在图15中示出,并且为了简单起见,替代地被指示为A1至A4、B1至B4、C1至C4、D1至D4和E1至E4。
现在参考图14,框1402包括针对多个列向量的每个列向量,将列向量的编码值的第一子集加载到相应寄存器的相应通道中,从而形成包括相应寄存器的第三阵列。例如,参考图15,处理器106(图1)可以被配置为执行加载操作1512,该加载操作1512将编码值A1至A4、B1至B4、C1至C4、D1至D4和E1至E4的相应第一子集从相应列向量1520、1522、1524、1526、1528加载到相应寄存器104a、104b、104c、104d、104e中。因此,如图15的中间所示,第三阵列1530包括寄存器104a至104e中的编码值。作为非限制性示例,编码值A1至A4具有64位(8字节)的长度,编码值B1至B4和E1至E4具有32位(4字节)的长度,编码值C1至C4和D1至D4具有16位(2字节)的长度,并且寄存器104a至104e是256位(32字节)寄存器。在一些实施方式中,加载操作1512可以包括AVX2 SIMD指令,该AVX2 SIMD指令允许单个指令同时收集多行数据并将其加载到寄存器104a至104e中。
框1404包括将位添加到相应寄存器的每一个寄存器中的编码值,从而生成多个列向量的解压缩的编码值,每个解压缩的编码值具有第一长度或第二长度。有效地将列转换为行的挑战性方面是,通常,可以有不同数量的输入列,并且它们可以存储不同字节大小的元素。模板功能的组合可以用于创建专用SIMD实现,其中,处理器106(图1)可以被配置为通过添加填充零来将编码值A1至A4、B1至B4、C1至C4、D1至D4和E1至E4解压缩为4字节长度(例如,第一长度)或8字节长度(例如,第二长度),使得利用解压缩操作1514将1字节长度或2字节长度的编码值解压缩为4字节,并且将具有较大长度的编码值解压缩为8字节。这确保可以使用例如寄存器104a至104e的SIMD通道中的64位加法对多达65,536行求和,而无需针对多达4字节的输入值的溢出。这样的实施方式支持输入列的任意数量和大小的组合,只要在扩展之后,用于单行的所有元素可以适合于256位SIMD寄存器,其中,32位扩展元素是32位对齐的,并且64位元素是64位对齐的。
框1406包括转置第三阵列,使得先前加载到单个相应寄存器中的解压缩的编码值现在加载到相应寄存器的每一个寄存器的对应通道中。例如,参考图15,处理器106(图1)可以被配置为执行转置操作1516,其可以重新对齐寄存器104a至104e内的所有条目,使得先前加载到单个相应寄存器(例如104a)中的解压缩的编码值(例如A1至A4)现在加载到相应寄存器104a至104d的对应通道中。例如,解压缩的编码值C1至C4被示出为仅从寄存器104c中的通道转置到寄存器104a至104d中的每一个寄存器的第一32位通道;解压缩的编码值D1至D4被示出为仅从寄存器104d中的通道转置到寄存器104a至104d中的每一个寄存器的第二32位通道;并且E1至E4被示出为从寄存器104a、104b和104e中的通道转置到寄存器104a至104d中的每一个寄存器的相应64位通道。
框1408包括针对每个相应寄存器,利用单个指令将相应寄存器的每个通道中的解压缩的编码值添加到其他寄存器中的对应通道,从而在其他寄存器的对应通道中生成来自每个相应寄存器的对应通道的解压缩的编码值的和。例如,参考图15,处理器106(图1)可以针对每个寄存器104a至104d利用单个AVX2 SIMD指令将相应寄存器的每个通道中的解压缩的编码值添加到其他寄存器104f中的对应通道。在另一示例中,一个指令可以将C1、D1、A1、B1和C1添加到寄存器104f中的相应值CT、DT、AT、BT和ET。针对第一加法,CT、DT、AT、BT和ET中的每一个可以具有零值。另一指令可以将C2、D2、A2、B2和C2添加到寄存器104f中的相应值CT、DT、AT、BT和ET。另一指令可以将C3、D3、A3、B3和C3添加到寄存器104f中的相应值CT、DT、AT、BT和ET,并且又一指令可以将C4、D4、A4、B4和C4添加到寄存器104f中的相应值CT、DT、AT、BT和ET。因此,来自每个相应寄存器104a至104d的对应通道的解压缩的编码值的运行和(例如,CT、DT、AT、BT和ET)被保持在寄存器104f的对应通道中。包括原始加载的寄存器104a至104e的阵列1530的这种转置允许来自多个列的编码条目被重组到寄存器中,就像它们是单个列内的原始条目,允许它们在单个操作中被求和。
使用位级逻辑按计数(*)快速分组
还可以提高对具有编码值的位压缩列按计数(*)分组的性能,查询的结果通过该编码值被分组。在组的数量(例如,唯一编码值的数量,以及因此编码值的位长度)相对较小的情况下,这样的处理可能特别有用。以下参考图16和图17描述这种使用位级逻辑按计数(*)快速分组,图16示出了根据一些实施方式的用于针对查询250执行使用位级逻辑按计数(*)快速分组的过程,图17是示出由图16描述的某些数据向量、寄存器和操作的框图。
尽管结合图16描述了某些步骤或动作,但是用于针对查询使用位级逻辑按计数(*)快速分组的过程250可以包括少于所描述的所有步骤和/或所描述的步骤的附加或替代步骤。
参考图17,查询250(图2)可以包括具有编码值的第二列向量910的指示,查询250的结果通过编码值被分组。
参考图16,框1602包括将值的第一子集中的每个值加载到多个寄存器中,第一子集包括第二列向量的编码值。例如,参考图17,处理器106(图1)可以被配置为执行加载操作522,该加载操作522将编码值的相应第一子集从第二列向量910加载到寄存器104a、104b和104c中。在一些实施方式中,寄存器104a至104c是256位寄存器,尽管为了便于说明仅示出具有8位。因此,在一些实施方式中,值的第一子集可以包括来自第二列向量910的256个值,尽管为了便于说明仅示出了8个。第二列向量910被示出为包括3位编码值。因此,值的第一子集可以被加载到与编码值中的位数相同数量的寄存器中,例如,在该示例中为3。
框1604包括分离并重新加载多个寄存器中的编码值的位,使得每个编码值的第i位存储在多个寄存器中的第i寄存器中。例如,处理器106(图1)可以被配置为执行分离并重新加载操作1724,其中,每个编码值的第一位(仅为了易于参考在图16中以粗体示出)可以被分离并加载到寄存器104a,每个编码值的第二位可以被分离并加载到寄存器104b,并且每个编码值的第三位可以被分离并加载到寄存器104c,如由虚线圆和箭头部分所示。尽管来自第二列向量910的编码值的位可以以任何顺序被分离并重新加载到寄存器104a至104c中,但是该顺序针对每个寄存器104a至104c必须是相同的。
框1606包括针对第二列向量的唯一编码值的至少一些唯一编码值,将多个寄存器中的每个编码值的位与唯一编码值的对应位进行比较。
框1608包括基于该比较,针对所有位与唯一编码值匹配的每个编码值设置其他位。例如,参考图17,处理器106(图1)可以被配置为执行操作1726,该操作1726将寄存器104a至104c中的每一个寄存器中用于每个编码值的位与唯一编码值的对应位进行比较,并且然后基于该比较,生成具有所有位与唯一编码值匹配的每个编码值的对应位设置的第四向量。例如,针对唯一编码值“000”,处理器106可以被配置为利用比较函数Z=NOT(A OR BOR C)来生成位向量1712,其中,针对寄存器104a、104b、104c中的每个位,A、B和C分别是寄存器104a、104b、104c中的相应第i位。类似地,针对唯一编码值“010”,处理器106可以被配置为利用比较函数Z=NOT(A OR B)AND C来生成位向量1716。
框1610包括针对每个其他位设置,递增第三阵列中用于唯一编码值的第四计数器。例如,参考图17,处理器106(图1)可以被配置为基于具有两个位设置的每个相应位向量1712、1714、1716对总计数器C0、C1和C2中的每个计数器执行两次递增操作1728。
框1612包括通过从第二列向量的总行数中减去第三阵列中的第四计数器来确定第三阵列中的第五计数器值,第五计数器对应于第二列向量中的唯一编码值的最后一个。例如,参考图17,一旦已经通过框1610处理了第二列向量912的所有编码值,则处理器106(图1)可以被配置为从第二列向量912的总行数中减去总计数C0、C1和C2,以确定对应于第二列向量912中的最终唯一编码值的总计数C3
结合图16和图17描述的过程也可以应用于过滤器,其中,这种过滤器是类似于位向量1712、1714、1716的位向量的形式。例如,过滤器位向量可以与在图17中的操作1724之后所示的寄存器104a至104c中的分离和重新加载的位进行与运算。这可以等效于将所有过滤的行分配给组零,并且在更新计数器时跳过该组,如先前结合框1610所描述的。因此,该组可以被选择作为跳过的组。可以通过从第二列向量910中的总行数中减去通过过滤器的行数(例如,在过滤器位向量中设置的位数)来确定组零或过滤的行的计数。
结合图16和图17描述的过程也可以应用于多个分组列,只要它们都利用具有相对较小的位宽度的位压缩,并且所有位宽度的和也相对较小(例如,5位)。例如,在这样的实施方式中,查询250(图2)可以包括具有编码值的多个列向量(例如,两个或更多个)的指示,查询250的结果通过该编码值被分组。在这样的实施方式中,可以为每个列向量生成单独的一组位向量(类似于位向量1712、1714、1716),查询250通过该列向量指示结果被分组。然后,可以利用针对多个分组列向量的所有位向量组的并集来执行框1610和1612,就好像所有位都来自单个列一样。逻辑上,这对应于级联来自同一行的所有分组列的值的位。
组ID映射
在一些实施方式中,查询可以包括需要重复评估以便返回结果的一个或多个表达式。这样的查询的示例可以是:
选择substr(1,3,s),计数(*)
从t
按substr(1,3,s)分组
这样的查询要求跨表“t”的列“s”中的所有条目的第一至第三字符的子字符串,并且按唯一子字符串对结果进行分组。因此,为了返回结果,必须评估表达式“substr(1,3,s)”。不是每次都完全评估表达式,而是可以采用允许查找针对特定表达式的先前映射的评估的两级字典。在表达式的输入重复情况下,与每次遇到表达式时重新评估表达式相比,这样的查找可以节省相当多的处理周期。例如,考虑下面的表7中的示例列s和表8中的表达式“substr(1,3,s)”的评估结果。
当针对列“s”评估表达式“substr(1,3,s)”时,可以生成第一映射或散列表,使得每次遇到来自列“s”的新输入时,该输入被映射到第一表中的该条目的编码值,如下面的表9所示。同样地,每次生成表达式的输出时,该输出被映射到第二表中的该输出的编码值,如表10所示。类似地,第一表的编码值然后可以进一步被映射到第二表的编码值,如表11所示。
Figure BDA0002612325740000311
Figure BDA0002612325740000321
表7
Figure DA00026123257435481
表8
Figure BDA0002612325740000322
表9
Figure BDA0002612325740000323
表10
Figure BDA0002612325740000331
表11
因此,当评估列“s”的每一行时,处理器106(图1)可以首先确定列“s”中出现的字符串是否已经被映射到第一映射中的编码值。如果是,处理器106可以替代地使用来自第一映射的对应编码值(例如,“00”)来利用第三映射中的映射对应关系来查找第二映射中的输出值,而不是重新评估表达式“substr(1,3,s)”。以这种方式,通过使用该多级字典,可以在比每次重新评估表达式少得多的CPU周期内评估表达式。
在结果按多列分组的又一实施方式中,根据以上讨论的任何方法,用于对多个列中的每一列进行编码的散列表可以被合并到单个散列表中并且用于对结果进行分组,如同结果仅按单个列分组一样。例如,再调用表5,并且假设以下查询:
选择划分,州,sum(sale_amt)
从table_of_sales
按划分、州分组
该查询从表table_of_sales中要求sale_amt的和,并且要求将所得的和按划分和州分组,因此,需要基于“划分”列和“州”列两者中的条目按操作分组。
根据一些实施方式,根据先前描述的任何过程,代替通过列单独地由每个组评估查询,可以将“划分”和“州”列的对应行中的编码值级联以形成单个编码列,输出结果可以通过该单个编码列被分组。
因此,可以生成散列表,该散列表将每个级联的编码条目映射到每个编码列值的解码值,如下面的表12所示。表12的散列表的关键字具有位数,该位数是原始编码的“划分”和“州”列的位数之和,例如,1位+3位=4位。因此,由于分类或分组操作对编码值的级联列进行操作,将每个级联的编码值视为好像是单个编码值,因此按编码值的级联列分组允许避免通过按过程分组的多次迭代。这大大减少了生成查询的结果所需的CPU周期数。
Figure BDA0002612325740000341
表12
在解释本申请时,应当理解,词语“包括”并不排除除了所列出的那些元件或动作之外的其他元件或动作的存在,并且在元件之前的词语“一个(a)”或“一个(an)”并不排除多个这样的元件的存在。任何参考符号并不限制其所指实体的范围。几个“装置”可以由相同的项目或硬件或软件实现的结构或功能表示。所公开的元件中的每一个元件可以包括硬件部分(例如,包括离散和集成电子电路)和软件部分(例如,计算机编程、指令或代码)的组合。硬件部分可以包括一个或多个处理器和/或内存,并且软件部分可以存储在非暂时性计算机可读介质上,并且可以被配置为使这样的一个或多个处理器执行所公开的元件中的一个或多个元件的一些或全部功能。硬件部分可以包括模拟部分和数字部分中的一个或两者。除非另有特别说明,否则所公开的装置或其部分中的任何一个可以组合在一起或分离成另外的部分。除非特别指明,否则不旨在要求具体的动作顺序。术语“多个”元件包括所要求保护的元件中的两个或更多个元件,并且并不意味着元件数量的任何特定范围;即,多个元件可以少至两个元件,并且可以包括不可测量数量的元件。

Claims (24)

1.一种用于使处理器对编码值的列存储表执行查询的方法,所述方法包括配置所述处理器以:
接收所述查询,所述查询包括要应用于所述编码值的至少第一列向量的过滤器;
处理针对所述第一列向量中的所述编码值中的每一个编码值的所述查询,从而生成指示通过所述过滤器或未通过所述过滤器的相应编码值的第一向量;
相对于所述第一列向量中的所述编码值,从所述第一向量确定通过所述过滤器的编码值和未通过所述过滤器的编码值的指示符;
确定所述第一列向量中的所述编码值的位长度;并且
针对所述第一列向量中的所述编码值的至少一个子集,基于所述指示符和所确定的所述编码值的位长度,从多个算法中选择用于处理所述查询的算法。
2.根据权利要求1所述的方法,其中,所选择的算法使所述处理器:
将位添加到所述第一列向量中的所述编码值的至少所述子集中的每一个子集中,从而生成所述第一列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度;
将值的第一子集加载到第一寄存器的相应通道中,所述第一子集包括所述解压缩的编码值;
将值的第二子集加载到第二寄存器的相应通道中,所述第二子集包括所述第一向量的对应于值的所述第一子集的值;并且
利用单个指令基于所述第二子集中的值将通过所述过滤器的解压缩的编码值从所述第一寄存器输出到过滤的列向量中。
3.根据权利要求1所述的方法,其中,所选择的算法使所述处理器:
生成包括多个连续整数值的第二向量;
将值的第一子集加载到第一寄存器的相应通道中,所述第一子集包括所述第二向量的所述连续整数值;
将值的第二子集加载到第二寄存器的相应通道中,所述第二子集包括所述第一向量的值;
利用单个指令基于所述第二子集中的值将整数值从所述第一寄存器输出到第三向量中;
将所述第三向量的所述整数值与所述第一列向量的索引匹配;并且
基于所述匹配,检索并解码所述第一列向量的编码值。
4.根据权利要求1所述的方法,其中,所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
将位添加到所述第二列向量中的编码值,从而生成所述第二列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度;
将值的第一子集加载到第一寄存器的相应通道中,所述第一子集包括所述第二列向量的所述解压缩的编码值;
将值的第二子集加载到第二寄存器的相应通道中,所述第二子集包括所述第一向量的对应于值的所述第一子集的值;
利用单个指令将所述第一寄存器的对应于所述第二寄存器的包括未通过所述过滤器的指示的通道的通道中的解压缩的编码值更新为常数值,从而生成更新的第二列向量;并且
利用所更新的第二列向量对所述列存储表执行所述查询,从而生成所述查询的结果,所述结果包括除了对应于所述常数值的组之外的所有组的结果。
5.根据权利要求1所述的方法,其中,所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
针对所述第二列向量中的每个唯一编码值,确定所述第二列向量中的所述唯一编码值的计数;
生成多个子阵列,每个子阵列与所述第二列向量中的不同唯一编码值相关联,并且具有基于对应于所述唯一编码值的所述计数的长度;
针对所述第二列向量的每一行,基于所述行处的所述编码值,将所述行的指示插入所述多个子阵列中的一个子阵列中;
级联所述多个子阵列中的每一个子阵列以生成第一阵列;
针对所述第一阵列的所述子阵列中的一个子阵列:
将所述子阵列中的行的指示与所述第一列向量的行匹配;
基于所述匹配,检索并解码所述第一列向量的编码值;并且
将所述第一列向量的解码值加载到第一寄存器的相应通道中;
利用单个指令将所述第一寄存器的每个通道中的所述解码值添加到其他寄存器中的对应通道中,从而在所述其他寄存器的对应通道中生成来自所述第一寄存器的对应通道的解码值的和。
6.根据权利要求1所述的方法,其中,所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
将位添加到所述第二列向量中的编码值,从而生成所述第二列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度;
将值的第一子集中的每个值加载到第一寄存器的相应通道中,所述第一子集包括所述第二列向量的所述解压缩的编码值;
针对所述第一寄存器的每个通道,初始化多个其他寄存器中的每一个其他寄存器的对应通道中的第一计数器,使得所述多个其他寄存器中的每一个其他寄存器保持用于所述第一寄存器的每个通道的相应第一计数器,并且每个其他寄存器中的所有第一计数器对应于所述第二列向量的唯一解压缩的编码值;
针对所述第一寄存器的每个通道,递增所述多个其他寄存器中的一个寄存器的对应通道中的对应于所述第一寄存器的通道中的解压缩的编码值的所述第一计数器;
针对所述多个其他寄存器中的每一个其他寄存器,对所述其他寄存器中的第一计数器求和,并且将所述和添加到用于对应的唯一解压缩的编码值的对应的第二计数器;并且
通过从所述第二列向量的总行数中减去所述对应的第二计数器来确定第三计数器,第三计数器值对应于所述第二列向量中的所述唯一解压缩的编码值的最后一个。
7.根据权利要求1所述的方法,其中,所述查询还包括具有编码值的多个列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
针对所述多个列向量的每个列向量,将所述列向量的编码值的第一子集加载到相应寄存器的相应通道中,从而形成包括所述相应寄存器的第三阵列;
将位添加到所述相应寄存器的每一个寄存器中的编码值,从而生成所述多个列向量的解压缩的编码值,每个解压缩的编码值具有第一长度或第二长度;
转置所述第三阵列,使得先前加载到单个相应寄存器中的解压缩的编码值现在加载到所述相应寄存器的对应通道中;并且
针对每个相应寄存器,利用单个指令将所述相应寄存器的每个通道中的解压缩的编码值添加到其他寄存器中的对应通道,从而在所述其他寄存器的对应通道中生成来自每个所述相应寄存器的对应通道的解压缩的编码值的和。
8.根据权利要求1所述的方法,其中,所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
将值的第一子集中的每个值加载到多个寄存器中,所述第一子集包括所述第二列向量的所述编码值;
分离并重新加载所述多个寄存器中的所述编码值的位,使得每个编码值的第i位存储在所述多个寄存器的第i寄存器中;
针对所述第二列向量的唯一编码值的至少一些唯一编码值:
将所述多个寄存器中的每个编码值的位与所述唯一编码值的对应位进行比较;
基于所述比较,针对所有位与所述唯一编码值的位匹配的每个编码值设置其他位;
针对每个其他位设置,递增第三阵列中用于所述唯一编码值的第四计数器;并且
通过从所述第二列向量的总行数中减去所述第三阵列中的第四计数器来确定所述第三阵列中的第五计数器,所述第五计数器对应于所述第二列向量中的所述唯一编码值的最后一个。
9.一种包括代码的非暂时性计算机可读介质,所述代码在被执行时使处理器:
接收查询,所述查询包括要应用于编码值的至少第一列向量的过滤器;
处理针对所述第一列向量中的所述编码值中的每一个编码值的所述查询,从而生成指示通过所述过滤器或未通过所述过滤器的相应编码值的第一向量;
相对于所述第一列向量中的所述编码值,从所述第一向量确定通过所述过滤器的编码值和未通过所述过滤器的编码值的指示符;
确定所述第一列向量中的所述编码值的位长度;并且
针对所述第一列向量中的所述编码值的至少一个子集,基于所述指示符和所确定的所述编码值的位长度,从多个算法中选择用于处理所述查询的算法。
10.根据权利要求9所述的非暂时性计算机可读介质,其中,所选择的算法使所述处理器:
将位添加到所述第一列向量中的所述编码值的至少所述子集中的每一个子集中,从而生成所述第一列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度;
将值的第一子集加载到第一寄存器的相应通道中,所述第一子集包括所述解压缩的编码值;
将值的第二子集加载到第二寄存器的相应通道中,所述第二子集包括所述第一向量的对应于值的所述第一子集的值;并且
利用单个指令基于所述第二子集中的值将通过所述过滤器的解压缩的编码值从所述第一寄存器输出到过滤的列向量中。
11.根据权利要求9所述的非暂时性计算机可读介质,其中,所选择的算法使所述处理器:
生成包括多个连续整数值的第二向量;
将值的第一子集加载到第一寄存器的相应通道中,所述第一子集包括所述第二向量的所述连续整数值;
将值的第二子集加载到第二寄存器的相应通道中,所述第二子集包括所述第一向量的值;
利用单个指令基于所述第二子集中的值将整数值从所述第一寄存器输出到第三向量中;
将所述第三向量的所述整数值与所述第一列向量的索引匹配;并且
基于所述匹配,检索并解码所述第一列向量的编码值。
12.根据权利要求9所述的非暂时性计算机可读介质,其中,所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
将位添加到所述第二列向量中的编码值,从而生成所述第二列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度;
将值的第一子集加载到第一寄存器的相应通道中,所述第一子集包括所述第二列向量的所述解压缩的编码值;
将值的第二子集加载到第二寄存器的相应通道中,所述第二子集包括所述第一向量的对应于值的所述第一子集的值;
利用单个指令将所述第一寄存器的对应于所述第二寄存器的包括未通过所述过滤器的指示的通道的通道中的解压缩的编码值更新为常数值,从而生成更新的第二列向量;并且
利用所更新的第二列向量对列存储表执行所述查询,从而生成所述查询的结果,所述结果包括除了对应于所述常数值的组之外的所有组的结果。
13.根据权利要求9所述的非暂时性计算机可读介质,其中,所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
针对所述第二列向量中的每个唯一编码值,确定所述第二列向量中的所述唯一编码值的计数;
生成多个子阵列,每个子阵列与所述第二列向量中的不同唯一编码值相关联,并且具有基于对应于所述唯一编码值的所述计数的长度;
针对所述第二列向量的每一行,基于所述行处的所述编码值,将所述行的指示插入所述多个子阵列中的一个子阵列中;
级联所述多个子阵列中的每一个子阵列以生成第一阵列;
针对所述第一阵列的所述子阵列中的一个子阵列:
将所述子阵列中的行的指示与所述第一列向量的行匹配;
基于所述匹配,检索并解码所述第一列向量的编码值;并且
将所述第一列向量的解码值加载到第一寄存器的相应通道中;
利用单个指令将所述第一寄存器的每个通道中的所述解码值添加到其他寄存器中的对应通道中,从而在所述其他寄存器的对应通道中生成来自所述第一寄存器的对应通道的解码值的和。
14.根据权利要求9所述的非暂时性计算机可读介质,其中,所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
将位添加到所述第二列向量中的编码值,从而生成所述第二列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度;
将值的第一子集中的每个值加载到第一寄存器的相应通道中,所述第一子集包括所述第二列向量的所述解压缩的编码值;
针对所述第一寄存器的每个通道,初始化多个其他寄存器中的每一个其他寄存器的对应通道中的第一计数器,使得所述多个其他寄存器中的每一个其他寄存器保持用于所述第一寄存器的每个通道的相应第一计数器,并且每个其他寄存器中的所有第一计数器对应于所述第二列向量的唯一解压缩的编码值;
针对所述第一寄存器的每个通道,递增所述多个其他寄存器中的一个寄存器的对应通道中的对应于所述第一寄存器的通道中的解压缩的编码值的所述第一计数器;
针对所述多个其他寄存器中的每一个其他寄存器,对所述其他寄存器中的第一计数器求和,并且将所述和添加到用于对应的唯一解压缩的编码值的对应的第二计数器;并且
通过从所述第二列向量的总行数中减去所述对应的第二计数器来确定第三计数器,第三计数器值对应于所述第二列向量中的所述唯一解压缩的编码值中的最后一个。
15.根据权利要求9所述的非暂时性计算机可读介质,其中,所述查询还包括具有编码值的多个列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
针对所述多个列向量的每个列向量,将所述列向量的编码值的第一子集加载到相应寄存器的相应通道中,从而形成包括所述相应寄存器的第三阵列;
将位添加到所述相应寄存器的每一个寄存器中的编码值,从而生成所述多个列向量的解压缩的编码值,每个解压缩的编码值具有第一长度或第二长度;
转置所述第三阵列,使得先前加载到单个相应寄存器中的解压缩的编码值现在加载到所述相应寄存器的对应通道中;并且
针对每个相应寄存器,利用单个指令将所述相应寄存器的每个通道中的解压缩的编码值添加到其他寄存器中的对应通道,从而在所述其他寄存器的对应通道中生成来自每个所述相应寄存器的对应通道的解压缩的编码值的和。
16.根据权利要求9所述的非暂时性计算机可读介质,其中,所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
将值的第一子集中的每个值加载到多个寄存器中,所述第一子集包括所述第二列向量的所述编码值;
分离并重新加载所述多个寄存器中的所述编码值的位,使得每个编码值的第i位存储在所述多个寄存器的第i寄存器中;
针对所述第二列向量的唯一编码值中的至少一些唯一编码值:
将所述多个寄存器中的每个编码值的位与所述唯一编码值的对应位进行比较;
基于所述比较,针对所有位与所述唯一编码值的位匹配的每个编码值设置其他位;
针对每个其他位设置,递增第三阵列中用于所述唯一编码值的第四计数器;并且
通过从所述第二列向量的总行数中减去所述第三阵列中的第四计数器来确定所述第三阵列中的第五计数器,所述第五计数器对应于所述第二列向量中的所述唯一编码值的最后一个。
17.一种被配置为对编码值的列存储表执行查询的系统,所述系统包括:
至少一个寄存器,被配置为保持一个或多个值;
至少一个处理器;
以及包括代码的计算机可读介质,所述代码在被执行时使所述处理器:
接收所述查询,所述查询包括要应用于所述编码值的至少第一列向量的过滤器;
处理针对所述第一列向量中的所述编码值中的每一个编码值的所述查询,从而生成指示通过所述过滤器或未通过所述过滤器的相应编码值的第一向量;
相对于所述第一列向量中的所述编码值,从所述第一向量确定通过所述过滤器的编码值和未通过所述过滤器的编码值的指示符;
确定所述第一列向量中的所述编码值的位长度;并且
针对所述第一列向量中的所述编码值的至少一个子集,基于所述指示符和所确定的所述编码值的位长度,从多个算法中选择用于处理所述查询的算法。
18.根据权利要求17所述的系统,其中,所述至少一个寄存器包括第一寄存器和第二寄存器,所选择的算法使所述处理器:
将位添加到所述第一列向量中的所述编码值的至少所述子集中的每一个子集中,从而生成所述第一列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度;
将值的第一子集加载到所述第一寄存器的相应通道中,所述第一子集包括所述解压缩的编码值;
将值的第二子集加载到所述第二寄存器的相应通道中,所述第二子集包括所述第一向量的对应于值的所述第一子集的值;并且
利用单个指令基于所述第二子集中的值将通过所述过滤器的解压缩的编码值从所述第一寄存器输出到过滤的列向量中。
19.根据权利要求17所述的系统,其中,所述至少一个寄存器包括第一寄存器和第二寄存器,所选择的算法使所述处理器:
生成包括多个连续整数值的第二向量;
将值的第一子集加载到第一寄存器的相应通道中,所述第一子集包括所述第二向量的所述连续整数值;
将值的第二子集加载到第二寄存器的相应通道中,所述第二子集包括所述第一向量的值;
利用单个指令基于所述第二子集中的值将整数值从所述第一寄存器输出到第三向量中;
将所述第三向量的所述整数值与所述第一列向量的索引匹配;并且
基于所述匹配,检索并解码所述第一列向量的编码值。
20.根据权利要求17所述的系统,其中,所述至少一个寄存器包括第一寄存器和第二寄存器,并且所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
将位添加到所述第二列向量中的编码值,从而生成所述第二列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度;
将值的第一子集加载到第一寄存器的相应通道中,所述第一子集包括所述第二列向量的所述解压缩的编码值;
将值的第二子集加载到第二寄存器的相应通道中,所述第二子集包括所述第一向量的对应于值的所述第一子集的值;
利用单个指令将所述第一寄存器的对应于所述第二寄存器的包括未通过所述过滤器的指示的通道的通道中的解压缩的编码值更新为常数值,从而生成更新的第二列向量;并且
利用所更新的第二列向量对所述列存储表执行所述查询,从而生成所述查询的结果,所述结果包括除了对应于所述常数值的组之外的所有组的结果。
21.根据权利要求17所述的系统,其中,所述至少一个寄存器包括第一寄存器和其他寄存器,并且所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
针对所述第二列向量中的每个唯一编码值,确定所述第二列向量中的所述唯一编码值的计数;
生成多个子阵列,每个子阵列与所述第二列向量中的不同唯一编码值相关联,并且具有基于对应于所述唯一编码值的所述计数的长度;
针对所述第二列向量的每一行,基于所述行处的所述编码值,将所述行的指示插入所述多个子阵列中的一个子阵列中;
级联所述多个子阵列中的每一个子阵列以生成第一阵列;
针对所述第一阵列的所述子阵列中的一个子阵列:
将所述子阵列中的行的指示与所述第一列向量的行匹配;
基于所述匹配,检索并解码所述第一列向量的编码值;并且
将所述第一列向量的解码值加载到所述第一寄存器的相应通道中;
利用单个指令将所述第一寄存器的每个通道中的所述解码值添加到所述其他寄存器中的对应通道中,从而在所述其他寄存器的对应通道中生成来自所述第一寄存器的对应通道的解码值的和。
22.根据权利要求17所述的系统,其中,所述至少一个寄存器包括第一寄存器和多个其他寄存器,并且所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
将位添加到所述第二列向量中的编码值,从而生成所述第二列向量的解压缩的编码值,每个解压缩的编码值具有相同的长度;
将值的第一子集中的每个值加载到第一寄存器的相应通道中,所述第一子集包括所述第二列向量的所述解压缩的编码值;
针对所述第一寄存器的每个通道,初始化所述多个其他寄存器中的每一个其他寄存器的对应通道中的第一计数器,使得所述多个其他寄存器中的每一个其他寄存器保持用于所述第一寄存器的每个通道的相应第一计数器,并且每个其他寄存器中的所有第一计数器对应于所述第二列向量的唯一解压缩的编码值;
针对所述第一寄存器的每个通道,递增所述多个其他寄存器中的一个寄存器的对应通道中的对应于所述第一寄存器的通道中的解压缩的编码值的所述第一计数器;
针对所述多个其他寄存器中的每一个其他寄存器,对所述其他寄存器中的第一计数器求和,并且将所述和添加到用于对应的唯一解压缩的编码值的对应的第二计数器;并且
通过从所述第二列向量的总行数中减去所述对应的第二计数器来确定第三计数器,第三计数器值对应于所述第二列向量中的所述唯一解压缩的编码值中的最后一个。
23.根据权利要求17所述的系统,其中,所述至少一个寄存器包括多个相应寄存器和其他寄存器,并且所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
针对多个列向量的每个列向量,将所述列向量的编码值的第一子集加载到相应寄存器的相应通道中,从而形成包括所述相应寄存器的第三阵列;
将位添加到所述相应寄存器的每一个寄存器中的编码值,从而生成所述多个列向量的解压缩的编码值,每个解压缩的编码值具有第一长度或第二长度;
转置所述第三阵列,使得先前加载到单个相应寄存器中的解压缩的编码值现在加载到所述相应寄存器的对应通道中;并且
针对每个相应寄存器,利用单个指令将所述相应寄存器的每个通道中的解压缩的编码值添加到所述其他寄存器中的对应通道,从而在所述其他寄存器的对应通道中生成来自每个所述相应寄存器的对应通道的解压缩的编码值的和。
24.根据权利要求17所述的系统,其中,所述至少一个寄存器包括多个寄存器,并且所述查询还包括具有编码值的第二列向量的指示,所述查询的结果通过所述编码值被分组,所选择的算法使所述处理器:
将值的第一子集中的每一个子集加载到多个寄存器中,所述第一子集包括所述第二列向量的所述编码值;
分离并重新加载所述多个寄存器中的所述编码值的位,使得每个编码值的第i位存储在所述多个寄存器的第i寄存器中;
针对所述第二列向量的唯一编码值中的至少一些唯一编码值:
将所述多个寄存器中的每个编码值的位与所述唯一编码值的对应位进行比较;
基于所述比较,针对所有位与所述唯一编码值的位匹配的每个编码值设置其他位;
针对每个其他位设置,递增第三阵列中用于所述唯一编码值的第四计数器;并且
通过从所述第二列向量的总行数中减去所述第三阵列中的第四计数器来确定所述第三阵列中的第五计数器,所述第五计数器对应于所述第二列向量中的所述唯一编码值的最后一个。
CN201880088339.8A 2017-12-01 2018-11-30 数据库系统中的加速过滤、分组和聚合 Pending CN111699480A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201762593767P 2017-12-01 2017-12-01
US62/593,767 2017-12-01
PCT/US2018/063357 WO2019108963A1 (en) 2017-12-01 2018-11-30 Accelerated filtering, grouping and aggregation in a database system

Publications (1)

Publication Number Publication Date
CN111699480A true CN111699480A (zh) 2020-09-22

Family

ID=64734204

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880088339.8A Pending CN111699480A (zh) 2017-12-01 2018-11-30 数据库系统中的加速过滤、分组和聚合

Country Status (4)

Country Link
US (2) US11275731B2 (zh)
EP (1) EP3718023A1 (zh)
CN (1) CN111699480A (zh)
WO (1) WO2019108963A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SG11202007532TA (en) * 2018-02-16 2020-09-29 Governing Council Univ Toronto Neural network accelerator
US11184021B2 (en) * 2019-03-15 2021-11-23 Samsung Electronics Co., Ltd. Using predicates in conditional transcoder for column store
US11449520B1 (en) * 2021-10-14 2022-09-20 Snowflake Inc. Parallel fetching of query result data
US12007986B2 (en) * 2022-06-01 2024-06-11 Sap Se Aggregation over high-cardinality dimensions using uniqueness indices

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090006399A1 (en) * 2007-06-29 2009-01-01 International Business Machines Corporation Compression method for relational tables based on combined column and row coding
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
CN102112986A (zh) * 2008-07-31 2011-06-29 微软公司 对基于列的数据编码的结构的高效的大规模处理
CN106250523A (zh) * 2016-08-04 2016-12-21 北京国电通网络技术有限公司 一种分布式列存储系统索引的方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012091702A1 (en) * 2010-12-29 2012-07-05 Empire Technology Development Llc Accelerating cache state transfer on a directory-based multicore architecture
CN107545066B (zh) * 2011-12-08 2021-01-15 甲骨文国际公司 用于在易失性存储器内保持关系型数据的列向量的技术
US9600522B2 (en) * 2012-08-20 2017-03-21 Oracle International Corporation Hardware implementation of the aggregation/group by operation: filter method
KR20160046331A (ko) * 2013-08-19 2016-04-28 상하이 신하오 (브레이브칩스) 마이크로 일렉트로닉스 코. 엘티디. 범용 유닛을 기반으로 하는 고성능 프로세스 시스템 및 방법

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090006399A1 (en) * 2007-06-29 2009-01-01 International Business Machines Corporation Compression method for relational tables based on combined column and row coding
CN102112986A (zh) * 2008-07-31 2011-06-29 微软公司 对基于列的数据编码的结构的高效的大规模处理
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
CN102171680A (zh) * 2008-10-05 2011-08-31 微软公司 用于基于列的数据编码结构的查询的高效大规模过滤和/或排序
CN106250523A (zh) * 2016-08-04 2016-12-21 北京国电通网络技术有限公司 一种分布式列存储系统索引的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
,DANIEL J. ABADI等: ""ColumnStores vs. RowStores:How Different Are They Really?"", 《SIGMOD \'08: PROCEEDINGS OF THE 2008 ACM SIGMOD INTERNATIONAL CONFERENCE ON MANAGEMENT》, pages 967 *

Also Published As

Publication number Publication date
EP3718023A1 (en) 2020-10-07
US11275731B2 (en) 2022-03-15
US20220179849A1 (en) 2022-06-09
US11669521B2 (en) 2023-06-06
US20190171634A1 (en) 2019-06-06
WO2019108963A1 (en) 2019-06-06

Similar Documents

Publication Publication Date Title
US11669521B2 (en) Accelerated filtering, grouping and aggregation in a database system
André et al. Cache locality is not enough: High-performance nearest neighbor search with product quantization fast scan
US6831575B2 (en) Word aligned bitmap compression method, data structure, and apparatus
CN112292816A (zh) 处理核心数据压缩和存储系统
CN109325032B (zh) 一种索引数据存储及检索方法、装置及存储介质
WO2015142595A1 (en) Parallel decision tree processor architecture
US20150262062A1 (en) Decision tree threshold coding
RU2633178C2 (ru) Способ и система базы данных для индексирования ссылок на документы базы данных
US10514914B2 (en) Method for min-max computation in associative memory
CN111801665A (zh) 用于大数据应用的分层局部敏感哈希(lsh)分区索引
US9137336B1 (en) Data compression techniques
US11989185B2 (en) In-memory efficient multistep search
US20160335294A1 (en) System and Method for Organizing Data
Stehle et al. ParPaRaw: Massively parallel parsing of delimiter-separated raw data
US7068192B1 (en) System and method for encoding and decoding variable-length data
EP3115909A1 (en) Method and apparatus for multimedia content indexing and retrieval based on product quantization
US11736119B2 (en) Semi-sorting compression with encoding and decoding tables
US11210280B2 (en) Systems and methods for fast bloom filter operations
WO2015143708A1 (zh) 后缀数组的构造方法及装置
CN111488439B (zh) 保存和分析日志数据的系统和方法
CN110895573B (zh) 一种检索方法和装置
US20220365920A1 (en) Search method and search device
Pavlo Lecture# 03: Data Formats & Encoding II
JPH0240772A (ja) インデックス生成方式

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
CB02 Change of applicant information
CB02 Change of applicant information

Address after: California, USA

Applicant after: Singstro Limited

Address before: California, USA

Applicant before: Macintosh Ltd.

SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination