半连接加速的制作方法

文档序号:14453251阅读:291来源:国知局
半连接加速的制作方法

本申请要求于2013年2月26提交的美国专利申请No.13/778,013的优先权;该申请又要求于2012年10月2日提交的美国临时申请No.61/709,142的优先权,其内容都通过引用被结合于此。

本申请涉及于2013年2月26提交的美国专利申请No.13/778,009,其内容通过引用被结合于此,就好像在本文完全阐述了一样。

技术领域

本发明一般而言涉及处理查询并且,更具体而言,涉及利用一个或多个协处理器中的定制硬件来执行处理查询所需的一个或多个操作。



背景技术:

在本节中描述的方法是可以实行的方法,但不一定是先前已被构想或实行的方法。因此,除非另外指出,否则不应当假设本节中描述的任何方法仅仅因为它们被包括在本节中就有资格作为现有技术。

发布到数据库的查询通常针对一个或多个数据库对象,诸如关系表。在许多时候,访问在关系表中组织的数据涉及扫描该关系表或者至少其一部分。常见的SQL查询是对数据库表需要过滤器的查询,诸如以下:

select EMPLOYEE from T_EMPLOYEES where HIRE_YEAR='2012'

在这个例子中,从数据库表T_EMPLOYEES搜索在2012年被雇佣的所有员工。这种搜索(或“扫描”)是由运行在一个或多个微处理器上的、执行通过整个表搜索所指定值的一系列指令的软件进行的,在这个例子中,所指定值是“2012”。当对大型数据库运行分析应用时,该第一步通常是性能瓶颈,因为这个步骤必须对整个表运行,这可以是几太(teratype)字节大。后续步骤将对第一扫描步骤过滤之后的满足扫描中所设定标准的子集(在上例中是在2012被雇佣的员工)工作。因此,机器每单位时间可以过滤的行数对机器而言是重要的性能度量。这个度量被称为“扫描率”。

用于处理查询,诸如涉及扫描表的查询,的方法依赖于软件技术,其中软件在通用微处理器上执行(或“运行”)。

附图说明

在附图中:

图1是根据实施例绘出用于加速表扫描的示例计算机系统的框图;

图2是根据实施例绘出示例协处理器的框图;

图3是根据实施例绘出用于处理查询的过程的流程图;

图4是根据实施例绘出示例查找向量的一部分的框图;及

图5是说明本发明的实施例可以在其上实现的计算机系统的框图。

具体实施方式

在以下描述中,为了解释的目的,阐述了众多具体的细节,以便提供对本发明的透彻理解。但是,很显然,本发明没有这些具体细节也可以实践。在其它情况下,众所周知的结构和设备以框图形式示出,以避免不必要地混淆本发明。

总体概述

在实施例中,与查询相关联的扫描操作或查找操作是在硬件中实现的,诸如与通用微处理器位于相同芯片上的协处理器。以这种方式,扫描操作由定制硬件执行,而查询的其它部分由运行软件的通用微处理器处理。让不同硬件部件执行不同操作的一个优点是定制硬件能够更好地处理扫描操作或查找操作所需的大数据量。而且,定制硬件把通用微处理器和相关联的高速缓存释放出来去处理查询的其它部分或者甚至与处理查询的软件无关的其它任务。

本发明的实施例不限于任何特定的微处理器或图形处理单元(GPU)。

以下例子把表称为被扫描的数据对象。但是,不是所有实施例都限于表。除表之外的其它数据对象可以被扫描。

系统概述

图1是根据实施例绘出用于加速查询处理的示例计算机系统100的框图。计算机系统100包括查询执行引擎110、OS/管理程序120、协处理器130以及存储器140。虽然只绘出了单个协处理器130,但是系统100可以包括多个协处理器。

查询执行引擎110和管理程序120是驻留在存储器(例如,DRAM和/或高速缓存存储器)中并且包括由通用微处理器执行的指令的程序。查询执行引擎110包括一个或多个软件部件并且可以与一个或多个其它不是查询执行引擎110的部分的软件部件通信,以便执行查询来生成查询的结果。查询执行引擎110可以配置为重写查询(例如,SQL查询),以生成查询执行引擎110能够执行的重写查询。作为替代,另一软件部件接收原始查询、基于原始查询生成重写查询,并且把所写的查询传递到查询执行引擎110供处理。

查询执行引擎110可配置为处理的查询的类型的非限制性例子包括SQL查询和XML查询,诸如XPath查询和XQuary查询。查询执行引擎110配置为处理的至少一种类型的查询是需要扫描对象或者其一部分的查询。如前面所指出的,被扫描的对象的非限制性例子是在一个或多个列和多个行中逻辑组织的关系表。虽然数据可以逻辑地在单个表中组织,但是数据可以非常不同地在持久储存器中组织,诸如硬盘驱动器或闪存存储器设备。例如,表的数据可以被分区或者表的不同列可以存储在非常不同的存储位置。

管理程序120充当查询执行引擎110和协处理器130之间的接口。换句话说,由查询执行引擎110向协处理器130发布的命令是经管理程序120发布的。因此,查询执行引擎110在管理程序接口上通过对OS/管理程序120进行API调用来发布命令。

管理程序是允许多个操作系统(“客人”)在主计算机上并发运行的硬件虚拟化技术。管理程序向客人操作系统给出虚拟操作平台并且管理客人操作系统的执行。各种操作系统的多个实例可以共享虚拟化的硬件资源。管理程序可以安装在具有运行客人操作系统的功能的服务器硬件上,服务器硬件自己充当服务器。

