具有重复值的表的块压缩的制作方法

文档序号:7513638阅读:124来源:国知局

专利名称::具有重复值的表的块压缩的制作方法
技术领域
:本发明涉及由数字计算机进行的数据处理,更具体来说,涉及具有重复值的表(table)的块压缩。
背景技术
:搜索引擎可以在诸如关系表之类的数据库表中搜索大量数据,以找到结果。对于海量数据,诸如包含上百万的记录的表的组合,数据的处理可能需要大量硬件资源。例如,可能需要大量随机存取存储器空间来存储与执行用户i奮求相关的所有记录。
发明内容在此公开的主题提供包括计算机程序产品的方法和装置,其实现涉及具有重复值的表的块压缩的技术。在一个方面,根据基于字典的压缩来压缩数据列,以生成值标识符列,将所述值标识符排序,生成块标识符列表,生成块字典列,以及生成块偏移列。对于值标识符的每一个块,存在针对每个唯一值标识符的唯一块标识符以及存在针对相同值标识符的相同块标识符。对于每一个块字典,存在块标识符列表,其中每一个块标识符与值标识符相关联,以及存在针对块标识符的每一个唯一值而存在于块字典中的块标识符。块偏移列的每一个值指示在所述块字典列中块从其开始的偏移。在相关方面中,将表示压缩后的数据列的值标识符进行排序,以及生成块字典。可以为值标识符的每一个块生成块字典。每一个块字典可以包括块标识符列表,其中每一个块标识符与一个值标识符相关联,以及块中的每个唯一值存在块标识符。该主题可以被实施为例如计算机程序产品(例如,实施为源代码或有形地体现在计算机可读介质中的经编译的代码)、计算机实施的方法、以及系统。变形可以包括一个或多个下列特征。所述值标识符可以是表示在表的同一行上具有数据相关性的结构化业务数据的值。所述业务数据可以包括被建模为连接表的集合的业务对象。可以在多个硬件服务器上并行地生成块字典、块向量等等。数据列的变化可以被存储在与该数据列分离的增量緩冲器中,并且可以异步地整合所述变化。可以存储块字典、块标识符(例如,块向量中的或块向量列中的)、以及块偏移值,并且可以在块字典上进行搜索。值标识符的每一个块的大小可以是固定的行数。利用结构化数据的表中的其它列对数据列进行排序。所述排序可以包括对数据列进行排序以生成值标识符的分组,并且根据前一列选择性地对后续的列的块进行排序,其中如果前一列的块具有单个相同的值标识符,则对后续列的块进行排序。可以为值标识符中的每一个分配块标识符。块标识符的次序可以与值标识符的次序匹配。块标识符可以包括每一个块开始的编号顺序。可以根据二进制编码来压缩每一个块字典以使得使用最小的比特长度来表示每一个块字典的块标识符。对于块字典来说,块标识符仅可以为块标识符的每个唯一值存在一次。可以实施这里描述的主题以实现一个或多个下列优点。诸如包含海量数据的关系表的海量数据库数据的高效处理可能需要高级的数据压缩,以在已安装的存储器(例如,易失性存储器)或在盘存储设备上保持数据巻,并且用于当移动所述数据(例如,从硬盘驱动到存储器)时高效的数据流。压缩可能在信息处理硬件前景中具有多种影响,因为减少的数据量可能需要更少的安装的主存储器或硬盘容量,并且减少的数据流可能对处理器高速缓存、处理器架构以及网络带宽具有较低的要求。所有这些可能对硬件需求、响应时间和总体系统性能具有有益的影响。诸如业务数据这样的数据可以在存储器中被压缩和搜索,这是因为显著的数据压缩可以允许对数据进行节省成本的存储器内处理(例如,可以减少服务的数目和物理存储器的数量)。可以通过为凄t據列的一个或多个块生成块标识符向量和压缩的块字典来实现压缩。有利之处在于可以通过块字典和表示块中的值的出现的向量的组合以压缩方式来表示数据列中多个频繁出现的值。为了减少块字典占用的空间,可以使用最小的比特数量来编码块字典中的块标识符。可以在多个数据块中重复使用块字典以减少块字典的存储空间消耗。可以使用块字典和块标识符向量来压缩多个数据列。对于结构化数据,可以通过基于与其存在数据相关性的其它数据列对数据列进行排序来维持数据依赖关系。在附图和以下的描述中陈述了一个或多个实施方式的细节。进一步的特征、方面和优点将从这些描述、附图以及权利要求书中变得清楚明白。图1A是图示结构化数据的表、用于表的列的字典、属性表和主索引的框图。图1B是图示结构化数据的表、用于表的列的字典、属性表和增量索引的框图。图1C是图示从主索引和增量索引生成结果集合的示例。图2A-2B是图示结构化数据的表的框图。图3是图示属性和关键指标(keyfigure)的基数(cardinality)的表。图4A-4B是图示根据基于向量的压缩而进行压缩的列的框图。图5是图示用于压缩数据和搜索压缩的数据的系统的框图。图6是图示对跨越多列的数据进行排序的表的框图。图7A-7B是图示对数据进行压缩和实现对压缩数据进行搜索的处理的流程图。图8是图示使用压缩的字典对数据列进行压缩的框图。图9是图示对跨越多列的数据进行排序的表的框图。图IO是对数据进行压缩的处理的流程图。在不同附图中,相似的参考标号和标记指示相似的元素。具体实施例方式一般来说,在图1-图10中,可以利用可以被称为基于字典的压缩、比特向量压缩(或基于向量的压缩)、排序比特向量压缩(或基于缩短的向量的压缩)、以及块向量压缩这样的技术的组合来压缩数据。所述数据可以是结构化的业务数据,其中从如下意义上说数据被结构化,即,数据可以是组织在诸如表之类的数据结构中的属性或关键指标,并且属性或关键指标可以具有相关性。例如,在信息表中,行可能在该行的数据之间具有相关性,使得该行的每列中的数据都与该行的其它列中的其它数据相关联。数据的诸如空(null)值的特定值可能在跨越成千或成百万的行中被非常频繁的实例化,所述成千或成百万的行可能位于数据结构的一部分中,诸如在表的特定行中,或者也可能跨越整个数据结构,从这个意义上说,数据可以形成稀疏分布。例如,具有两千万条目的数据列可以包括一千九百万个空条目,其中该一千九百万个空条目位于不一定相邻的不同行中。图IA是图示结构化数据的表105、该表的列的字典110、属性表115、和索引120。总的来说,图1A图示了可以如何为表105中的列125提供字典110、属性表115和索引120,其中,字典IIO为列125中的值规定值标识符(Valueld),属性表115列出各个文档标识符140(Docld)的值标识符135,而索引120列出各个值标识符150的文档标识符145。字典110可以被用来提供可以被称为基于字典的压缩,所述基于字典的压缩可能涉及使用字典110通过利用可以占用较少存储器的标识符表示表中的值来减少存储在表中的数据量。一般来说,字典110是列中出现的值以及值的标识符(即,所述的值标识符)的列表,其可以被排序。举例来说,为了借助基于字典的压缩减少数据表的列所占用的存储器或编号(例如可以实现为整数,而不是表现值本身的串)可被用作在值出现的表中的值的占位符。可以注释对值进行表示所需的最大编号。如果将列的基数定义为列中出现的不同值的数目,并且如果列的总长度为N,则在值C比N小得多的情况下,基于字典的压缩可能带来益处,比如,与将表中的值进行存储相比,存储器消耗减少了。C个值的排序列表可以被称为字典,并且每当需要确定表中出现的编号的值例如需要向用户返回可读结果时用于查找这些值。例如,表105包括列125,其具有诸如INTEL、ABB和HP之类的值。字典110包括值标识符130,其可以表示可以在列125中的不同的值。例如,属性表115包括列125的每行的值标识符。例如,^皮称为文档标识符1("DocIdl")的第一行160包括值INTEL,基于字典110具有与值INTEL相关联的值标识符4,其在属性表115中用值标识符4来表示。表105的列125的值可以用属性表115的值标识符来替换,这可以减少由列125表示的数据的存储器占用空间(footprint)。新表中的值标识符连同字典110—起可以被用来重建列125的值。为了方便值查找并因此以更适于执行查询的方式呈现列的内容,可以生成索引120并且此索引可以替换列125。索引120是由列125的行的值标识符组织而成的列125的行的列表的表。例如,一个列表155指示第四个值标识符与列125的第1、4和8行相关联。举例说明表对存储空间的影响,诸如图1A的表105的表T中的行的数目可以等于N,N为l,OOO,OOO;并且对每行编码所需的字节数可以等于500,其中500字节等于4,000比特,即4千比特。在不压缩的情况下,表T可能需要500字节乘以1000,000的空间,这等于500兆字节的存储空间;并且在一秒内移动表T所需的带宽可能为4吉比特每秒(Gbit/s)。举例说明可以如何组织数据,表T的列A中的不同值的数目可以等于A的基数C,C为250。在该示例中,列A的字典可以是由从0到250的整数编号的C个值的列表。上至250的整数的二进制表示需要8个比特(这是因为2的8次幂等于256),即1字节。假设示例的表T由与列A类似的10列构成,则任意一列中未被压缩列的条目平均占用50字节(500字节除以10列等于每列50字节)。列A的字典就需要100千比特(这是根据这样的事实250个条目x(1个1字节的值标识符+用来表示字典条目中的相应值的50字节)等于大约是12千字节,即大约为100千比特)。因此,利用基于字典的压缩,列A可以占用1,000,000字节,即大约是一兆字节,因为利用基于字典的压缩,列A所需的总空间约为1.01百万字节(压缩的列加上相应字典的空间);而在不压缩的情况下列A占用的标称空间可以是50百万字节。因此,压缩因子可以约为50。图1B是图示结构化数据的表170、表的列的字典172、属性表174、以及增量索引176的框图。大体上,图1B的框图的特征与图1A的特征类似地工作。例如,表105和170二者都存储可以如上所述分别使用图1A和1B的字典IIO、172、利用基于字典的压缩来进行压缩的记录。与图1A的框图相比,图1B的框图包括增量索引176,其可以被用来存储对列的数据的改变,所述改变可以包括增加、修改、或删除。具体来说,增量索引176包括对压缩的列中的数据的改变的结果。作为典型增量索引的一种情况,增量索引176的字典值可以按时间顺序排列(order)。按时间顺序排列可以反映对数据所做的改变在时间上的顺序,如将增量索引176中的值与所指示的文档标识符的关联所指示的那样。例如,与值标识符3相关联的文档标识符1、4和8的列表178可以指示文档标识符1在文档标识符4之前被添加,所述文档标识符4在文档标识符8之前^皮添加。增量索引176的字(incrementalwrite)。图IB的表170可以反映对图1A的表105的改变或图1A的表105的增量。例如,对应于增量索引176的表170的每行可以表示被添加到对应于主索引120的表105的行。再例如,如果表170中的行具有与表105的行相同的标识符,则对应于增量索引176的表170中的该行可以表示对表105中该行的替换。再例如,表170中的行可以表示与表105中具有相同记录标识符的行之间的差异(例如,同一记录的各个列中的值的正的或负的增量差。增量索引176的实施方式可以不同。例如,虽然图1B将增量索引176示为包括对增量值的基于字典的压缩,但并不是必须如此。图1C是图示从主索引和增量索引生成结果集合的示例。例如,增量索引176可以与列的压缩数据的索引(例如,诸如图1A的主索引120)结合使用,其中增量索引176可以将凄t据的变化存储在该索引中。增量索引176和列的压缩数据的索引二者均可以被搜索,并且可以将来自这两个源的结果合并以产生反映对压缩的数据所做的改变(例如,如下面参考增量緩沖器所讨论的那样)。在该例中,通过从主索?)寻找总收入以及向其增加来自增量索引的总收入,来计算公司(标记为"IBM")的总收入。具体来说,命令180"RETURNTOTALREVENUEFORIBMSALES"("返回IBM销售的总收入")可以被服务器程序分成两个操作,其中这两个操作包括第一操作182,其用于来自主索引的IBM的收入(在主索引中,图1A的第5和第6行对应于用于"IBM"的值标识符3,总值为10欧元);以及第二操作184,其用于来自增量索引的IBM的收入(在增量索引中,图1B的第1、4和8行对应于用于"IBM"的值标识符3,总值为9欧元)。并且,可以通过操作数186来合并来自这两个操作的结果,其中合并可以包括向主索引的结果增加增量索引的结果。该增加量可以是正的或负的。可以通过首先删除旧的行然后插入更新的行来处理对主索引中的条目的更新,其中在一种实施方式中删除可以由增量索引中的负增加量来表示,而插入可以由增量索引中的正增加量来表示。图2AJB是图示结构化数据的表202、204的框图。总的来说,第一表202表示没有根据基于字典的压缩进行压缩的销售表的实现方式,而第二表204表示根据基于字典的压缩进行压缩的第一表202的实现方式。第一表202包括表示不同类型数据的列和表示基于不同类型数据的组合的不同记录的行。例如,列表示销售编号206、日期208、地点代码210、产品代码2i2、售出的产品数量2M、包装属性216、货币单位218、单位为美分的总值220、以及发票编号222。第一行224包括作为记录的信息的组合,其包括销售编号S2551、日期20040904、地点代码L164、产品代码P21191等。第二表204将第一表的列206-222的值表示为基于字典的压缩的值。压缩的值的类型包括属性,但不包括关键指标(原因在于那可能与值的压缩无关),并且属性由字典232中的标识符来表示。例如,第一表202的销售编号206的值被压缩为第二表204的第一列中的6比特整数值(因为18比特整数标识符可以表示多达大约25万个值),其中,那些整数值可以代表第一字典230中的值,而第一表202的售出数量关键指标值214未被表示在字典中(并且被表示为浮点数,原因在于这无需与值的压缩相关)。第一字典230中的第一销售标识符0000表示第二表204的第一列228的值S2500。虽然图2A-2B包括特定类型的基于字典的压缩,但是这样的压缩可以不同。例如,虽然在图2的第二表204中没有根据基于字典的压缩来对关键指标进行压缩,但是在某些实施方式中,可以根据基于字典的压缩来对关键指标和属性的组合进行压缩,可以只压缩关键指标,或者可以压缩所选择的关键指标和属性的组合。'图3是图示属性和关键指标的基数的表300。例如,表300可以包括图2A和图2B的第一表202和第二表204的各个列的基数的列表。除了图示基数,表300还包括针对每个基数编码各个列所需的比特数。例如,编码基数3的列M3所需的比特数为2,因为2的二次幂为4,其是大于或等于3的2的最小整数幂。表300的列包括第一列305,其标识另一表的列;第二列310,其指示相关联的列中的值的基数;以及第三列315,其指示基于相关联的基数对相关联的列进行编码所需的比特数。例如,表300的第一条目325指示被标识为M,的属性的列具有基数24,对其进行二进制编码需要5比特(因为2的5ii次幂是大于或等于24的2的最小的整数幂)。表300可以被用来通过基于列宽的值的基数生成列宽的值来减小表对存储空间的影响,这可以与基于字典的压缩一起组合使用。图4A-4B是图示根据基于向量的压缩而被压缩的列的框图。该压缩可以被称为比特向量压缩。总的来说,该压缩可以涉及找到列中最频繁的值并且使用该列的比特向量来表示该值的出现或未出现。例如,l表示该值出现而O表示该值未出现。该压缩还可以包括生成频繁出现的值的出现次数并且从比特向量中去除该频繁出现的值的出现,以生成更小或简化的比特向量。例如,与图4A中的框图序列相比,图4B中的框图序列还包括将排序的值的比特向量简化为频繁出现的值的出现次数以及表示其它值的缩短的比特向量。图4A-4B的列中的值可以是基于字典压缩的值。在图4A的第一系列框图中,如第一箭头404所指示,比特向量406是为列402的值生成的。如第二箭头408所指示,比特向量406由0和1构成(populate),,其中O表示未出现频繁出现的值OOOO,而l表示出现该值。用来构成比特向量的频繁出现的值可以是出现最频繁的值或者仅仅是比其它值出现得更为频繁的值。确定值是否频繁出现可以基于扫描一列数据得到的扫描值的计数(tally),或者基于对被预期为出现最频繁的值的统计分析(例如,在只有异常值为非空的异常表中,可以预期空值为出现最频繁的值)。用于确定值出现是否频繁的出现范围可以被限制为一列数据(即,在逐列的基础上频繁出现的值可能不同)。如箭头410所指示,可以通过去除出现最频繁的值的出现来压缩列402的值。例如,从列402去除值0000以生成压缩的列412。为了基于压缩的列412重建来自列402的值,可以使用比特向量406来指示压缩后的列412中的值的位置以及频繁出现的值的位置。例如,一旦已经执行基于字典的压缩,可以通过如下部署相关列的比特向量来实现进一步的压缩。对于包含诸如空值这样的频繁重复的值的给定列A,在列A中可能找到最频繁的值F并且使用该列的比特向量V对其进行编码。比特向量V可以具有N项,其中N是表示列A中的行的数目的正整数。如果将v写成列A旁边的列,那么V可以包括在A中值F的每次出现旁边的1和A中任何其它行旁边的0。比特向量V可以从列向量A中分离,并且可以从A中删除所有包括值F的行,以生成压缩的列向量A^可以通过根据向量V的指定重新插入值F来从压缩的列向量八*重建列A,并且可以通过基于字典的压缩技术,使用所指定的字典来重建未压缩的列的可读值。举例说明可以如何实现缩减存储空间的例子,对于N等于1,000,000行并具有列A的示例表T,使列A中的最频繁的值F在A中出现990,000次。A中的另外10,000个值可以取自A的字典中列出的不同值的集合中的剩余值,其中,A的字典可以包含总共C个不同值,C为250。在此示例中,列A的比特向量V可以包含1,000,000比特,这大约为1兆比特,即约为125千字节。压缩的列八*可以包括10,000个条目,其中每一个用8比特(即,1字节)整数编码,以给出10千字节(即,10,000个条目x1字节)的空间占用。在不压缩的情况下列A所需的总空间是50MB(如参照未被压缩的示例列A所讨论的)。在利用向量压缩的情况下所需的总空间可以包括字典的空间、用于压缩的列A+的空间、以及用于比特向量V的空间。基于向量的压缩版本的列A所需的总空间可以是147千字节(用于字典的12千字节、用于压缩的列的IO千字节和用于比特向量的125千字节)。可以实现大约为340的压缩因子(即,未被压缩的50,000千字节/根据基于向量的压缩的实施方式压缩的147千字节)。与图4A的第一系列框图相比,图4B的第二系列框图涉及对数据的列进行排序,以帮助生成表示频繁出现的值的出现次数的数量。在图4B的第二系列框图中,如指向排序后的列418的第一箭头416所示,生成排序版本的列414。然后,如指向比特向量422和简化的列424(该简化的列424去除了频繁出现的值0000)的第二箭头420所示,频繁出现的值用比特向量422表示,并且排序后的列418将频繁出现的值置于了新的位置。如第三箭头426所示,生成表示频繁出现的值的出现数量的次数428。此外,比特向量422被化简以去除频繁出现的值的分组,以生成筒化的或缩短的比特向量430。由于一些数据可能没有被排序到比特向量422的前端或顶部,所以缩短的比特向量430可以被用来确定之后在化简的列424中是否出现频繁出现的值。例如,跨越各个列的数据之间的相关性、排序规则、或因子的组合可能阻碍了列的值被排序到频繁出现的值的分組。为了重建完整的列,可以结合简化的列424,^f吏用值在分组中出现的次凄t428和缩短的比特向量430。例如,一旦借助基于字典的压缩和基于向量的压缩对表进行了压缩,那么在许多列具有许多频繁出现的值(例如,多个空值或零值)的许多实例的情况下可以进行更深层次的压缩。表中的行可以被排序为尽可能多地将它们的列中最频繁出现的值置于列的顶部(例如,如参照图6的表600所描述的那样),并且可以为列生成比特向量。在比特向量中,频繁出现的值的最顶部的块可以被替换为记录频繁出现的值在该块中出现得有多频繁的次数(例如,如图4B的编号428所示)。该次数的使用可以使比特向量能够被缩短并且提高总的压缩比。举个更为详细的例子,示例表T可以具有M列,其中第l列中出现最频繁的值为F一l,第2列中出现最频繁的值为F—2,等等,以此类推直到F一M,其中第J列中的值F一J出现的次数可以被写为IF一JI并且第J列可以是任意列(即,从第1到第M列中的任意一列)。可以对列进行这样编号,使得依照最频繁的值F的频率给出列的次序,以便具有最多F值的排在第一而具有最少F值的排在最后。因此,第1到第M列可以这样被编号,使得|F—1|>|F—2|>...>|F_M|(例如,可以是图6的表600中的列602的编号方式)。由第1列对表T的行进行排序,使得所有的值FJ都位于顶部。对于顶部的IFJI行的内部顺序来说,排序顺序可以是无关紧要的,顶部的!F—1|行可以依照第2列排序,以使得所有的值F—2都位于顶部。现在,对于具有值F—2的行的顶部块的内部顺序来说,排序顺序可以是无关紧要的,从而这些行可以依照第3列排序以使得所有的值F—3都位于顶部。行的排序可以继续直到具有值FJM-1)的行的最顶部的块被排序,以将值F—M置于顶部(例如,继续对除了最后的第M列之外的所有列进行排序)。所有F一l行位于顶部,很大数目的F—2行位于顶部,稍少些的F一3个行位于顶部,等等,完整性逐渐减小(如图6的表600中所描绘的)。这种排序方式对于最大化最终压缩比来说可能不是理论上的最佳的排序,但是可能相对容易实施,使得它比更复杂的方法运行得快(例如,更高效地利用处理资源),并且可能往往接近最佳排序。接续这个详细的示例,可以为第1到第M列编写比特向量V一l到V一M,其中第J列的每个比特向量V—J包括用于值F—J的出现的值T以及用于任意其它值的值'0,。结果可以是比特向量Vj的集合,其中每一个比特向量V一J以值Fj的实体块开始。对于每一个V一J,值F一J的实体块在它们的位置中写入数量n—J,该数字记录在V—J中删除了多少比特。对于稀疏表T(即,最频繁的值频繁出现的表,实例中该值不一定相邻),由缩短的比特向量V^J加上数量nj所占用的空间明显小于全部比特向量V一J占据的空间。基于缩短的向量的压缩可以极大地提高列中的值的聚集效应(aggregationeffect)。例如,在所有的频繁值F一J为零的情况下,聚集具有列的长度为n一J的初始段的值可能是司空见惯的(例如,由于n—Jx0等于0),并且开发这种小活(triviality)的代码会比没有基于缩短的向量的压缩的情况更整洁(cleaner)并且更力口快速。举一个可以实现多少压缩的例子,如以上所述再次令表T具有N个行,N为1,000,000;该表具有从列A—1到列A一IO的10个列;在列A—1中出现990,000次的最频繁的值F_l;以及歹'jA—1中的另外10,000个值,这些值包含总共250个不同值,每个值1字节。不利用基于缩短的向量的压缩,而是利用基于向量的压缩,最频繁出现的值F—1的列A*—l会占用IO千字节而比特向量V—l会占用125千字节。利用基于缩短的向量的压缩,缩短的比特向量V*—1可以包含10,000比特并占用1.25千字节。表示排序的列A_l的V_l的1比特的块的数量n一l在十进制计数法中可以是990,000而在二进制计数法中需要20比特(即,不到三字节)。利用基于缩短的向量的压缩而被压缩的A一l所需的总空间可以包括用于字典的空间、用于短列A*—l的空间、用于短比特向量V*—1的空间、以及用于数量n一l的空间。因此,利用基于缩短的向量的压缩的A—1的空间可以是小于27千字节(12千字节、IO千字节、1.25千字节和3个字节)。如上所述,在不进行压缩的情况下,列A—1所需的总空间可能为50兆字节。利用基于缩短的向量的压缩,压缩因子可以大于1800(50,000千字节/27千字节,适当地舍入)。具有基于缩短的向量的压缩的其它列(比如,列A一2至A一IO)的压缩因子可能更小,这取决于有多少个值F—J被排序到它们的列的顶部,其中J为2到10,但是对于稀疏表来说,总压缩因子仍然可以高到足以使这样的压缩非常值得,即使将重建列以及根据需要读出所选择的值所需的开销代码考虑在内也是如此。对于基于向量的压缩和基于缩短的向量的压缩二者来说,可能需要一些开销资源消耗(包括但不限于处理和存储空间消耗)来压缩和解压缩列,以及在没有解压缩整列的情况下方便高效地读取列中的值。附加开销的运行可能既占用空间(包括但不限于主存储空间)又耗费时间(例如,按照处理器核心资源的百分比利用率所测量的时间),并且可能在为了采用基于缩短的向量的压缩而设置阈值时考虑此不利后果(例如,与基于向量的压缩、基于字典的压缩相对比,或者不与它们中任^T一个相对比)。可以利用试:探法并通过在各种表上进行测试来设置所述阈值。在涉及包含海量数据的表的实施方式中,可以利用对压缩技术的选择(例如,不同的技术用于不同的列)来使存储空间消耗而非处理消耗最小化。通过最小化存储空间消耗,可以需要较少的硬件资源,比如刀片式服务器的数量以及安装的物理存储器的数量。此外,当最少的存储器占用量会允许在主存储器(例如,易失性存储器,比如随机存取存储器,其响应时间比诸如硬盘驱动器的、用于永久存储的辅助存储器要快)中压缩以及搜索数据时,压缩数据和响应查询的整体速度可能提高,并且用于实施压缩的处理开销可以较小,在可接受的范围之内。图5是图示用于压缩数据和搜索压缩后的数据的系统500的框图。系统500包括搜索引擎管理工具502、主机504和存储器506。通常,系统500可以被用于通过使用搜索引擎管理工具502来搜索主机504的压缩后的数据,并且所述H据可以由主机504来组织和压缩。此外,保存在主机504的存储器中的数据可以以压缩或未压缩的形式永久存留在存储器506中。搜索引擎管理工具502可以是集成的服务,其具有执行搜索和压缩的服务,冗余地实施在每个主机504上(例如以提供相互监视和备份这样的方式)。主机504可以被组织成使得主机504中的每一个保存数据行的一部分。例如,第一主机508可以保存第一个一百万行,而第二主机510可以保存第二个一百万行。跨越主机504的数据行分布可以是均匀的,这可以促进并行处理。例如,可以这样做以促进对跨越主机504解压缩、搜索以及重新压缩数据行的并行处理。这样分布数据的结果是,从一到M的一系列列中的每列,其中M是正数,可以被分为从1到N的若干部分,其中N是正整数,并且每个主机被分配一个部分,其中每个主机负责被分配至该主机的那个部分(例如,负责所分配的部分的索引和压缩,或者负责所分配的部分的解压缩、4叟索以及重新压缩)。数据的表的逻辑索引可以被存储在主机504之一中,并且该逻辑索引可以被用来确定数据驻留在主机504中的哪里,并且用来协调处理。例如,第一主机508包括逻辑索引518,其可以指示数据行位于主机504的哪里。作为协调处理的示例,搜索引擎管理工具502可以向第一主机508查询响应于搜索的结果并且将结果合并,以提供给搜索引擎管理工具502。主机504可以是共享存储器506的刀片式服务器。存储器506可以包括对应于来自数据库的一个或多个表中的每一个的索引,例如第一索引512,在主机504为所述数据库进行数据压缩。例如,表可以是多维OLAP(OnLineAnalyticalProcessing,在线分析处理)立方体的事实表(facttable)和维表。索引可以包含具有索引结构的元数据的逻辑索引和压缩后的列的集合。例如,第一索引512包括逻辑索引514和被压缩的列的集合516,其中逻辑索引514可以包括主机504的数据的元数据。主机504中的每一个可以负责压缩它们所负责的数据行。例如,第一主机508可以负责压缩在被压缩的列520中的数据行。所执行的压缩可以是在本文档中描述的压缩类型冲的任何类型。诸如基于缩短的向量的压缩的压缩方案可以与每个索引一起存储在主机上,并且在分离索引的情况下由逻辑索引来对其进行协调。主机504中的每一个还包括增量緩冲器,例如,第一主机508包括第一增量缓沖器522。增量緩沖器可以存储主机的各个索引部分的任何变化。例如,第一增量緩沖器522可以为表的第一部分存储对存储在数据列522中的数据的变化。增量緩冲器可以被用来存储主机504中的数据的变化,而不是要求响应于每次变化而更新数据(例如,更新可以是异步的,以避免在对数据进行查询期间妨碍性能)。与将变化同步写入所存储的列的情况相比,无需针对各个变化而更新压缩后的列会使得压缩能够将整体系统性能提高到更高的程度。例如,如果更新被积累在增量緩冲器中并且以较低的频率利用积累的更新来更新主索引,则可以减少与整合更新相关联的处理开销,这是因为用于压缩更新的主索引的开销资源也会以较低的频率被消耗。例如,不对列索引进行1000个小更新以及每次都不得不对索引进行的解压缩和重新压缩,而是可以将所述1000个更新写到增量緩冲器中,然后将它们全部一起写到主索引中,这样仅仅需要一次解压缩和重新压缩周期,从而实现将开销资源消耗减小一千倍。为了找到搜索结果,增量緩冲器可以与主索引中的被压缩的数据一起被搜索,并且来自增量緩冲器的结果可以与来自主索引的结果合并,以生成结合了变化的结果。在一些实施方式中,根据实施方式和配置细节,主机504中的每一个还可以包括一个或多个增量緩沖器,例如,每一个索引一个增量緩冲器。图6是图示对跨越多列的数据进行排序的表600的框图。行604中的每一个包括在列602之间相关的值。例如,第一行608包括表示业务对象的结构数据的值的组合,其中第一行608中的每个值与第一行608中的其它值相关,以使得对第一列610的排序也对其它列中的数据进行排序,从而保持第一行608的值的组合。业务对象可以被建模为连接表(joinedtables)的集合。建模为连接表的集合可以是以业务对象能够被建模成连接表的集合的方式定义业务对象的结果,因此,搜索引擎可以通过对表的行进行搜索并计算业务对象的指定连接来操控对象。表600中的数据可以是基于字典的压缩值。表600中的数据可以是如下行为的结果在基于向量的压缩技术的准备中将数据排序以将出现最频繁的值分组。例如,对于列602中的每一个来说,值O可以是出现最频繁的值,并且行可以已经被排序,以使得在列602的最顶部生成该值的分组。表600中的行604的排序可能已经考虑了列602之间出现最频繁的值。例如,合计行606指示列602中的每一个中出现最频繁的值的出现次数。列602可以已经被排列为使得第一列610的出现最频繁的值比列602中的每一个的其它频繁出现的值出现得更频繁,并且其它列的最频繁出现的值也已经被排列为使得在列中出现较频繁的值被从A一2到A一9排列。在对列的排序的基础上,可以对行进行排序,以在行的一端生成尽量多的、分组中的出现频繁的值,并且该排序可以考虑列之间的相关性。例如,可以按照列包含多少个0值,如合计行606所示,将列水平地排列为A一l到A—9。被标记为列A一l的第一列610可以对其所有行排序为将所有0值置于顶部。然后,被标记为列A—2的第二列612可以对第1到第19行排序为将这些行的0值置于顶部。被限制于第1到第19行的第二列612的排序可以基于维持第一列610的顶部最多值的排序次序以及数据行之间的数据的相关性。例如,由于第一列610的第l到第19行包括该列的出现最频繁的值,所以,为了维持最频繁出现的值在第1到第19行的分组,在第二列612中可以仅仅对那些行进行排序。对于剩余的列中的每一个,可以遵循这种排序技术。例如,被标记为列A—3的第三列614可以对第1到第l5行进行排序以将那些行的0值置于顶部,其中其它行的O值可以保持在它们的位置(例如,第17行包括0值)。再例如,被标记为列A—4的第四列616可以对第1到第14行进行排序以将0值置于那些行的顶部;被标记为列A—5的第五列618可以对第1到第IO行进行排序以将那些行的0值置于顶部;被标记为列A一6的第六列620可以对第1到第8行进行排序以将那些行的0值置于顶部;被标记为列A—7的第七列622可以对第1到第7行进行排序以将那些行的0值置于顶部;被标记为列A一8的第八列624可以对第1到第6行进行排序以将那些行的0值置于顶部;被标记为列A_9的第九列626可以对第1到第4行进行排序以将那些行的0值置于顶部。可以使用基于向量的压缩,诸如参照图4B描述的基于缩短的向量的压缩来压缩被排序的列中的每一个。列的排序可以通过将较大块的频繁出现的值推到列的一端,从而例如使得利用此排序生成的比特向量比在不进行这样的排序的情况下生成的比特向量短,从而使压缩的存储空间节省最优化。尽管表600包括可以作为排序的结果的特定数据组织,但是排序可以不同并且数据可以不同。例如,尽管对于列602中的每一个来说,同样的值0是出现最频繁的值,但是表可以不同,并且对于列602中的每一个来说,不同的值可以是出现最频繁的值。再例如,一列中的出现最频繁的值可以被用来对所有列排序,或者不需要对所有列排序。图7A-7B是图示压缩数据和实现对压缩后的数据的搜索的处理700和702的流程图。处理700、702可以由图5的主机504来实现。例如,主机504中的每一个可以对该主机所负责的数据部分执行处理700。被压缩的数据可以是结构化的业务数据。可以在存储器中压缩和搜索数据,这是因为数据的显著压缩可以允许对数据进行节省成本的存储器内处理(例如,可以减少服务的数目或物理存储器的数量)。通常,在图7A的处理700中,对存储器中的数据列的基于字典的值进行排序(704),生成表示列的频繁出现的值的向量(706),生成表示频繁出现的值的数目(708),并且存储所述数目和缩短的向量(710)。基于字典的值的排序可以包括针对一列或多列值从最低值到较高值的排序。如果对多列值排序,则所述排序可以包括基于列的顺序在其它列之前对一些列进行排序(例如,基于出现最频繁的值的数目在表的列中的顺序)。例如,可以执行基于参照图6的表600描述的、基于列602的顺序对列602进行的排序。所述排序可以考虑列之间的数据的相关性。例如,基于字典的值可以表示利用对于同一行跨列的相关性来进行结构化的数据,并且可以维持行中的值的关联性。所述排序可以在服务器中进行,所述服务器诸如图5中的主4几504中的一个。例如,对基于字典的值的排序可以包括对于表的每一列,对列进行排列,以使得首先排列任何列中包括出现最频繁的值(MFOV)的列,并且基于之前一列的最顶部范围内的记录对其它列进行排序(714)。生成表示列的频繁出现的值的向量(706)。该向量可以是利用比特表示行中频繁出现的值的出现或未出现的比特向量。可以为所有列或仅为某些列(例如,图5的主机504中的各个主机)。频繁出现的值可以、但并不一定是出现最频繁的值,诸如在列的范围内出现最频繁的值。例如,可以生成每列的出现最频繁的值的比特向量表示(716)。生成表示频繁出现的值的数字(708)。每个数字可以表示列中频繁出现的值的出现次数。例如,图4B包括数字6,其表示频繁出现的值1000出现6次。出现的次数可以被限制为在列的一端(例如,在顶部或底部)频繁出现的值的组中的出现的次数。例如,一列可以具有一组在顶部频繁出现的值,所述数字可以表示该值在那个组中出现的次数,并且所述列可以包括该值的其它实例。例如,可以生成表示在每列的最顶部部分频繁出现的值的实例的数字(718)。存储数字和缩短的向量(710)。例如,表示频繁出现的值的出现的数字可以与缩短的向量一起被存储。例如,可以为表的每一列存储一组数量和比特向量。缩短的向量可以是表示表示频繁出现值的出现的向量,并且从该向量去除了所述数字所表示的值的出现以生成所述缩短的向量。除了存储缩短的向量之外,可以从列中去除在所述值的组中频繁出现的值的实例,以生成缩短或简化的列。例如,可以去除包括出现最频繁的值的比特向量的顶端(720),并且可以存储每一列的表示出现最频繁的值的出现次数的数字和缩短的比特向量(722)。同样,可以去除包括出现最频繁的值的组的列的顶端或者可以去除出现最频繁的值的所有实例(例如,最顶端的实例和其它实例,如果有的话),以生成缩短的列(并且,例如可以使用该比特向量重建出现最频繁的值的所有实例)。一般来说,除了实施图7A的处理700的子处理之外,图7B的处理702还包括生成基于字典的压缩值(712;例如,如参照图1A所描述的那样),缩短表示列的值的向量(720;例如,如在以上段落中描述的),将压缩后的列存储在存储器中(722),以及按照需要对列进行解压缩和重新压缩列,以执行查询(724)。对压缩后的列执行搜索可以包括将压缩后的列的数据加载到存储器中(例如,将来自永久存储器的压缩数据加载到非易失性存储器),将该数据解压缩为临时的结构,以及按照该搜索的规定选择行。尽管图7A和图7B的处理700、702包括特定顺序的特定处理,但是可以存在附加的、更少的或不同的子处理,并且那些子处理可以是以其它不同的顺序。例如,可以基于列的出现最频繁的值的比特向量表示对列进行排序,而不是对整列进行排序(例如,可以仅仅将出现最频繁的值排序到列的一端,而其它值不需要在它们之间进行排序)。再例如,可以基于对是否期望用一种类型的压缩(如果有的话)来优化性能(例如,降低存储器消耗)的确定,来应用基于字典的压缩、基于普通向量的压缩、以及基于缩短的向量的压缩。例如,如果预期与列的基于非字典的值相比,基于字典的值和字典将消耗更少的存储器,则可以#1行基于字典的压缩。再例如,可以只对具有属性而非关键指标的行使用任意类型的压缩来进行压缩。图8是图示使用压缩后的字典的数据列的压缩的框图。该图包括压缩后的数据的列802、806、块标识符的向量810、块字典的列814、和对应于块字典的偏移值的列820。图8中图示的压缩可以被称为"块向量压缩",这是因为数据块可以被压缩为块标识符的一个或多个向量。当数据的压缩被应用到诸如行的块这样的数据块时,该压缩可以被称为逐块的压缩。该压缩可以使用基于字典的压缩并且可以是上述的基于向量的压缩和基于缩短的向量的压缩的技术的可替代技术。参照图8描述的压缩可以在一列或多列包含若干值并且它们在相应列中各自被重复多次(相对于例如一列或多列仅仅一个值被重复多次)的情况下作为一种选择而应用。该压缩可能特别适用于压缩数百万行或数十亿行,其中所达到的存储效率可以远远胜过由用于压缩的处理开销而引起的损失。一般来说,图8的压缩包括将排序的数据列划分为块并且为每一个块创建指代块字典的块标识符向量。块字典可以仅仅包含出现在块中的值。可以使用最小数目的比特来对块标识符进行编码(例如,用对块的所有唯一块标识符进行二进制编码所需的最小量的比特长度来编码的二进制)。块字典可以将每个块标识符映射到表示数据列中的唯一值的值标识符。可以在通过基于字典的压缩来创建的列字典中查找值标识符(如以上参照基于字典的压缩来描述的)。参照图8,压缩后的数据的第一列802包括表示已经根据基于字典的压缩而被压缩的数据的值标识符。例如,值标识符"0007"可以表示字符串"INTEL"。如箭头804所指示,压缩后的数据的第一列802可以被排序,以生成压缩后的数据的第二列806。压缩后的数据的第二列806被排序,以使得相同的值标识符被分在一组。尽管压缩后的数据的第二列806的排序包括从较低编号的值标识符到较高编号的值标识符的排序,但是也可以使用其它产生多个值标识符被分在一组的结果的排序技术。基于压缩后的数据的第二列806生成块标识符向量810,如箭头808所指示。向量810包括用于压缩后的数据的第二列806的每个值标识符的块标识符。可以通过为每个唯一的值标识符分配唯一的块标识符,并且为相同的值标识符分配相同的块标识符,来生成向量810,其中,至少在数据块(在此示例中,其是值标识符块)的范围内所述块标识符和值标识符是唯一的。每一个块标识符可以是一个具有基于块的块标识符的数量的最小二进制编码的整数。向量810可以是每个块的向量的集合,其中,块的一系列块标识符构成那个块的向量。例如,在图8中,块的大小为三行(在实践中,对特定类别的数据表来说,块大小可能是数百行或数千行;可以针对功效而对块的大小进行试验或者任意选择块大小)。对于值标识符的第一个块828,所有的值标识符是相同的(即,"0000"),以使得相同的标识符(在此例中为'O,)被包括在向量810中。对于第二个块830,存在两个唯一的值标识符("000r,和"0002"),以使得两个唯一的块标识符用于在向量810中表示那些值的那个块("O"和'T,),其中值标识符OOOl、0001、0002的顺序被表示为块标识符O、0、1的顺序。对于第三个块832,由于块标识符的每一个在该块的范围内是唯一的,因此值标识符0002、0003、0004的顺序4皮表示为向量810中的块标识符00、01和10的顺序。与第二个块830相比,对于第三个块832,使用2比特来编码向量810中的块标识符,这是因为对于块标识符的每一个块均使用最小比特数量来表示块标识符。尽管向量810包括用于具有相同重复值的块向量的条目,但是向量810的块向量可以按照惯例什么都不包含,以给出O千比特的总大小。如果向量具有1,024行的块大小,那么对于包含两个不同值的1024行的块,块标识符向量可以包含一连串1,024比特,每个比特为0或1,以给出1千比特的总大小。对于包含1,024个不同值的1024行的块,块标识符向量可以包含一连串IO比特整数,以给出IO千比特的总大小。块字典列814包括块标识符列816和值标识符列818。在列8I4中,每个块由块字典来表示,其中块字典由块标识符和相关联的值标识符的组合组成。块标识符列816是基于块标识符向量810而生成的,如箭头812所示。与块标识符向量810相比,块标识符列816包括块的块标识符的最小量。所述量在下述意义上来说是最小的在块的范围内,每一个所使用的块标识符在该块的列806的列表中仅出现一次。而且,列806中列出的块的块标识符以规范次序列出,比如以数值大小顺序。例如,在向量810中按照0、0、0的顺序表示的值标识符的第一个块828在块标识符列816中被表示为单个块标识符'O,。再例如,在向量810中按照00、01、10的顺序表示的值标识符的第三个块832被表示为块标识符00、Ol和Ol,这是因为每一个块标识符在那个块中是唯一的。偏移值列820对应于块字典列814的块字典。偏移值列820包括每一个块的偏移值,并且每一个偏移值指示在块字典列814中用于数据块的字典从哪里开始。例如,第一偏移值834指示用于第一块压缩后的数据的块标识符在偏移O处开始。再例如,第三偏移值836指示第三块压缩后的数据的块标识符在偏移3处(即,距离块标识符列816的顶部3行)开始。块标识符列822与块标识符列810相同并且被重复以说明偏移值列820的偏移值与用于每一个块的块标识符列822之间的对应关系,以及块向量列822中的块向量的块标识符如何与偏移值列820的偏移值相关联。偏移值可以极大地便利快速的值查找,并且如果块字典被重复使用,则偏移值可以是强制性的。例如,对于1K或1,024的块大小,偏移值的向下巻动(scrollingdown)列820可以实现块被定位快一千倍。此外,偏移值可以是实现块字典的重复使用的实际方式。为了节省空间,比如服务器的易失性存储空间,仅仅需要保存块标识符的字典列814、偏置值列、以及块标识符向量810以代替值标识符的列,比如值标识符列802。参照图8所讨论的压缩或类似的技术可以被实施在一个或多个服务器上,比如图5的主机504。所述技术可以在不同的数据列上并行地运行(例如,与主机504的每一个上的列一起)。所述压缩在下面的情况下是有优势的例如,如果块包含重复1,024次的单个值,其中块大小为1,024,并且所述单个值被列在用于那个块的块字典中,则可以需要O比特来编码该值被重复的事实(例如,因为仅仅块标识符'O,以及相关联的值标识符就可以表示该块中的值的1,024个实例并且按照惯例可以不存在块向量)。再例如,如果块包含两个值(例如,块范围内的唯一的两个值)并且这两个值被列在用于那个块的块字典中,则需要l比特来为值所存在的块向量的每一行进行指定(例如,用于块向量的条目的列表的O或1)。再例如,如果块包含三个或四个不同值,又被列在块字典中,则需要2比特来为值所存在的块向量的每一行进行指定(例如,00、01、IO或OI)。因此,总的来说,如果块包含N个不同值使得大于或等于N的2的最小整数幂为2的P次幂,则需要P比特来为块向量中的每一行指定其采用块字典中的那个值。在最坏的情形下,如果块包含1,024个不同值,则需要10比特来为每一行指定其采用哪个值(因为1,024等于2的IO次幂)。再举例说明用于块向量压缩的块字典,假设列(例如,值标识符列806)具有基数C,其中C为整个列中不同值的数目,并且这些值中的许多可以重复多次以使得可以应用块向量压缩。如果C在524,288(即,2八19)到1,048,576(即,2A20)之间,则用于列的值标识符需要20比特。对于包含单个重复值的1,024行的块,块字典可以包含一个由20比特指定的条目。对于包含2个不同的值的1,024行的块,块字典可以包含两个块标识符比特和两个20比特值标识符比特,以给出总共42个比特(即,每个值标识符20比特以及每个块标识符1比特)。对于包含1,024个不同值的l,O24行的块,块字典可以包含1,024个块标识符,每个具有10比特,并且包含1,024个值标识符,每个具有20比特,以给出共30千比特(即,30比特乘以l,O24个条目)。在每种情况中,可以需要再多几个比特来编码偏移,其中,比特的数目取决于整个块字典的长度。对于上述情况,将块向量比特总数和块字典比特总数相加分别给出针对所考虑的这三种示例情况的20比特、43比特和卯千比特。同时使用基于字典的压缩和基于比特向量压缩二者的最坏情形的总空间可能是仅仅针对列使用基于字典的压缩所需的总空间的二倍,这表明基于向量的压缩可能仅仅对应用于其中大量块包括多个重复值的列的情况有利。为了找到与给出的块标识符相关联的用户可读的值,可以有两种字典查找方法,尽管可能很少被要求执行这两种查找方法。例如,响应于对具有给定值的所有记录的查询,首先可以使用用于列的字典来查找与值(比如关键指标或属性)相关联的值标识符,然后可以使用块字典来查找与给定的块中的值标识符相关联的块标识符。再例如,从块标识符到值,块字典814可以被用来查找对应于块标识符的值标识符,然后用于列802的字典可以^L用来查找对应于值标识符的值。为了在多个块中查找值,多个块字典可以被用来寻找与各个块相关联的块标识符。尽管图8包括特征的特定组合作为压缩的部分,但是可以有所变化。例如,块标识符对于数据块来说可以是唯一的。再例如,块标识符不需要被压缩到最小比特数量以表示块标识符的块。再例如,块标识符不需要在'0,处开始或者是递增的顺序。再例如,尽管在对图8的压缩的描述中使用"每一个"这个词,但是所述压缩不需要完全如此应用。例如,并非必须压缩每个块并且不需要对于每个块都存在偏移值。再例如,可以在若千块之间重复使用块字典。例如,块的值标识符对于另一块(比如旧块)来说可能是相同的,或者非常相似的。在这种情况下,可以尽可能多次地使用旧字典。例如,如果新块(即,随后的块)中的值与旧块中的值相同或者构成它们的子集,则可以照样使用旧的块字典,并且新块所需的唯一编码(onlycoding)可以用于将其偏移设置为与用于旧块的偏移相同(就好像重复使用同一块字典一样)。在为与旧块相比具有附加块标识符的随后的块而重复使用字典之前,需要以下三个条件随后的块除了出现在旧块中的那些值之外还包括一个或多个值,该一个或多个值可以称为N个附加值;旧块包括可以用P比特编码的M个不同值;并且总数M+N仍然小于或等于2AP,以使得附加的块标识符-值标识符对可以被附加到旧字典中。新值可以被附加到旧字典中并且新块的偏移可以被设置成与旧块的偏移相同。以这种方式,旧字典的新条目不需要干扰用于旧块的字典的可用性(这是因为用于旧块的块标识符-值标识符对未改变)。如果列中的许多块与旧块相似,则块字典的重复使用可以将存储列所需的空间减小很多倍。图9是图示对跨越多列902的数据进行排序的表900的框图。列902中排序的数据可以被用于块向量压缩,参照图8和图IO对此进行讨论。表900的列可以分散在多个服务器上,比如图5的主机504。总的来说,表900包括数据行卯4和列902,其中一个或多个数据行可以表示具有列902之间的数据相关性的结构化数据。例如,业务对象可以被建模为连接表的集合。因为表900中的数据跨越列902具有数据相关性,所以对列的排序可以考虑这些相关性并且会影响得到的排序结果。表900中排序后的数据可以表示用于块向量压缩的前提条件,即数据可以被排序为尽可能多地将多个重复值分在一组。困难在于为了优化列902的顺序而对表900所进行的排序将全部行进行了排序,如此一来,结果是其它列可能变得更加混乱。对表900中的数据的排序可以表示这样的排序,其中行904被排序得足够好以生成良好顺序的所有的相关表列902。假如存在各种实际的约束,可以不必要优化该技术(例如,在数学意义上进行优化,以最大化所排列的块的数目),并且快速运行的鲁棒试探法(robustheuristic)对于构想的应用可能已经足够好了。对表900中的数据的排序可以是用于在块向量压缩之前对数据进行排序的许多技术中的一个。表的阴影部分可以指示除了对其它部分(例如,同一行集合中的其它列)的排序而产生的排序之外,没有排序。表900中的数据可以是作为基于字典的压缩的结果的值标识符。列908包括数据行904的标签,包括块标签和行标签。例如,第一行906位于块B1中并且是行1。表900中的数据是从第一列到第二列等等往下按照列902的顺序对列902进行排序的结果。列902未进行排列,但是在某些实施方式中可以将其排列。例如,在待排序的列的顺序上,被预期或已知具有较少唯一值的列可以被较早地排列,这是因为可以预期具有较少唯一值的列具有较大的分组值,以使得块向量压缩比用于在顺序上较晚的列的块向量压缩更高效。此外,不需要对所有列进行块向量压缩并且可以仅对选定的列应用块向量压缩,选定的列诸如满足某些规定的阈值标准以便充分受益于块向量压缩的列。例如,对利用块向量压缩和不利用块向量压缩的列的空间需求进行比较,并且给出块向量压缩的编码和运行时开销的影响。可以比较关于空间效率和开销的度量以确定在特定实施方式中是否可以对一列或多列利用块向量压缩。表卯0中的数据是对列进行如下排序的结果。在此示例中,表900具有五列Al到A5以及35行,35行被分为七个块B1到B7,每块具有5行,其中每列条目具有用值标识符0到3编码的4个可能值。从第一列Al到第五列A5对列进行排序,结果是对前一列的排序影响对后续列的排序。具体来说,对列Al进行排序使得值标识符是上升的。列Al中具有统一值标识符的任意块可用于对第二列A2进行排序。在表900中,这些块为Bl、B2、B4和B7。例如,在列Al中块Bl的所有条目为'0,。歹'JA2的块Bl、B2、B4和B7各自被内部排序使得值标识符是上升的。具有统一A2值标识符的任意块可用于进一步排序这些块是块B1和B6。列A3的块B1和B6各自被内部排序使得值标识符是上升的。具有统一A3值标识符的任意块可用于进一步排序这包括块Bl。列A4的块Bl被内部排序使得值标识符是上升的。块B1不包含统一A4值标识符,所以没有进一步的排序(即,在A5中没有值标识符的排序)。因此,总的来说,排序包括对第一列进行排序使得相似的值标识符被分在一组,比如以上升或下降的顺序进行排序。对于后续的列,仅对在前一列中具有相同值标识符的块进行排序,并且对那些块进行排序使得存在值标识符的分组。所述排序可以继续,直到前一列的块没有相同的值标识符为止。在一些实施方式中,排序可能产生妨碍表更新这样的不利影响,这可能要求到表行的足够的随机访问。可以通过分离的增量索引来收集和处理更新(如上所述),分离的增量索引可以周期性地与主表索引合并(即,异步地)。合并处理可以包括重建表索引,因此上述的排序顺序并不妨碍表更新。具体来说,在包括对列重新排序的压缩技术与用于处理更新的、像上述的增量索引方法那样的緩沖方案一起实施的情况下,排序顺序不会成为妨碍。图10是压缩数据的处理1000的流程图。处理1000可以由图5的主机504来实施。例如,主机504中的每一个可以对主才几所负责的数据的部分执行处理1000。被压缩的数据可以是结构化的业务数据。可以在存储器中压缩和搜索数据,这是因为数据的显著压缩可以允许对数据进行节省成本的存储器内处理(例如,可以减少服务器的数目或物理存储器的数量)。通常,处理1000可以被称为块向量压缩,其可以指将数据逐块压缩成向量。处理1000包括根据基于字典的压缩来压缩一列或多列数据以生成值标识符列(1002),对值标识符排序(1004),生成块标识符(1006),生成块字典(1008),以及生成偏移值(1010)。根据基于字典的压缩来压缩一列或多列数据以生成值标识符的列(I002)。基于字典的压缩可以基于列中的值的基数使用最小比特数量来表示值标识符。对值标识符进行排序(1004)。对值标识符进行排序可以包括对多个值标识符列进行排序并且还可以包括基于其他列的排序后的值标识符对值标识符列进行排序,例如参照图9所描述的那样。生成块标识符(1006)。可以为选定的列中的每一个值标识符块生成块标识符。例如,对列应用块向量压缩进行确定,并且可以为该列的每一个块生成块标识符,其中,对于每一个块,为块中的每一个唯一的值标识符生成唯一的块标识符,并且相似的块标识符被用于相似的值标识符。生成块字典(1008)。可以为每一个块生成块字典,并且对于每一个块字典,块标识符可以与值标识符相关联,其中仅为在块的范围内的每一个唯一的块标识符包括块标识符。例如,参照图8,第一个块828的块字典具有一个唯一的块标识符'O,(838)。在块字典列中可以包括多个块字典。例如,参照图8,在块字典列814中包括多个块字典。可以重复使用块字典。例如,用于一个块的块字典可以被重复使用于具有相同的块标识符或具有附加块标识符的后续的块(如上所述)。可以生成偏移值(1010)。偏移值可以指示块在在块字典列中的哪里开始,并且在块向量中偏移值可以与块标识符相关联。偏移值可以被包括在与块向量的向量相关联的块偏移列中(例如,如具有与块向量列822相关联的偏移值的偏移值列820所示)。尽管图10包括特定组合和类型的子处理,但是处理1000、块向量压缩或二者均可以包括更少的、不同的或附加的子处理。举例来说,并非所有列都需要排序;并非所有列都需要根据块向量压缩来压缩;不需要对所有列或任何列都执行列的基于字典的压缩;对列的排序不需要根据对其它列的排序的结果;可以重复使用块字典;附加的子处理可以包括接收对一列或多列数据的查询,并且块向量可以与块字典协同使用以找到匹配查询准则的数据;可以使用增量緩冲器和可以并行地利用块向量搜索该增量緩冲器,并且从增量緩冲器得到的结果可以与其它结果合并;可以存储块向量、块字典和偏移值;可以不生成偏移值;等等。尽管每幅图描述了特征的特定组合,但是实施方式可以改变。例如,附加的、不同的或更少的组件可以被包括在图5的系统500中。这里描述的主题可以用包括本说明书中公开的结构装置和它们的结构等同物的数字电子电路或计算机软件、固件、硬件、或者它们的组合来实现。这里描述的主题可以实现为一个或多个计算机程序产品,即,有形地具体实施在信息载体中(例如在机器可读存储设备中或在传播信号中)的一个或多个计算机程序,以供数据处理装置执行,或者用于控制数据处理装置的操作,所迷数据处理装置例如可编程处理器、计算机或多个计算机。计算机程序(也称作程序、软件、软件应用或代码)可以用任何形式的编程语言来编写,编程语言包括汇编语言或解释语言,并且计算机程序可以任何形式配置,包括作为独立程序或者作为模块、组件、子程序、或者其它适合用于计算机环境的任何单元。计算机程序不一定对应于文件。程序可以存储在保持其它程序或数据的文件的一部分中,存储在专用于所述程序的单个文件中,或者存储在多个协作文件中(例如,存储一个或多个模块、子程序或代码部分的文件)。计算机程序可以被部署成在一台计算机上或者在位于一个地点或者分布在多个地点并通过通信网络互连的多个计算机上执行。本说明书中所描述的处理和逻辑流,包括这里描述的主题的方法和步骤,可以由一个或多个可编程处理器来执行,该可编程处理器执行一个或多个计算机程序,以通过对输入数据进行操作并生成输出来执行这里描述的主题的功能。所述处理和逻辑流也可以由专用逻辑电路来执行,并且这里描述的主题的装置也可以被实现为专用逻辑电路,专用逻辑电路例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。举例来说,适合于执行计算机程序的处理器包括通用微处理器和专用微处理器两者,以及任何种类的数字计算机的任何一个或多个处理器。一般来说,处理器将从只读存储器、随机访问存储器或者二者接收指令和数据。计算机的主要元件是用于执行指令的处理器以及用于存储指令和数据的一个或多个存储设备。一般来说,计算机还将包括用于存储数据的一个或多个大容量存储设备,或者被可操作地耦接到所述一个或多个大容量存储设备,以便从其接收数据或向其发送数据或者二者都进行,大容量存储设备例如磁盘、磁光盘或者光盘。适于体现计算机程序指令和数据的介质包括所有形式的易失性存储器(例如,随机访问存储器)或非易失性存储器,举例来说,包括半导体存储设备,例如,EPROM、EEPROM、闪存设备;磁盘,例如内部硬盘或可移动盘;磁光盘;以及CD-ROM和DVD-ROM盘。所述处理器和存储器可以由专用逻辑电路补充,或者合并到所述专用逻辑电路中。为了提供与用户的交互,这里描述的主题可以在具有用于向用户显示信息的显示设备以及用户可以通过其向计算机提供输入的键盘、定点设备的计算机上实现,显示设备例如CRT(阴极射线管)或LCD(液晶显示器),定点设备例如鼠标或跟踪球。其它类型的设备也可以用来与用户进行交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈、或触觉反馈;并且,来自用户的输入可以被以任何形式接收,包括声音、语音或者触觉输入。这里描述的主题可以在计算机系统中实现,该计算机系统包括后端组件(例如,数据服务器)、中间件组件(例如,应用服务器)、或者前端组件(例如,具有用户通过其可以与这里描述的主题的实施方式进行交互的图形用户界面或网络浏览器的客户计算机),或者这样的前端组件、中间件、后端组件的任意组合。通过任何形式或介质的数字数据通信,例如,通信网络,可以将系统的组件相互连接。通信网络的示例包括局域网(LAN)和广域网(WAN),例如因特网。计算机系统可以包括客户机和服务器。客户机和服务器通常在逻辑意义上远离对方,并且典型地通过通信网络来进行交互。客户机和服务器的关系借助运行在各自计算机上的彼此具有客户机-服务器关系的计算机程序而发生。已经按照具体实施例描述了这里描述的主题,并且其它实施例也可以被实施并且也在所附权利要求书的范围内。例如,操作可以不同但仍然达到期望的结果。在特定实施方式中,多任务和并行处理可以是优选的。其他实施例也在所附权利要求书的范围内。权利要求1.一种计算机程序产品,有形地具体实施在计算机可读介质中,该计算机程序产品可操作地使得数据处理装置执行以下操作,所述操作包括根据基于字典的压缩来压缩数据列,所述压缩包括生成值标识符列,值标识符中的每一个表示所述数据列中的一个唯一值;对所述值标识符进行排序;为所述值标识符的每一个块,生成块标识符的第一列表,所述生成包括具有用于块中的每一个唯一值标识符的唯一块标识符;以及对于相同的块标识符具有相同的值标识符;生成块字典列,所述生成块字典列包括为每一个块生成块字典,所迷块字典包括块标识符的第二列表,每一个块标识符与一个值标识符相关联;以及块标识符,为所述第二列表中每一个唯一的块标识符的值而存在于所述块字典中;以及生成块偏移列,所述块偏移列的每一个值指示在块字典的列中块从其开始的偏移。2.如权利要求l的产品,其中,值标识符是表示表的同一行之间具有数据相关性的结构化业务数据的值。3.如权利要求2的产品,其中,所述业务数据包括^支建模为连接表的集合的业务对象。4.如权利要求l的产品,其中,在多个硬件服务器上并行地执行所述产品的操作。5.如权利要求l的产品,其中,所述数据列的变化被存储在与所述数据列分离的增量緩沖器中,并且所述变化被异步地整合。6.如权利要求l的产品,其中,所述操作还包括存储所述块字典列和所述块偏移列以实现在所述块字典上的搜索。7.如权利要求l的产品,其中,所述值标识符的每一个块的大小是固定的行数。8.如权利要求l的产品,其中,所述操作还包括利用结构化数据的表中的其它列对数据列进行排序,所述排序包括对数据列进行排序以生成值标识符的分组;以及根据前一列选择性地对后续列的块进行排序,如果前一列的块具有单个相同的值标识符,则对后续列的块进行排序。9.如权利要求l的产品,其中,为所述第一列表中的值标识符的每一个分配块标识符,所述第一列表中的块标识符的次序与所述值标识符的次序匹配,所述第一列表中的块标识符包括每一个块开始的编号顺序,根据二进制编码来压缩每一个块字典以使得使用最小的比特长度来表示每一个块字典的块标识符,并且对于每一个块字典来说,块标识符仅为块标识符的每一个唯一值存在一次。10.—种计算机实施的方法,包括根据基于字典的压縮来压缩数据列,所述压缩包括生成值标识符列,值标识符中的每一个表示所述数据列中的一个唯一值;对所述值标识符进行排序;为所述值标识符的每一个块,生成块标识符的第一列表,所述生成包括具有用于块中的每一个唯一值标识符的唯一块标识符;以及对于相同的值标识符具有相同的块标识符;生成块字典列,所述生成块字典列包括为每一个块生成块字典,所述块字典包括块标识符的第二列表,每一个块标识符与一个值标识符相关联;以及块标识符,为所述第二列表中的块标识符的每一个唯一值而存在于所述块字典中;以及生成块偏移列,所述块偏移列的每一个值指示在块字典的列中块从其开始的偏移。11.如权利要求10的方法,其中,所述值标识符是表示表的同一行之间具有数据相关性的结构化业务数据的值。12.如权利要求10的方法,其中,所述数据列的变化被存储在与所述数据列分离的增量緩冲器中,并且所述变化被异步地整合。13.如权利要求10的方法,还包括存储所述块字典列和所述块偏移列,以实现在所述块字典上的搜索。14.如权利要求10的方法,还包括利用结构化数据的表中的其它列对数据列进行排序,所述排序包括对数据列进行排序以生成值标识符的分组;以及根据前一列选择性地对后续列的块进行排序,如果前一列的块具有单个相同的值标识符,则对后续列的块进行排序。15.—种计算机程序产品,有形地体现在计算机可读介质中,该计算机产品可操作地使得数据处理装置执行以下操作,所述操作包括对表示压缩的数据列的值标识符进行排序;以及生成多个块字典,块字典用于所述值标识符的多个块中的每一个,所述块字典中的每一个包括块标识符的列表,每一个块标识符与一个值标识符相关联;以及块标识符,为块中的每一个唯一值而存在。16.如权利要求15的产品,其中,所述操作还包括根据基于字典的压缩来压缩所述数据列,所述压缩包括生成所述值标识符列,所述值标识符的每一个表示所述数据列中的一个唯一值。17.如权利要求15的产品,其中,所述操作还包括存储所述块字典,以实现在所述块字典上的搜索。全文摘要公开了包括计算机程序产品的方法和装置,用于具有重复值的表的块压缩。总的来说,表示压缩后的数据列的值标识符可以被排序以使得重复值相邻,并且可以生成块字典。可以为每一个值标识符块生成块字典。每一个块字典可以包括块标识符的列表,其中每一个块标识符与一个值标识符相关联,并且对于块中的每一个唯一值存在块标识符。块可以具有标准的大小并且块字典可以重复使用于多个块。文档编号H03M7/30GK101311930SQ20081010793公开日2008年11月26日申请日期2008年5月21日优先权日2007年5月21日发明者冈特·拉德斯托克,安德鲁·罗斯,弗朗兹·费尔伯申请人:Sap股份公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1