一种类型的管理程序直接在主机的硬件上运行,以控制硬件并管理客人操作系统。因此,客人操作系统运行在管理程序之上的另一级上。另一种类型的管理程序在典型的操作系统环境中运行。由于管理程序层作为独特的第二软件级,客人操作系统运行在硬件之上的第三级。换句话说,第一种类型的管理程序直接运行在硬件上,而第二种类型的管理程序运行在另一操作系统上,诸如FreeBSD、Linux或Windows。

因此,虽然元件120被标记为“OS/管理程序”,但是操作系统和管理程序是不同的实体。对于本描述,OS和管理程序被看作是相同的。以下对元件120的引用将是“管理程序120”。

虽然管理程序120被绘为计算机系统100的一部分,但是在一种实施例中,计算机系统100不包括管理程序。在那种实施例中,查询执行引擎110直接向协处理器130发布命令,而不首先需要除计算机系统100的操作系统(未绘出)之外的任何其它软件部件的处理。

协处理器130是被编程为执行一个或多个任务的硬件元件,这一个或多个任务独立于由执行查询执行引擎110和管理程序120的通用处理器所执行的任务。虽然协处理器130与执行查询执行引擎110的通用处理器分离,但是协处理器130可以被看作查询执行引擎110的一部分,因为协处理器130执行之前由查询执行引擎110执行的一个或多个任务。

在实施例中,协处理器130至少执行对照来自表的一系列输入值比较指定的目标值(或者目标值范围)的任务。这个任务被称为扫描操作并且在以下更详细地描述。在实施例中,协处理器130能够对照来自表的一系列输入值或数据元素比较多个指定的目标值(或者多个指定的目标范围)。

在另一实施例中,协处理器130至少执行确定一个或多个值是否在特定的值集合中存在的任务。这一个或多个值可以被用来加索引成(index into)特定的值集合,使得不需要针对这一个或多个值当中的每个值扫描该特定的值集合。在这种实施例中,协处理器130被编程为高效地执行查找操作,这在以下更详细地描述。

除了由查询执行引擎110建立或规定的初始参数之外,协处理器130执行扫描操作和/或查找操作,一直到(由启动命令指示的)扫描操作或查找操作完成都无需来自查询执行引擎110或任何其它软件的干预。在操作完成的那个时候,协处理器130向查询执行引擎110发信号通知操作结果可用。该信号可以是设置标志的形式。管理程序120可以使用这个信号把新命令插入协处理器130的命令队列。

在实施例中,协处理器130被编程为处理不同的数据类型/格式和元素尺寸。例如,协处理器130可以处理字符串格式、日期格式或数字(例如,整数或浮点数)格式的数据。而且,协处理器130处理的数据元素的尺寸可以是特定的位数(例如,7位)或者特定的字节数(例如,2字节)。此外,来自特定源(诸如表)的数据元素可以具有可变的长度或固定的长度。在实施例中,协处理器130从对象(诸如表)接收的数据元素可以具有一个尺寸并且,在执行例如该数据元素与另一数据元素的比较之前,协处理器130执行操作来减小或增加该数据元素的尺寸,诸如从该数据元素除去一个字节、向该数据元素添加9位或者解压缩该数据元素。

在实施例中,协处理器130驻留在芯片上,即,在与执行查询执行引擎110的通用微处理器相同的芯片上。协处理器130包括(a)把表数据(或者其它数据)从片上或片下存储器流传输到协处理器130的存储器接口和(b)执行扫描操作和/或查找操作的计算模块。例如,在扫描操作的情况下,计算模块对表数据作用,以确定指定的值,或者值范围,是否在表数据中出现。因此,一组比较器被用来确定进入的流的每个元素是否等于要搜索的值或者位于要搜索的值范围内。比较器集合中的每个比较器可以同时执行比较操作。因此,协处理器130可以同时执行多个比较操作。在实施例中,协处理器130配置为执行多种类型的比较,诸如一个4字节比较、两个2字节比较、四个1字节比较和/或一个2字节比较和一个1字节比较。协处理器130把搜索的结果通过存储器接口发送到片上存储器或片下存储器。

如图1中所绘出的,存储器140存储命令142、输入数据144以及输出数据146。在命令142中反映的命令参考(1)存储器140中存储输入数据144的至少一部分的位置以及(2)存储器140中对应于该命令的(由协处理器130生成的)操作结果将被存储的位置。

在实施例中,协处理器130包括存储一个或多个命令的一个或多个地址的命令队列。当不忙时,协处理器130从命令队列中选择一个或多个(由管理程序120插入的)地址,以便从存储器(例如,存储器140)检索一个或多个(例如,在命令142中反映的)命令。

协处理器控制块

在实施例中,查询执行引擎110包括指令,当指令被通用微处理器(未绘出)执行时,使得生成协处理器控制块(coprocessor control block,CCB)。CCB是代表由查询执行引擎110发布的命令并且包括协处理器配置为读取和处理的数据的数据结构。在实施例中,CCB包括指示协处理器130要执行的操作类型的命令类型数据以及对应于由命令类型数据所指示的操作的一个或多个操作数。如果协处理器130只执行一种操作,则命令类型数据可以不是CCB中的可用操作数。作为替代,如果协处理器配置为只执行一种操作,则协处理器130可以忽略命令类型数据。

命令类型数据指示协处理器130将使用哪个逻辑来处理命令。因此,不同的命令类型对应于由协处理器130实现的不同逻辑。例如,扫描操作需要协处理器130执行第一逻辑,而查找操作需要协处理器130执行与第一逻辑不同的第二逻辑。

在CCB中指示的操作数可以是两种类型之一:立即操作数或间接操作数。立即操作数是当协处理器执行操作时可以被协处理器立即使用而无需首先要求操作数的翻译的操作数,诸如存储器查找。在扫描操作的语境中立即操作数的例子是用来对照来自表数据的数据元素执行比较的4字节整数。间接操作数是在协处理器可以执行指定的操作之前必须首先被翻译或查找的操作数。间接操作数的例子是指示用于让协处理器执行操作,无论是扫描操作还是查找操作,的表数据存储在(例如,存储器140中)什么地方的物理地址。

在扫描操作的语境中,在CCB中指示的(扫描操作的)操作数包括(a)指示被用来对照来自表数据的数据执行比较的数据的比较数据,以及(b)指示表数据位于什么地方的位置数据(例如,存储器140中的输入数据144)。

比较数据可以是任何类型的数据,诸如数字、日期、字符或字符串。比较数据可以是单个值和/或值范围。此外,比较数据可以指示多个值和/或多个值范围。例如,查询可以请求查看收入低于$30,000的员工以及收入在$100,000和$130,000之间的员工的名字。在这个例子中,比较数据指示0-30,000的范围和100,000-130,000的范围。

位置数据可以是单个地址或多个地址,诸如起始地址和结束地址或者起始地址和从起始地址开始的偏移量。位置数据中所指示的每个地址可以是虚拟地址、实际地址或者物理地址。在实施例中,管理程序120用第二位置数据代替在CCB中指示的位置数据。例如,一个(例如,客人)操作系统识别在CCB中指示的位置数据,其中该位置数据是虚拟地址,并且利用实际地址代替该虚拟地址。然后,操作系统向管理程序120发送该CCB。管理程序120在映射表中查找映射到该实际地址的物理地址,并且在CCB中利用物理地址代替实际地址。

在实施例中,CCB还包括指示协处理器130要把执行由CCB指示的操作的结果发送到哪里的输出位置数据。在图1中,输出位置数据将指向存储器140中的输出数据146。如果多个微处理器集成在同一个芯片上并且每个微处理器具有其自己的私有高速缓存,则这会是有帮助的。因此,如果执行查询执行引擎110的特定通用微处理器是相同芯片上的多个通用微处理器之一并且每个都是与不同(例如,L3)高速缓存相关联的微处理器,则查询执行引擎110可以,作为CCB中的参数,规定与该特定通用微处理器相邻或靠近的高速缓存。因此,代替协处理器130向RAM发送操作结果,协处理器130可以(基于在CCB中指示的输出位置数据)把结果不仅发送到高速缓存,而且发送到“最靠近”查询执行引擎110的特定高速缓存。以这种方式,查询执行引擎110不必(a)从RAM、(b)从另一个微处理器(或核心)的高速缓存或者(c)从在多个核心之间共享的高速缓存请求结果,这当中每一个都比从微处理器自己的(私有)高速缓存访问数据慢得多。相反,查询执行引擎110被允许规定由一个或多个硬件元件(即,在这种实施例中是协处理器)执行的操作结果将存储在哪里。

协处理器

一旦协处理器130经管理程序120的接口(或者直接从查询执行引擎110)接收到命令(以CCB的形式),协处理器130就与发布原始命令的查询执行引擎110的线程异步地执行该命令。如果协处理器130接收到多个命令,则协处理器130可以按轮转方式调度这多个命令以便执行。一些命令可以被并行执行。

在实施例中,对命令的输入数据(例如,关系数据)经(到查询执行引擎110的)接口提取并且命令的结果(即,协处理器130基于输入数据生成的结果)经该接口写出。

在实施例中,协处理器130在每个命令结束时使完成状态经接口写出到接口中的完成数据结构。查询执行引擎110可以使用完成数据结构与查询执行引擎110的一个或多个线程重新同步。

图2是根据实施例绘出示例协处理器200的框图。协处理器200可以是图1中的协处理器130。协处理器200包括存储器接口210、命令调度器220、解压缩器230、查询管道240以及消息管道250。消息管道250处理存储器拷贝和消息传递。在解压缩器230解压缩被压缩的输入数据(例如,来自关系表的数据)之后,查询管道240处理一个或多个查询命令,诸如扫描命令或查找命令。

解压缩器230可以配置为只解压缩以单一格式压缩的数据。作为替代,解压缩器230可以配置为解压缩以一种格式压缩的数据和以另一种格式压缩的其它数据。在实施例中,协处理器200不包括解压缩器230。当协处理器200接收数据时,如果协处理器200接收的数据不是压缩的(例如,已经解压缩),则解压缩可以不是必要的。而且,如果协处理器200配置为直接对压缩数据操作而无需首先解压缩压缩数据,则甚至对于压缩数据,压缩也可以不是必要的。

管道240和250当中每一个与不同设置的命令队列以及,可选地,命令格式关联。管理程序120配置为确保(在CCB中反映的)命令针对正确管道的命令队列。CCB中的标志位可以指示CCB是消息命令还是队列命令。

管道240和250当中每一个可以被多线程化并且能够一次执行多个命令。多线程化的程度不暴露给软件。命令调度器220可以基于命令可并行化的假设在可用的线程上调度命令。如果给定的命令需要在另一命令之后被串行化,则这两个命令可以被放在相同的命令队列中并且适当的串行化标志可以在两个命令中都设置。

虽然没有绘出,但是协处理器200包括一定量的存储器,以便在数据通过存储器接口被流化时存储数据或者存储在查找操作中使用的数据,诸如查找向量,其例子是Bloom过滤器。由于很大程度上由用于主要核心或通用微处理器的一个或多个高速缓存组成的现代芯片,协处理器200的存储器的尺寸可以相当小(例如,4KB)。

虽然查询执行引擎110这样“查看”表数据关系并执行操作,但是协处理器200只“看到”或者对向量或单个维度的数据数组操作。换句话说,协处理器200不“查看”多个列或行标识符。更确切地说,当涉及到数据是如何逻辑组织或存储的时候,协处理器200是不可知的。因此,在向协处理器200提供指令时,查询执行引擎110确保由协处理器200执行的任何操作的输出以特定次序存储。如果不是,则查询执行引擎110将不知道输出对应于表的哪部分。排序被保持的一种方式是让查询执行引擎110对表数据的哪个集合对应于哪个CCB保持跟踪,其中每个CCB包括唯一的CCB标识符。然后,由协处理器200基于特定CCB生成的输出包括用于那个特定CCB的标识符,以允许查询执行引擎110确定输出对应于逻辑表的哪部分。例如,查询执行引擎110可以存储把表Employee的行1001-2000与CCB标识符432899关联的关联数据。协处理器200接收并处理具有标识符432899的CCB,以生成存储在某个位置的输出。

作为替代,代替对CCB标识符保持跟踪,查询执行引擎110存储把指示表的一部分(例如,表Employee的行1001-2000)的表数据与指示协处理器200生成的输出要存储在哪里的输出位置数据(例如,物理地址1298737+4KB)关联的关联数据。随后,当查询执行引擎110检查存储在那个存储位置的输出时,查询执行引擎110使用关联数据来确定表的哪部分对应于那个输出。因此,即使协处理器200在不同的时间对表的不同部分操作以及即使查询执行引擎110可能指示多个协处理器对表的不同部分操作,查询执行引擎110也可以对输出的次序保持跟踪,其中多个协处理器对表的不同部分操作可以并发执行。

处理查询

图3是实施例中绘出用来处理需要扫描操作的查询的过程300的流程图。在方框310,查询执行引擎110接收针对一个或多个数据对象,诸如表,并且需要这一个或多个数据对象当中至少一个的扫描操作的查询。例如,查询执行引擎110可以处理SQL查询,以生成查询执行引擎100配置为要执行或指示一个或多个其它软件部件执行的、包括一个或多个数据库操作,包括扫描操作,的重写的查询。作为替代,另一软件部件接收原始查询并且生成查询执行引擎100配置为要处理的重写的查询。

在方框320,查询执行引擎110基于一个或多个标准确定在处理查询中是否涉及协处理器130。这一个或多个标准可以指示结果是否之前已生成并高速缓存、关于表的索引是否存在并可被用来应答查询而不是扫描表、表的尺寸,等等。例如,如果需要被扫描的表的尺寸相对小,则相比不涉及协处理器130来执行查询,涉及协处理器130会需要更多工作(例如,以执行查询执行引擎110的指令的通用微处理器的使用率的形式)或者花费更多的时间。

此外或者作为替代,这一个或多个标准可以指示以不同方式处理查询(或者重写的查询)的相对成本。例如,查询执行引擎110可以包括成本估计器部件,该部件估计在不同执行计划下,诸如利用索引、扫描表而不利用协处理器130以及利用协处理器130扫描表,执行查询的成本。然后,查询执行引擎110选择关于成本而言最不昂贵的执行计划。“成本”可以基于一个或多个因素,诸如CPU使用率、存储器使用率、I/O使用率以及网络I/O使用率。

如果查询执行引擎110确定在执行查询当中涉及协处理器130,则过程300前进到方框330。

在方框330,查询执行引擎110向管理程序120发送一个或多个指令的地址、输入数据的地址以及输出数据要存储到的地址。这一个或多个指令可以是查询执行引擎110生成的CCB的形式。管理程序120把地址从虚拟地址翻译成物理地址并且把物理地址放到协处理器130的命令队列或缓冲器中。

在查询执行引擎110使得一个或多个指令存储在存储器中(并且,因此,可用于让协处理器130读出)之后,查询执行引擎110可以执行与查询执行相关或者一起与另一查询相关的其它任务。以这种方式,由协处理器130执行的操作与由查询执行引擎110执行的任务异步地执行,其中由查询执行引擎110执行的任务是由通用微处理器执行的。

如以上所指出的,计算机系统100可以包括多个协处理器。因此,查询执行引擎110可以向多个协处理器当中每一个发送指令(例如,CCB)。以这种方式,扫描操作或查找操作可以被分成多个“迷你”操作,允许每个协处理器执行不同的“迷你”操作。例如,特定的表可以包括10,000行并且可以有十个协处理器。于是,查询执行引擎110可以生成十个不同的CCB,除每个CCB指示从其开始访问特定表的不同的1,000行集合的不同地址之外,每个CCB都类似于其它CCB。以这种方式,十个协处理器对特定表的不同部分并行操作。

此外或者作为替代,方框330涉及查询执行引擎110基于一个或多个标准选择多个协处理器的子集以发送CCB。例如,查询执行引擎110可以只需要总共十个协处理器当中的三个协处理器,每个执行扫描操作(但是相对于每个其它协处理器关于表数据的不同集合)。查询执行引擎110用来选择一个或多个协处理器的一个或多个标准可以是每个协处理器的当前负载、每个协处理器的等待时间,和/或每个协处理器的处理历史。例如,查询执行引擎110选择当前最少“负载”或最不忙的三个协处理器。协处理器的负载可以反映在协处理器的一个或多个命令队列中的命令的数目当中。因此,等待被特定协处理器处理的命令越多,该特定协处理器变得负载越大。

在方框340,协处理器130接收一个或多个指令并且执行在这一个或多个指令中反映的一个或多个操作。例如,协处理器130接收CCB、确定该CCB中所反映的操作类型、读入完成操作必需的任何数据、执行操作,并且(在方框350中)使操作结果发送到查询执行引擎110。由协处理器130对命令的执行可以通过由查询执行引擎110(或者其代理之一)对协处理器130的一个或多个内部寄存器的写来触发。

扫描操作

在实施例中,一个或多个指令指示扫描操作以及表数据被存储的一个或多个地址。协处理器130检索表数据并且执行(在一个或多个指令中指定的)值或值范围与表数据之间的比较。协处理器130通过存储器(例如,存储器140)从查询执行引擎110请求表数据,其中存储器可以是系统中的动态RAM或者芯片上的高速缓存存储器。表数据可以存储在块中,这种块可以相当大,诸如64KB或更大。协处理器130可以访问这些块当中每一个,作为单维数组。在面向列的数据库中,数据在单维数组中并且容易被协处理器130读取。在以行为主的数据库中,在数据被协处理器130处理之前,数据可以首先被转置成以列为主的格式。

如果表数据跨在存储器中不连续的块,则协处理器130单独地请求每个块(作为单独的作业)。在这种场景下,查询执行引擎把每个作业的(由协处理器130生成的)结果“缝合”到一起。例如,在以行为主的数据库中,数据将被跨进(strided)并且协处理器130将选择每个第N块数据,其中N在命令中指定。

协处理器130可以“在传输过程中”执行比较;即,当表数据被流到协处理器130时。一旦表数据中的数据元素与一个或多个指令中指定的目标值范围进行比较,协处理器130就可以(立即或者最终)用来自表数据的新数据元素覆盖用来存储那个数据元素的存储器。

协处理器可以配置为执行的比较操作的类型的例子包括大于(>)、小于(<)、等于(==)、不等于(!=)、大于或等于(>=)以及小于或等于(<=)。

语义感知压缩

在实施例中,协处理器130配置为对压缩数据进行操作。一些数据是利用一种或多种非语义感知压缩技术来压缩的,而其它数据可以利用一种或多种语义感知压缩技术来压缩。利用非语义感知压缩技术压缩的数据在解压缩的数据可以被操作之前需要首先解压缩。利用语义感知压缩技术压缩的数据在执行操作(例如,数字或字符串比较)之前可以不需要被解压缩。语义感知压缩技术的例子是游程长度编码(run-length encoding,RLE)。

RLE是一种数据压缩形式,其中,数据的游程(run)(即,相同的数据值在许多连续的数据元素中出现的序列)被存储为单个数据值和计数,而不是存储为原始游程。这对于包含许多这种游程的数据最有用。例如,表的列可以包含以下序列的部门标识符:

A A A A A A B B B C C C C C C C C C D D D D D A A A A

对以上序列应用RLE数据压缩算法可能产生以下输出:6A3B8C5D4A。这种游程长度代码仅用10个字符来表示原始的26个字符。在RLE中,单个数据值在输入序列中的游程越长,压缩程度越高。

返回方框340,表数据可以是游程长度编码的。因此,需要被读入协处理器130的表数据的个数以及协处理器130需要对照游程长度编码的表数据执行的比较的次数可以大大小于如果表数据不进行游程长度编码的话。给定以上的例子,代替执行26次比较(即,对于26个字符当中每个字符比较一次),协处理器130将只需要执行5次比较。

对照游程长度编码数据执行扫描操作的结果本身可以是游程长度编码的,这可以最终被查询执行引擎110处理。给定以上的例子,确定特定表的行是否包括部门标识符“A”的结果可以是6Y16N4Y,其中“Y”指示确定的肯定结果,而“N”指示确定的否定结果。

作为替代,对照游程长度编码数据执行扫描操作的结果可以不是游程长度编码的。作为代替,结果可以是“解压缩的”。给定以上的例子,确定特定表的行是否包括部门标识符“A”的结果可以是YYYYYYNNNNNNNNNNNNNNNNYYYY。在这种实施例中,虽然在扫描操作期间对字符“C”执行了单次比较,但是协处理器130对那个游程长度编码的数据元素生成八个否定指示(例如,“N”或“0”)。

查找操作

SQL查询常常需要交叉引用数据库中的多个表。处理这种查询通常涉及集合-相交操作。目前,集合-相交操作是由运行在通用微处理器上的软件执行的,其中,当要连接的表的列的基数小时,软件利用向量查找(例如,Bloom过滤查找)。根据实施例,向量查找(或者查找操作)在硬件中实现,这会比软件实现快得多。

因此,在实施例中,(方框330的)一个或多个指令指示查找操作、表数据被存储的一个或多个地址,以及查找向量或数组被存储的一个或多个地址。表数据(或查找向量)被存储的一个或多个地址可以是两个地址(例如,起始地址和结束地址)或者带偏移量的单个地址。协处理器130使查找向量和表数据发送到协处理器130并且,对于表数据中的每个数据元素,在查找向量中执行数据元素的查找。换句话说,协处理器130使用数据元素(或者数据元素的散列)来识别查找向量中的位置并且在那个位置从查找向量检索数据。

需要查找操作的示例查询

可能需要查找操作的查询的例子是请求关于居住在“富”邮政区号(zip code)的“穷”人的信息的查询。“穷”人可以被认为是每年的收入少于$30,000的人,而“富”邮政区号可以被认为是薪资中间值超过$100,000的邮政区号。在这个例子中,协处理器130需要来自至少两个数据对象的数据:查找向量和Person表。查找向量指示(例如,利用单个位)邮政区号是否“富”。查找向量可以是预先计算的(即,在接收查询之前)或者可以响应于接收到查询而被计算。

Person表包含关于各种人的信息,该表包括至少三列:一列用于每个人的名字、一列用于每个人的薪资,还有一列用于每个人的邮政区号。一方面,指示邮政区号是富还是穷的数据是维度表,而包含关于每个人的信息的Person表是事实表。维度表通常比事实表小得多。在这个例子中,查找向量可以基于维度表生成。相关地,事实表可以由多个数据对象(例如,表)表示:一个数据对象可以包含关于每个人的薪资的信息,而另一个数据对象可以包含关于每个人的邮政区号的信息。

查找向量

查找向量的例子是Bloom过滤器,这是被用来测试一个元素是否是一个集合的成员的概率性数据结构。虽然假阳性在利用Bloom过滤器的时候是有可能的,但是假阴性不可能。Bloom过滤器与一个或多个散列函数关联,每个散列函数把元素映射到Bloom过滤器中一个数组位置。

但是,查找向量不需要是概率性的。例如,如果只有10,000个可能的邮政区号并且每个邮政区号都与单个位关联,以便指示该邮政区号是否“富”,则查找向量的尺寸(例如,1.25KB)可以小到足以适合把整个查找向量放到协处理器130的存储器(例如,SRAM)中。因此,不必为了减小其尺寸而需要概率性查找向量。

图4是绘出示例查找向量400的一部分的框图。查找向量400中的每个位置都与不同的邮政区号关联。换句话说,邮政区号被用来加索引成查找向量400。查找向量400中每个位置都包含单个位,该位指示对应的邮政区是“富”邮政区号(“1”)还是“穷”邮政区号(“0”)。

如果查找向量不能够适合在协处理器130的存储器中完全放下,则(除了生成概率性查找向量之外),或者(a)查找向量可以被分割(或划分),使得协处理器130每次针对查找向量的每个部分读入表数据或者(b)在存在多个协处理器的实施例中,不同的协处理器可以读入表数据一次但是只针对查找向量中其存储的一部分。

在前一场景下,如果协处理器130只能适合把例如查找向量的1/4放到其存储器中,则协处理器130读出指示人的邮政区号的表数据四次(即,协处理器130读入的查找向量的每个部分读出一次)。如果人的邮政区号在对表数据的任何一遍操作(pass)中都未被识别出,则用于那个人的结果可以指示否定的确定。对表数据的每遍操作的结果可以是一个长的位数组,Person表中指示的每个人一位。

在后一场景下,四个不同的协处理器可以存储查找向量的不同的四分之一并且读入一次指示人的邮政区号的表数据,然后执行对表数据中所反映的每个邮政区号的查找向量的查找。再次,来自每个协处理器的查找操作的结果可以是一个长的位数组,Person表中指示的每个人一位。

生成扫描或查找操作的结果

在实施例中,作为执行在一个或多个指令中反映的一个或多个操作的结果,协处理器130生成具体的输出格式。该具体输出格式的例子是位向量,其中位向量中的每个位置指示真或假。例如,如果“10”是目标值并且比较是确定该目标值是否大于来自表的数据值或数据元素,则比较的结果将是(a)真,如果数据值大于10,和(b)假,如果数据值小于或等于10。

向量中的每个位置对应于从输入(例如,表)数据接收的数据值或数据元素。例如,在以上的查找操作例子中,协处理器130生成反映住在“富”邮政区号中的“穷”人的位向量。为了生成位向量,协处理器130从Person表的zip code(邮政区号)列读入数据并且为在读入的数据中指示的每个人并且基于查找向量确定该人是否住在“富”邮政区号中。位向量中的每一位指示Person表中的不同的人是否住在“富”邮政区号中。协处理器130随后把位向量传递到通用微处理器,该通用微处理器使用位向量来识别也被认为“穷”的人。例如,对于住在富邮政区号中的每个人(如在位向量中所指示的),通用微处理器查找Person表中对应的行,以确定该人是否“穷”。

因为位向量的尺寸相对小,因此由通用微处理器对位向量的处理相对快;比通用微处理器直接处理输入数据快得多。此外,存储位向量的高速缓存存储器空间比存储输入数据(诸如数据的大列)将需要的高速缓存存储器空间小得多。

存储扫描或查找操作的结果

返回过程300,在方框350,协处理器130使扫描操作(或者查找操作)的结果可以让查询执行引擎110获得。方框350可以涉及协处理器130从启动操作的查询执行引擎110向在一个或多个指令中指定的存储器发送操作结果。例如,查询执行引擎110生成CCB并且在CCB中指示对应操作的结果要发送到例如DRAM,共享的L3高速缓存或者具体微处理器的高速缓存(例如,执行查询执行引擎或者与生成原始命令的微处理器不同的微处理器)。

方框350还可以涉及协处理器130设置标志,当该标志被设置时,指示操作完成。这种标志设置充当(1)管理程序120把新请求插入协处理器130的命令队列以及(2)查询执行引擎110检索结果的信号。

作为替代,协处理器130被编程为总是把操作结果发送到可让查询执行引擎110访问的具体存储器部件(无论是RAM还是高速缓存)。

作为替代,代替使扫描操作的结果可让查询执行引擎110获得,协处理器130把结果发送到另一协处理器。如前面所指出的,计算机系统100可以包括多个协处理器。这多个协处理器可以串联连接。两个协处理器之间的每个连接可以包括FIFO缓冲器,因此“生产”协处理器可以比“消费”协处理器可以处理结果更快地生成结果。最终,“链条”中最后的协处理器向指定的目的地,诸如RAM或高速缓存中的目的地,发送可让查询执行引擎110访问的结果。

在方框360,查询执行引擎110处理结果并执行一个或多个其它操作,以便生成原始查询的最终结果。虽然协处理器130执行扫描或查找操作,但是,执行查询执行引擎110的通用微处理器可以是空闲的或者可以完全被查询执行引擎110或另一过程使用。例如,查询执行引擎110可以执行查询所需或者不以任何方式与该查询相关而是与另一查询相关的一个或多个其它操作。

作为扫描操作的例子,查询可能请求在具体日期范围内被启动的购买订单的ID和价格。在这个例子中,协处理器130执行扫描操作,该扫描操作涉及读入用于多个购买订单的日期信息,其中日期信息在Purchase Order表中反映。扫描操作的结果可以是一系列的位(例如,位向量),每一位反映对应的购买订单是否在指定的日期范围内被启动。协处理器130把结果发送到查询执行引擎110可访问的存储器并且可以通过设置查询执行引擎110定期检查的标志来通知查询执行引擎110扫描操作的完成。然后,查询执行引擎110可以使用所述位来识别Purchase Order表中对应于在所指定日期范围内启动的那些购买订单的条目。然后,查询执行引擎110识别所识别出的条目中的ID和价格并且作为查询的结果返回(例如,显示)那些信息。查询还可以指定查询的结果要通过价格按降序来排序。因此,查询执行引擎110在接收到由协处理器110执行的扫描操作的结果之后执行一个或多个操作。

给定其中查询是要识别住在“富”邮政区号中的“穷”人的查找操作例子,除了指示协处理器130执行查找操作,查询执行引擎110还可以指示协处理器130(或者另一协处理器)对Person表执行扫描操作,以识别年薪小于$30,000的所有人。扫描操作的结果(就像查找操作的结果)可以是一系列位的形式(例如,位向量),其中每一位对应于在Person表中指示的不同的人。在一种实施例中,查询执行引擎110把扫描操作的结果和查找操作的结果作为输入对其执行AND操作。或者,协处理器130(或者另一协处理器)可以被编程为执行该AND操作。在这种实施例中,查询执行引擎110可以创建另一个CCB,其中操作数包括查找操作的结果的(例如,虚拟)地址和扫描操作的结果的地址。

如前所述,查找向量的尺寸可能不适合一次完全放在协处理器130的存储器中。在前面所述的两种场景之一当中,查找向量被分成四个“迷你”向量并且协处理器130单独对每个迷你向量进行操作,因此需要协处理器130(从Person表)读入用于每个人的邮政区号数据四次。由协处理器执行这种查找操作所产生的总结果可以包括四个单独的位数组,每个数组最终OR到一起,以产生单个位数组(再次,Person表中所指示的每个人一位)。这个OR步骤(这可以包括三个OR操作)可以由查询执行引擎110执行。作为替代,协处理器130可以被编程为执行该OR操作。

在这两种场景当中的另一种中,查询执行引擎110使四个不同的协处理器利用查找向量的不同部分执行查找操作。然后,来自一个协处理器的结果与来自每个其它协处理器的结果OR,以产生单个位数组(Person表中所指示的每个人一位)。再次,这个OR步骤可以由查询执行引擎110或者由协处理器之一执行。

一旦查询执行引擎110确定了什么人住在“富”邮政区号中,查询执行引擎110就使用那个信息来确定也被认为“穷”的那些人,如以上所指示的。

虽然以上描述参考执行扫描操作或查找操作,但是实施例可以涉及一个协处理器对特定查询执行扫描操作,而另一协处理器对该特定查询执行查找操作。因此,多个协处理器可以同时对相同的查询执行但是执行不同的操作。

本文所述实施例的优点是通用微处理器可以把数据密集的操作卸载到与该微处理器分离的一个或多个协处理器,以便释放微处理器用于其它任务的使用。因此,协处理器可以关于使得协处理器执行操作的查询处理软件异步操作。此外,一个或多个协处理器可以比执行查询处理软件的通用微处理器快得多地执行那些操作。

硬件概述

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

例如,图5是说明本发明的实施例可以在其上实现的计算机系统500的框图。计算机系统500包括总线502或者用于传送信息的其它通信机制,以及与总线502耦合用于处理信息的硬件处理器504。硬件处理器504可以是例如通用微处理器。

计算机系统500还包括耦合到总线502用于存储信息和要由处理器504执行的指令的主存储器506,诸如随机存取存储器(RAM)或其它动态存储设备。主存储器506还可以用于在要由处理器504执行的指令执行期间存储临时变量或其它中间信息。当存储在处理器504可访问的非暂时性存储介质中时,这种指令使计算机系统500变成为执行指令中所规定的操作而定制的专用机器。

计算机系统500还包括只读存储器(ROM)508或者耦合到总线502的其它静态存储设备,用于为处理器504存储静态信息和指令。提供存储设备510,诸如磁盘或光盘,并且耦合到总线502,用于存储信息和指令。

计算机系统500可以经总线502耦合到显示器512,诸如阴极射线管(CRT),用于向计算机用户显示信息。输入设备514,包括字母数字和其它键,耦合到总线502,用于向处理器504传送信息和命令选择。另一种类型的用户输入设备是游标控制516,诸如鼠标、轨迹球或者游标方向键,用于向处理器504传送方向信息和命令选择并且用于控制显示器512上的游标运动。这种输入设备通常具有在两个轴,第一个轴(例如,x)和第二个轴(例如,y),中的两个自由度,以允许设备在平面内规定位置。

计算机系统500可以利用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文所述的技术,这些与计算机系统相结合,使计算机系统500或者把计算机系统500编程为专用机器。根据一种实施例,本文的技术由计算机系统500响应于执行包含在主存储器506中的一条或多条指令的一个或多个序列而执行。这种指令可以从另一存储介质,诸如存储设备510,读到主存储器506中。包含在主存储器506中的指令序列的执行使处理器504执行本文所述的过程步骤。在备选实施例中,硬连线的电路系统可以代替软件指令或者与其结合使用。

如在本文所使用的,术语“存储介质”指存储使机器以特定方式操作的数据和/或指令的任何非暂时性介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,或固态驱动器,诸如存储设备510。易失性介质包括动态存储器,诸如主存储器506。存储介质的常见形式包括,例如,软盘、柔性盘、硬盘、固态驱动器、磁带,或者任何其它磁性数据存储介质,CD-ROM,任何其它光学数据存储介质,任何具有孔模式的物理介质,RAM、PROM和EPROM、FLASH-EPROM、NVRAM,任何其它存储器芯片或盒式磁带。

存储介质与传输介质截然不同但是可以与其结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线502的配线。传输介质还可以采取声波或光波的形式,诸如在无线电波和红外线数据通信中产生的那些。

各种形式的介质可以参与把一条或多条指令的一个或多个序列携带到处理器504供执行。例如,指令最初可以在远端计算机的磁盘或固态驱动器上携带。远端计算机可以把指令加载到其动态存储器中并且利用调制解调器经电话线发送指令。位于计算机系统500本地的调制解调器可以在电话线上接收数据并且使用红外线发送器把数据转换成红外线信号。红外线检测器可以接收在红外线信号中携带的数据并且适当的电路系统可以把数据放在总线502上。总线502把数据携带到主存储器506,处理器504从该主存储器506检索并执行指令。由主存储器506接收的指令可以可选地在被处理器504执行之前或之后存储在存储设备510上。

计算机系统500还包括耦合到总线502的通信接口518。通信接口518提供耦合到网络链路520的双向数据通信,其中网络链路520连接到本地网络522。例如,通信接口518可以是综合业务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器,或者提供到对应类型的电话线的数据通信连接的调制解调器。作为另一个例子,通信接口518可以是提供到兼容的局域网(LAN)的数据通信连接的LAN卡。无线链路也可以实现。在任何此类实现中,通信接口518都发送和接收携带表示各种类型信息的数字信号流的电信号、电磁信号或光信号。

网络链路520通常通过一个或多个网络向其它数据设备提供数据通信。例如。网络链路520可以通过本地网络522提供到主计算机524或者到由因特网服务提供商(ISP)526操作的数据设备的连接。ISP 526又通过现在通常称为“因特网”528的全球分组数据通信网络提供数据通信服务。本地网络522和因特网528都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及在网络链路520上并通过通信接口518的信号是传输介质的示例形式,其中信号把数字数据带到计算机系统500或者携带来自计算机系统500的数字数据。

计算机系统500可以通过网络、网络链路520和通信接口518发送消息和接收数据,包括程序代码。在因特网例子中,服务器530可以通过因特网528、ISP 526、本地网络522和通信接口518发送对应于程序的所请求代码。

所接收的代码可以在其被接收时由处理器504执行,和/或存储在存储设备510或其它非易失性储存器中,供随后执行。

在前面的说明书中,本发明的实施例已经参考众多的具体细节进行了描述,这些细节可以从一种实现到另一种实现变化。因而,说明书和附图应当在说明性而不是限制性的意义上考虑。本发明范围的唯一且排他指示,以及申请人预期作为本发明范围的内容,是由本申请产生的权利要求集合的字面和等同范围,以这种权利要求产生的具体形式,包括任何后续的校正。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1