CN101311930B - 具有重复值的表的块压缩 - Google Patents
具有重复值的表的块压缩 Download PDFInfo
- Publication number
- CN101311930B CN101311930B CN2008101079373A CN200810107937A CN101311930B CN 101311930 B CN101311930 B CN 101311930B CN 2008101079373 A CN2008101079373 A CN 2008101079373A CN 200810107937 A CN200810107937 A CN 200810107937A CN 101311930 B CN101311930 B CN 101311930B
- Authority
- CN
- China
- Prior art keywords
- value
- row
- identifier
- piece
- dictionary
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
Abstract
公开了包括计算机程序产品的方法和装置,用于具有重复值的表的块压缩。总的来说,表示压缩后的数据列的值标识符可以被排序以使得重复值相邻,并且可以生成块字典。可以为每一个值标识符块生成块字典。每一个块字典可以包括块标识符的列表,其中每一个块标识符与一个值标识符相关联,并且对于块中的每一个唯一值存在块标识符。块可以具有标准的大小并且块字典可以重复使用于多个块。
Description
技术领域
本发明涉及由数字计算机进行的数据处理,更具体来说,涉及具有重复值的表(table)的块压缩。
背景技术
搜索引擎可以在诸如关系表之类的数据库表中搜索大量数据,以找到结果。对于海量数据,诸如包含上百万的记录的表的组合,数据的处理可能需要大量硬件资源。例如,可能需要大量随机存取存储器空间来存储与执行用户请求相关的所有记录。
发明内容
在此公开的主题提供包括计算机程序产品的方法和装置,其实现涉及具有重复值的表的块压缩的技术。
在一个方面,根据基于字典的压缩来压缩数据列,以生成值标识符列,将所述值标识符排序,生成块标识符列表,生成块字典列,以及生成块偏移列。对于值标识符的每一个块,存在针对每个唯一值标识符的唯一块标识符以及存在针对相同值标识符的相同块标识符。对于每一个块字典,存在块标识符列表,其中每一个块标识符与值标识符相关联,以及存在针对块标识符的每一个唯一值而存在于块字典中的块标识符。块偏移列的每一个值指示在所述块字典列中块从其开始的偏移。
在相关方面中,将表示压缩后的数据列的值标识符进行排序,以及生成块字典。可以为值标识符的每一个块生成块字典。每一个块字典可以包括块标识符列表,其中每一个块标识符与一个值标识符相关联,以及块中的每个唯一值存在块标识符。
该主题可以被实施为例如计算机程序产品(例如,实施为源代码或有形地体现在计算机可读介质中的经编译的代码)、计算机实施的方法、以及系统。
变形可以包括一个或多个下列特征。
所述值标识符可以是表示在表的同一行上具有数据相关性的结构化业务数据的值。所述业务数据可以包括被建模为连接表的集合的业务对象。
可以在多个硬件服务器上并行地生成块字典、块向量等等。
数据列的变化可以被存储在与该数据列分离的增量缓冲器中,并且可以异步地整合所述变化。
可以存储块字典、块标识符(例如,块向量中的或块向量列中的)、以及块偏移值,并且可以在块字典上进行搜索。
值标识符的每一个块的大小可以是固定的行数。
利用结构化数据的表中的其它列对数据列进行排序。所述排序可以包括对数据列进行排序以生成值标识符的分组,并且根据前一列选择性地对后续的列的块进行排序,其中如果前一列的块具有单个相同的值标识符,则对后续列的块进行排序。
可以为值标识符中的每一个分配块标识符。块标识符的次序可以与值标识符的次序匹配。块标识符可以包括每一个块开始的编号顺序。可以根据二进制编码来压缩每一个块字典以使得使用最小的比特长度来表示每一个块字典的块标识符。对于块字典来说,块标识符仅可以为块标识符的每个唯一值存在一次。
可以实施这里描述的主题以实现一个或多个下列优点。诸如包含海量数据的关系表的海量数据库数据的高效处理可能需要高级的数据压缩,以在已安装的存储器(例如,易失性存储器)或在盘存储设备上保持数据卷,并且用于当移动所述数据(例如,从硬盘驱动到存储器)时高效的数据流。压缩可能在信息处理硬件前景中具有多种影响,因为减少的数据量可能需要更少的安装的主存储器或硬盘容量,并且减少的数据流可能对处理器高速缓存、处理器架构以及网络带宽具有较低的要求。所有这些可能对硬件需求、响应时间和总体系统性能具有有益的影响。诸如业务数据这样的数据可以在存储器中被压缩和搜索,这是因为显著的数据压缩可以允许对数据进行节省成本的存储器内处理(例如,可以减少服务的数目和物理存储器的数量)。可以通过为数据列的一个或多个块生成块标识符向量和压缩的块字典来实现压缩。有利之处在于:可以通过块字典和表示块中的值的出现的向量的组合以压缩方式来表示数据列中多个频繁出现的值。为了减少块字典占用的空间,可以使用最小的比特数量来编码块字典中的块标识符。可以在多个数据块中重复使用块字典以减少块字典的存储空间消耗。可以使用块字典和块标识符向量来压缩多个数据列。对于结构化数据,可以通过基于与其存在数据相关性的其它数据列对数据列进行排序来维持数据依赖关系。
具体来讲,根据本发明的一个方面,提供了一种用于数据压缩处理的计算机实施的方法,所述方法包括:根据基于字典的压缩来压缩数据列,所述压缩包括生成值标识符列,值标识符中的每一个表示所述数据列中的一个唯一值;对所述值标识符进行排序;为所述值标识符的每一个块生成块标识符的第一列表,所述生成包括:具有用于块中的每一个唯一值标识符的唯一块标识符;以及对于相同的块标识符具有相同的值标识符;生成块字典列,所述生成块字典列包括为每一个块生成块字典,所述块字典包括:块标识符的第二列表,每一个块标识符与一个值标识符相关联;以及块标识符,为所述第二列表中每一个唯一的块标识符的值而存在于所述块字典中;以及生成块偏移列,所述块偏移列的每一个值指示在块字典的列中块从其开始的偏移。
附图说明
根据本发明的另一个方面,提供了一种用于数据压缩处理的计算机实施的方法,所述方法包括:对表示压缩的数据列的值标识符进行排序;生成多个块字典,块字典用于所述值标识符的多个块中的每一个,所述块字典中的每一个包括:块标识符的列表,每一个块标识符与一个值标识符相关联;以及块标识符,为块中的每一个唯一值而存在,根据基于字典的压缩来压缩所述数据列,所述压缩包括生成所述值标识符列,所述值标识符的每一个表示所述数据列中的一个唯一值。
在附图和以下的描述中陈述了一个或多个实施方式的细节。进一步的特征、方面和优点将从这些描述、附图以及权利要求书中变得清楚明白。
图1A是图示结构化数据的表、用于表的列的字典、属性表和主索引的框图。
图1B是图示结构化数据的表、用于表的列的字典、属性表和增量索引的框图。
图1C是图示从主索引和增量索引生成结果集合的示例。
图2A-2B是图示结构化数据的表的框图。
图3是图示属性和关键指标(key figure)的基数(cardinality)的表。
图4A-4B是图示根据基于向量的压缩而进行压缩的列的框图。
图5是图示用于压缩数据和搜索压缩的数据的系统的框图。
图6是图示对跨越多列的数据进行排序的表的框图。
图7A-7B是图示对数据进行压缩和实现对压缩数据进行搜索的处理的流程图。
图8是图示使用压缩的字典对数据列进行压缩的框图。
图9是图示对跨越多列的数据进行排序的表的框图。
图10是对数据进行压缩的处理的流程图。
在不同附图中,相似的参考标号和标记指示相似的元素。
具体实施方式
一般来说,在图1-图10中,可以利用可以被称为基于字典的压缩、比特向量压缩(或基于向量的压缩)、排序比特向量压缩(或基于缩短的向量的压缩)、以及块向量压缩这样的技术的组合来压缩数据。所述数据可以是结构化的业务数据,其中从如下意义上说数据被结构化,即,数据可以是组织在诸如表之类的数据结构中的属性或关键指标,并且属性或关键指标可以具有相关性。例如,在信息表中,行可能在该行的数据之间具有相关性,使得该 行的每列中的数据都与该行的其它列中的其它数据相关联。数据的诸如空(null)值的特定值可能在跨越成千或成百万的行中被非常频繁的实例化,所述成千或成百万的行可能位于数据结构的一部分中,诸如在表的特定行中,或者也可能跨越整个数据结构,从这个意义上说,数据可以形成稀疏分布。例如,具有两千万条目的数据列可以包括一千九百万个空条目,其中该一千九百万个空条目位于不一定相邻的不同行中。
图1A是图示结构化数据的表105、该表的列的字典110、属性表115、和索引120。总的来说,图1A图示了可以如何为表105中的列125提供字典110、属性表115和索引120,其中,字典110为列125中的值规定值标识符(ValueId),属性表115列出各个文档标识符140(DocId)的值标识符135,而索引120列出各个值标识符150的文档标识符145。
字典110可以被用来提供可以被称为基于字典的压缩,所述基于字典的压缩可能涉及使用字典110通过利用可以占用较少存储器的标识符表示表中的值来减少存储在表中的数据量。一般来说,字典110是列中出现的值以及值的标识符(即,所述的值标识符)的列表,其可以被排序。
举例来说,为了借助基于字典的压缩减少数据表的列所占用的存储器或盘空间,可以生成列中出现的不同的值的排序列表并且对不同的值进行编号。编号(例如可以实现为整数,而不是表现值本身的串)可被用作在值出现的表中的值的占位符。可以注释对值进行表示所需的最大编号。如果将列的基数定义为列中出现的不同值的数目,并且如果列的总长度为N,则在值C比N小得多的情况下,基于字典的压缩可能带来益处,比如,与将表中的值进行存储相比,存储器消耗减少了。C个值的排序列表可以被称为字典,并且每当需要确定表中出现的编号的值例如需要向用户返回可读结果时用于查找这些值。
例如,表105包括列125,其具有诸如INTEL、ABB和HP之类的值。字典110包括值标识符130,其可以表示可以在列125中的不同的值。例如,属性表115包括列125的每行的值标识符。例如,被称为文档标识符1(“DocId1”)的第一行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为1,000,000;并且对每行编码所需的字节数可以等于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个条目×(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的字典110、172、利用基于字典的压缩来进行压缩的记录。
与图1A的框图相比,图1B的框图包括增量索引176,其可以被用来存储对列的数据的改变,所述改变可以包括增加、修改、或删除。具体来说,增量索引176包括对压缩的列中的数据的改变的结果。作为典型增量索引的一种情况,增量索引176的字典值可以按时间顺序排列(order)。按时间顺序排列可以反映对数据所做的改变在时间上的顺序,如将增量索引176中的值 与所指示的文档标识符的关联所指示的那样。例如,与值标识符3相关联的文档标识符1、4和8的列表178可以指示文档标识符1在文档标识符4之前被添加,所述文档标识符4在文档标识符8之前被添加。增量索引176的字典值的按时间顺序排列可以在不修正旧条目的情况下有利地实现递增写入(incremental write)。
图1B的表170可以反映对图1A的表105的改变或图1A的表105的增量。例如,对应于增量索引176的表170的每行可以表示被添加到对应于主索引120的表105的行。再例如,如果表170中的行具有与表105的行相同的标识符,则对应于增量索引176的表170中的该行可以表示对表105中该行的替换。再例如,表170中的行可以表示与表105中具有相同记录标识符的行之间的差异(例如,同一记录的各个列中的值的正的或负的增量差。
增量索引176的实施方式可以不同。例如,虽然图1B将增量索引176示为包括对增量值的基于字典的压缩,但并不是必须如此。
图1C是图示从主索引和增量索引生成结果集合的示例。例如,增量索引176可以与列的压缩数据的索引(例如,诸如图1A的主索引120)结合使用,其中增量索引176可以将数据的变化存储在该索引中。增量索引176和列的压缩数据的索引二者均可以被搜索,并且可以将来自这两个源的结果合并以产生反映对压缩的数据所做的改变(例如,如下面参考增量缓冲器所讨论的那样)。
在该例中,通过从主索引寻找总收入以及向其增加来自增量索引的总收入,来计算公司(标记为“IBM”)的总收入。具体来说,命令180“RETURNTOTAL REVENUE FOR IBM SALES”(“返回IBM销售的总收入”)可以被服务器程序分成两个操作,其中这两个操作包括:第一操作182,其用于来自主索引的IBM的收入(在主索引中,图1A的第5和第6行对应于用于“IBM”的值标识符3,总值为10欧元);以及第二操作184,其用于来自增量索引的IBM的收入(在增量索引中,图1B的第1、4和8行对应于用于“IBM”的值标识符3,总值为9欧元)。并且,可以通过操作数186来合并来自这两个操作的结果,其中合并可以包括向主索引的结果增加增量索引的结果。该增加量可以是正的或负的。可以通过首先删除旧的行然后插入更新的行来处理对主索引中的条目的更新,其中在一种实施方式中删除可以由增量索引中的负增加量来表示,而插入可以由增量索引中的正增加量来表示。
图2A-2B是图示结构化数据的表202、204的框图。总的来说,第一表202表示没有根据基于字典的压缩进行压缩的销售表的实现方式,而第二表204表示根据基于字典的压缩进行压缩的第一表202的实现方式。
第一表202包括表示不同类型数据的列和表示基于不同类型数据的组合的不同记录的行。例如,列表示销售编号206、日期208、地点代码210、产品代码212、售出的产品数量214、包装属性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指示被标识为M1的属性的列具有基数24,对其进行二进制编码需要5比特(因为2的5 次幂是大于或等于24的2的最小的整数幂)。
表300可以被用来通过基于列宽的值的基数生成列宽的值来减小表对存储空间的影响,这可以与基于字典的压缩一起组合使用。
图4A-4B是图示根据基于向量的压缩而被压缩的列的框图。该压缩可以被称为比特向量压缩。总的来说,该压缩可以涉及找到列中最频繁的值并且使用该列的比特向量来表示该值的出现或未出现。例如,1表示该值出现而0表示该值未出现。该压缩还可以包括生成频繁出现的值的出现次数并且从比特向量中去除该频繁出现的值的出现,以生成更小或简化的比特向量。例如,与图4A中的框图序列相比,图4B中的框图序列还包括将排序的值的比特向量简化为频繁出现的值的出现次数以及表示其它值的缩短的比特向量。图4A-4B的列中的值可以是基于字典压缩的值。
在图4A的第一系列框图中,如第一箭头404所指示,比特向量406是为列402的值生成的。如第二箭头408所指示,比特向量406由0和1构成(populate),,其中0表示未出现频繁出现的值0000,而1表示出现该值。用来构成比特向量的频繁出现的值可以是出现最频繁的值或者仅仅是比其它值出现得更为频繁的值。确定值是否频繁出现可以基于扫描一列数据得到的扫描值的计数(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*重建列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千字节。压缩的列A*可以包括10,000个条目,其中每一个用8比特(即,1字节)整数编码,以给出10千字节(即,10,000个条目×1字节)的空间占用。在不压缩的情况下列A所需的总空间是50MB(如参照未被压缩的示例列A所讨论的)。在利用向量压缩的情况下所需的总空间可以包括字典的空间、用于压缩的列A*的空间、以及用于比特向量V的空间。基于向量的压缩版本的列A所需的总空间可以是147千字节(用于字典的12千字节、用于压缩的列的10千字节和用于比特向量的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,使用值在分组中出现的次数428和缩短的比特向量430。
例如,一旦借助基于字典的压缩和基于向量的压缩对表进行了压缩,那么在许多列具有许多频繁出现的值(例如,多个空值或零值)的许多实例的情况下可以进行更深层次的压缩。表中的行可以被排序为尽可能多地将它们 的列中最频繁出现的值置于列的顶部(例如,如参照图6的表600所描述的那样),并且可以为列生成比特向量。在比特向量中,频繁出现的值的最顶部的块可以被替换为记录频繁出现的值在该块中出现得有多频繁的次数(例如,如图4B的编号428所示)。该次数的使用可以使比特向量能够被缩短并且提高总的压缩比。
举个更为详细的例子,示例表T可以具有M列,其中第1列中出现最频繁的值为F_1,第2列中出现最频繁的值为F_2,等等,以此类推直到F_M,其中第J列中的值F_J出现的次数可以被写为|F_J|并且第J列可以是任意列(即,从第1到第M列中的任意一列)。可以对列进行这样编号,使得依照最频繁的值F的频率给出列的次序,以便具有最多F值的排在第一而具有最少F值的排在最后。因此,第1到第M列可以这样被编号,使得|F_1|>|F_2|>...>|F_M|(例如,可以是图6的表600中的列602的编号方式)。
由第1列对表T的行进行排序,使得所有的值F_1都位于顶部。对于顶部的|F_1|行的内部顺序来说,排序顺序可以是无关紧要的,顶部的|F_1|行可以依照第2列排序,以使得所有的值F_2都位于顶部。现在,对于具有值F_2的行的顶部块的内部顺序来说,排序顺序可以是无关紧要的,从而这些行可以依照第3列排序以使得所有的值F_3都位于顶部。行的排序可以继续直到具有值F(M-1)的行的最顶部的块被排序,以将值F_M置于顶部(例如,继续对除了最后的第M列之外的所有列进行排序)。所有F_1行位于顶部,很大数目的F_2行位于顶部,稍少些的F_3个行位于顶部,等等,完整性逐渐减小(如图6的表600中所描绘的)。这种排序方式对于最大化最终压缩比来说可能不是理论上的最佳的排序,但是可能相对容易实施,使得它比更复杂的方法运行得快(例如,更高效地利用处理资源),并且可能往往接近最佳排序。
接续这个详细的示例,可以为第1到第M列编写比特向量V_1到V_M,其中第J列的每个比特向量V_J包括用于值F_J的出现的值‘1’以及用于任意其它值的值‘0’。结果可以是比特向量V_J的集合,其中每一个比特向量V_J以值F_J的实体块开始。对于每一个V_J,值F_J的实体块在它们的位置中写入数量n_J,该数字记录在V_J中删除了多少比特。对于稀疏表T(即,最频繁的值频繁出现的表,实例中该值不一定相邻),由缩短的比特向量V*_J加上数量n_J所占用的空间明显小于全部比特向量V_J占据的空间。
基于缩短的向量的压缩可以极大地提高列中的值的聚集效应(aggregationeffect)。例如,在所有的频繁值F_J为零的情况下,聚集具有列的长度为n_J的初始段的值可能是司空见惯的(例如,由于n_J×0等于0),并且开发这种小活(triviality)的代码会比没有基于缩短的向量的压缩的情况更整洁(cleaner)并且更加快速。
举一个可以实现多少压缩的例子,如以上所述再次令表T具有N个行,N为1,000,000;该表具有从列A_1到列A_10的10个列;在列A_1中出现990,000次的最频繁的值F_1;以及列A_1中的另外10,000个值,这些值包含总共250个不同值,每个值1字节。不利用基于缩短的向量的压缩,而是利用基于向量的压缩,最频繁出现的值F_1的列A*_1会占用10千字节而比特向量V_1会占用125千字节。
利用基于缩短的向量的压缩,缩短的比特向量V*_1可以包含10,000比特并占用1.25千字节。表示排序的列A_1的V_1的1比特的块的数量n_1在十进制计数法中可以是990,000而在二进制计数法中需要20比特(即,不到三字节)。利用基于缩短的向量的压缩而被压缩的A_1所需的总空间可以包括用于字典的空间、用于短列A*_1的空间、用于短比特向量V*_1的空间、以及用于数量n_1的空间。因此,利用基于缩短的向量的压缩的A_1的空间可以是小于27千字节(12千字节、10千字节、1.25千字节和3个字节)。
如上所述,在不进行压缩的情况下,列A_1所需的总空间可能为50兆字节。利用基于缩短的向量的压缩,压缩因子可以大于1800(50,000千字节/27千字节,适当地舍入)。具有基于缩短的向量的压缩的其它列(比如,列A_2至A_10)的压缩因子可能更小,这取决于有多少个值F_J被排序到它们的列的顶部,其中J为2到10,但是对于稀疏表来说,总压缩因子仍然可以高到足以使这样的压缩非常值得,即使将重建列以及根据需要读出所选择的值所需的开销代码考虑在内也是如此。
对于基于向量的压缩和基于缩短的向量的压缩二者来说,可能需要一些开销资源消耗(包括但不限于处理和存储空间消耗)来压缩和解压缩列,以及在没有解压缩整列的情况下方便高效地读取列中的值。附加开销的运行可能既占用空间(包括但不限于主存储空间)又耗费时间(例如,按照处理器核心资源的百分比利用率所测量的时间),并且可能在为了采用基于缩短的向量的压缩而设置阈值时考虑此不利后果(例如,与基于向量的压缩、基于字 典的压缩相对比,或者不与它们中任何一个相对比)。可以利用试探法并通过在各种表上进行测试来设置所述阈值。在涉及包含海量数据的表的实施方式中,可以利用对压缩技术的选择(例如,不同的技术用于不同的列)来使存储空间消耗而非处理消耗最小化。通过最小化存储空间消耗,可以需要较少的硬件资源,比如刀片式服务器的数量以及安装的物理存储器的数量。此外,当最少的存储器占用量会允许在主存储器(例如,易失性存储器,比如随机存取存储器,其响应时间比诸如硬盘驱动器的、用于永久存储的辅助存储器要快)中压缩以及搜索数据时,压缩数据和响应查询的整体速度可能提高,并且用于实施压缩的处理开销可以较小,在可接受的范围之内。
图5是图示用于压缩数据和搜索压缩后的数据的系统500的框图。系统500包括搜索引擎管理工具502、主机504和存储器506。通常,系统500可以被用于通过使用搜索引擎管理工具502来搜索主机504的压缩后的数据,并且所述数据可以由主机504来组织和压缩。此外,保存在主机504的存储器中的数据可以以压缩或未压缩的形式永久存留在存储器506中。搜索引擎管理工具502可以是集成的服务,其具有执行搜索和压缩的服务,冗余地实施在每个主机504上(例如以提供相互监视和备份这样的方式)。
主机504可以被组织成使得主机504中的每一个保存数据行的一部分。例如,第一主机508可以保存第一个一百万行,而第二主机510可以保存第二个一百万行。跨越主机504的数据行分布可以是均匀的,这可以促进并行处理。例如,可以这样做以促进对跨越主机504解压缩、搜索以及重新压缩数据行的并行处理。这样分布数据的结果是,从一到M的一系列列中的每列,其中M是正数,可以被分为从1到N的若干部分,其中N是正整数,并且每个主机被分配一个部分,其中每个主机负责被分配至该主机的那个部分(例如,负责所分配的部分的索引和压缩,或者负责所分配的部分的解压缩、搜索以及重新压缩)。
数据的表的逻辑索引可以被存储在主机504之一中,并且该逻辑索引可以被用来确定数据驻留在主机504中的哪里,并且用来协调处理。例如,第一主机508包括逻辑索引518,其可以指示数据行位于主机504的哪里。作为协调处理的示例,搜索引擎管理工具502可以向第一主机508查询响应于搜索的结果并且将结果合并,以提供给搜索引擎管理工具502。
主机504可以是共享存储器506的刀片式服务器。存储器506可以包括 对应于来自数据库的一个或多个表中的每一个的索引,例如第一索引512,在主机504为所述数据库进行数据压缩。例如,表可以是多维OLAP(OnLineAnalytical Processing,在线分析处理)立方体的事实表(fact table)和维表。索引可以包含具有索引结构的元数据的逻辑索引和压缩后的列的集合。例如,第一索引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的值的组合。业务对象可以被建模为连接表(joined tables)的集合。建模为连接表的集合可以是以业务对象能够被建模成连接表的集合的方式定义业务对象的结果,因此,搜索引擎可以通过对表的行进行搜索并计算业务对象的指定连接来操控对象。
表600中的数据可以是基于字典的压缩值。表600中的数据可以是如下行为的结果:在基于向量的压缩技术的准备中将数据排序以将出现最频繁的值分组。例如,对于列602中的每一个来说,值0可以是出现最频繁的值,并且行可以已经被排序,以使得在列602的最顶部生成该值的分组。
表600中的行604的排序可能已经考虑了列602之间出现最频繁的值。例如,合计行606指示列602中的每一个中出现最频繁的值的出现次数。列602可以已经被排列为使得第一列610的出现最频繁的值比列602中的每一个的其它频繁出现的值出现得更频繁,并且其它列的最频繁出现的值也已经被排列为使得在列中出现较频繁的值被从A_2到A_9排列。在对列的排序的基础上,可以对行进行排序,以在行的一端生成尽量多的、分组中的出现频繁的值,并且该排序可以考虑列之间的相关性。
例如,可以按照列包含多少个0值,如合计行606所示,将列水平地排列为A_1到A_9。被标记为列A_1的第一列610可以对其所有行排序为将所有0值置于顶部。然后,被标记为列A_2的第二列612可以对第1到第19行排序为将这些行的0值置于顶部。被限制于第1到第19行的第二列612的排序可以基于维持第一列610的顶部最多值的排序次序以及数据行之间的数据的相关性。例如,由于第一列610的第1到第19行包括该列的出现最频繁的值,所以,为了维持最频繁出现的值在第1到第19行的分组,在第二列612中可以仅仅对那些行进行排序。对于剩余的列中的每一个,可以遵循这种排序技术。例如,被标记为列A_3的第三列614可以对第1到第15行进行排序以将那些行的0值置于顶部,其中其它行的0值可以保持在它们的位置(例如,第17行包括0值)。再例如,被标记为列A_4的第四列616可以对第1到第14行进行排序以将0值置于那些行的顶部;被标记为列A_5的第五列618可以对第1到第10行进行排序以将那些行的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中的主机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包括特定顺序的特定处理,但是可以存在附加的、更少的或不同的子处理,并且那些子处理可以是以其它不同的顺序。例如,可以基于列的出现最频繁的值的比特向量表示对列进行排序,而不是对整列进行排序(例如,可以仅仅将出现最频繁的值排序到列的一端,而其它值不需要在它们之间进行排序)。
再例如,可以基于对是否期望用一种类型的压缩(如果有的话)来优化性能(例如,降低存储器消耗)的确定,来应用基于字典的压缩、基于普通向量的压缩、以及基于缩短的向量的压缩。例如,如果预期与列的基于非字典的值相比,基于字典的值和字典将消耗更少的存储器,则可以执行基于字典的压缩。再例如,可以只对具有属性而非关键指标的行使用任意类型的压缩来进行压缩。
图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”),以使得相同的标识符(在此例中为‘0’)被包括在向量810中。对于第二个块830,存在两个唯一的值标识符(“0001”和“0002”),以使得两个唯一的块标识符用于在向量810中表示那些值的那个块(“0”和“1”),其中值标识符0001、0001、0002的顺序被表示为块标识符0、0、1的顺序。对于第三个块832,由于块标识符的每一个在该块的范围内是唯一的,因此值标识符0002、0003、0004的顺序被表示为向量810中的块标识符00、01和10的顺序。与第二个块830相比,对于第三个块832,使用2比特来编码向量810中的块标识符,这是因为对于块标识符的每一个块均使用最小比特数量来表示块标识符。
尽管向量810包括用于具有相同重复值的块向量的条目,但是向量810的块向量可以按照惯例什么都不包含,以给出0千比特的总大小。如果向量具有1,024行的块大小,那么对于包含两个不同值的1024行的块,块标识符 向量可以包含一连串1,024比特,每个比特为0或1,以给出1千比特的总大小。对于包含1,024个不同值的1024行的块,块标识符向量可以包含一连串10比特整数,以给出10千比特的总大小。
块字典列814包括块标识符列816和值标识符列818。在列814中,每个块由块字典来表示,其中块字典由块标识符和相关联的值标识符的组合组成。
块标识符列816是基于块标识符向量810而生成的,如箭头812所示。与块标识符向量810相比,块标识符列816包括块的块标识符的最小量。所述量在下述意义上来说是最小的:在块的范围内,每一个所使用的块标识符在该块的列806的列表中仅出现一次。而且,列806中列出的块的块标识符以规范次序列出,比如以数值大小顺序。例如,在向量810中按照0、0、0的顺序表示的值标识符的第一个块828在块标识符列816中被表示为单个块标识符‘0’。再例如,在向量810中按照00、01、10的顺序表示的值标识符的第三个块832被表示为块标识符00、01和01,这是因为每一个块标识符在那个块中是唯一的。
偏移值列820对应于块字典列814的块字典。偏移值列820包括每一个块的偏移值,并且每一个偏移值指示在块字典列814中用于数据块的字典从哪里开始。例如,第一偏移值834指示用于第一块压缩后的数据的块标识符在偏移0处开始。再例如,第三偏移值836指示第三块压缩后的数据的块标识符在偏移3处(即,距离块标识符列816的顶部3行)开始。块标识符列822与块标识符列810相同并且被重复以说明偏移值列820的偏移值与用于每一个块的块标识符列822之间的对应关系,以及块向量列822中的块向量的块标识符如何与偏移值列820的偏移值相关联。偏移值可以极大地便利快速的值查找,并且如果块字典被重复使用,则偏移值可以是强制性的。例如,对于1K或1,024的块大小,偏移值的向下卷动(scrolling down)列820可以实现块被定位快一千倍。此外,偏移值可以是实现块字典的重复使用的实际方式。
为了节省空间,比如服务器的易失性存储空间,仅仅需要保存块标识符的字典列814、偏置值列、以及块标识符向量810以代替值标识符的列,比如值标识符列802。
参照图8所讨论的压缩或类似的技术可以被实施在一个或多个服务器 上,比如图5的主机504。所述技术可以在不同的数据列上并行地运行(例如,与主机504的每一个上的列一起)。
所述压缩在下面的情况下是有优势的:例如,如果块包含重复1,024次的单个值,其中块大小为1,024,并且所述单个值被列在用于那个块的块字典中,则可以需要0比特来编码该值被重复的事实(例如,因为仅仅块标识符‘0’以及相关联的值标识符就可以表示该块中的值的1,024个实例并且按照惯例可以不存在块向量)。再例如,如果块包含两个值(例如,块范围内的唯一的两个值)并且这两个值被列在用于那个块的块字典中,则需要1比特来为值所存在的块向量的每一行进行指定(例如,用于块向量的条目的列表的0或1)。再例如,如果块包含三个或四个不同值,又被列在块字典中,则需要2比特来为值所存在的块向量的每一行进行指定(例如,00、01、10或01)。因此,总的来说,如果块包含N个不同值使得大于或等于N的2的最小整数幂为2的P次幂,则需要P比特来为块向量中的每一行指定其采用块字典中的那个值。在最坏的情形下,如果块包含1,024个不同值,则需要10比特来为每一行指定其采用哪个值(因为1,024等于2的10次幂)。
再举例说明用于块向量压缩的块字典,假设列(例如,值标识符列806)具有基数C,其中C为整个列中不同值的数目,并且这些值中的许多可以重复多次以使得可以应用块向量压缩。如果C在524,288(即,2^19)到1,048,576(即,2^20)之间,则用于列的值标识符需要20比特。
对于包含单个重复值的1,024行的块,块字典可以包含一个由20比特指定的条目。对于包含2个不同的值的1,024行的块,块字典可以包含两个块标识符比特和两个20比特值标识符比特,以给出总共42个比特(即,每个值标识符20比特以及每个块标识符1比特)。对于包含1,024个不同值的1,024行的块,块字典可以包含1,024个块标识符,每个具有10比特,并且包含1,024个值标识符,每个具有20比特,以给出共30千比特(即,30比特乘以1,024个条目)。
在每种情况中,可以需要再多几个比特来编码偏移,其中,比特的数目取决于整个块字典的长度。对于上述情况,将块向量比特总数和块字典比特总数相加分别给出针对所考虑的这三种示例情况的20比特、43比特和40千比特。同时使用基于字典的压缩和基于比特向量压缩二者的最坏情形的总空间可能是仅仅针对列使用基于字典的压缩所需的总空间的二倍,这表明基于 向量的压缩可能仅仅对应用于其中大量块包括多个重复值的列的情况有利。
为了找到与给出的块标识符相关联的用户可读的值,可以有两种字典查找方法,尽管可能很少被要求执行这两种查找方法。例如,响应于对具有给定值的所有记录的查询,首先可以使用用于列的字典来查找与值(比如关键指标或属性)相关联的值标识符,然后可以使用块字典来查找与给定的块中的值标识符相关联的块标识符。再例如,从块标识符到值,块字典814可以被用来查找对应于块标识符的值标识符,然后用于列802的字典可以被用来查找对应于值标识符的值。为了在多个块中查找值,多个块字典可以被用来寻找与各个块相关联的块标识符。
尽管图8包括特征的特定组合作为压缩的部分,但是可以有所变化。例如,块标识符对于数据块来说可以是唯一的。再例如,块标识符不需要被压缩到最小比特数量以表示块标识符的块。再例如,块标识符不需要在‘0’处开始或者是递增的顺序。再例如,尽管在对图8的压缩的描述中使用“每一个”这个词,但是所述压缩不需要完全如此应用。例如,并非必须压缩每个块并且不需要对于每个块都存在偏移值。
再例如,可以在若干块之间重复使用块字典。例如,块的值标识符对于另一块(比如旧块)来说可能是相同的,或者非常相似的。在这种情况下,可以尽可能多次地使用旧字典。
例如,如果新块(即,随后的块)中的值与旧块中的值相同或者构成它们的子集,则可以照样使用旧的块字典,并且新块所需的唯一编码(onlycoding)可以用于将其偏移设置为与用于旧块的偏移相同(就好像重复使用同一块字典一样)。
在为与旧块相比具有附加块标识符的随后的块而重复使用字典之前,需要以下三个条件:随后的块除了出现在旧块中的那些值之外还包括一个或多个值,该一个或多个值可以称为N个附加值;旧块包括可以用P比特编码的M个不同值;并且总数M+N仍然小于或等于2^P,以使得附加的块标识符-值标识符对可以被附加到旧字典中。
新值可以被附加到旧字典中并且新块的偏移可以被设置成与旧块的偏移相同。以这种方式,旧字典的新条目不需要干扰用于旧块的字典的可用性(这是因为用于旧块的块标识符-值标识符对未改变)。如果列中的许多块与旧块相似,则块字典的重复使用可以将存储列所需的空间减小很多倍。
图9是图示对跨越多列902的数据进行排序的表900的框图。列902中排序的数据可以被用于块向量压缩,参照图8和图10对此进行讨论。表900的列可以分散在多个服务器上,比如图5的主机504。总的来说,表900包括数据行904和列902,其中一个或多个数据行可以表示具有列902之间的数据相关性的结构化数据。例如,业务对象可以被建模为连接表的集合。因为表900中的数据跨越列902具有数据相关性,所以对列的排序可以考虑这些相关性并且会影响得到的排序结果。
表900中排序后的数据可以表示用于块向量压缩的前提条件,即数据可以被排序为尽可能多地将多个重复值分在一组。困难在于:为了优化列902的顺序而对表900所进行的排序将全部行进行了排序,如此一来,结果是其它列可能变得更加混乱。对表900中的数据的排序可以表示这样的排序,其中行904被排序得足够好以生成良好顺序的所有的相关表列902。假如存在各种实际的约束,可以不必要优化该技术(例如,在数学意义上进行优化,以最大化所排列的块的数目),并且快速运行的鲁棒试探法(robust heuristic)对于构想的应用可能已经足够好了。
对表900中的数据的排序可以是用于在块向量压缩之前对数据进行排序的许多技术中的一个。表的阴影部分可以指示:除了对其它部分(例如,同一行集合中的其它列)的排序而产生的排序之外,没有排序。表900中的数据可以是作为基于字典的压缩的结果的值标识符。
列908包括数据行904的标签,包括块标签和行标签。例如,第一行906位于块B1中并且是行1。
表900中的数据是从第一列到第二列等等往下按照列902的顺序对列902进行排序的结果。列902未进行排列,但是在某些实施方式中可以将其排列。例如,在待排序的列的顺序上,被预期或已知具有较少唯一值的列可以被较早地排列,这是因为可以预期具有较少唯一值的列具有较大的分组值,以使得块向量压缩比用于在顺序上较晚的列的块向量压缩更高效。此外,不需要对所有列进行块向量压缩并且可以仅对选定的列应用块向量压缩,选定的列诸如满足某些规定的阈值标准以便充分受益于块向量压缩的列。例如,对利用块向量压缩和不利用块向量压缩的列的空间需求进行比较,并且给出块向量压缩的编码和运行时开销的影响。可以比较关于空间效率和开销的度量以确定在特定实施方式中是否可以对一列或多列利用块向量压缩。
表900中的数据是对列进行如下排序的结果。在此示例中,表900具有五列A1到A5以及35行,35行被分为七个块B1到B7,每块具有5行,其中每列条目具有用值标识符0到3编码的4个可能值。从第一列A1到第五列A5对列进行排序,结果是对前一列的排序影响对后续列的排序。具体来说,对列A1进行排序使得值标识符是上升的。列A1中具有统一值标识符的任意块可用于对第二列A2进行排序。在表900中,这些块为B1、B2、B4和B7。例如,在列A1中块B1的所有条目为‘0’。列A2的块B1、B2、B4和B7各自被内部排序使得值标识符是上升的。具有统一A2值标识符的任意块可用于进一步排序:这些块是块B1和B6。列A3的块B1和B6各自被内部排序使得值标识符是上升的。具有统一A3值标识符的任意块可用于进一步排序:这包括块B1。列A4的块B1被内部排序使得值标识符是上升的。块B1不包含统一A4值标识符,所以没有进一步的排序(即,在A5中没有值标识符的排序)。
因此,总的来说,排序包括对第一列进行排序使得相似的值标识符被分在一组,比如以上升或下降的顺序进行排序。对于后续的列,仅对在前一列中具有相同值标识符的块进行排序,并且对那些块进行排序使得存在值标识符的分组。所述排序可以继续,直到前一列的块没有相同的值标识符为止。
在一些实施方式中,排序可能产生妨碍表更新这样的不利影响,这可能要求到表行的足够的随机访问。可以通过分离的增量索引来收集和处理更新(如上所述),分离的增量索引可以周期性地与主表索引合并(即,异步地)。合并处理可以包括重建表索引,因此上述的排序顺序并不妨碍表更新。具体来说,在包括对列重新排序的压缩技术与用于处理更新的、像上述的增量索引方法那样的缓冲方案一起实施的情况下,排序顺序不会成为妨碍。
图10是压缩数据的处理1000的流程图。处理1000可以由图5的主机504来实施。例如,主机504中的每一个可以对主机所负责的数据的部分执行处理1000。被压缩的数据可以是结构化的业务数据。可以在存储器中压缩和搜索数据,这是因为数据的显著压缩可以允许对数据进行节省成本的存储器内处理(例如,可以减少服务器的数目或物理存储器的数量)。
通常,处理1000可以被称为块向量压缩,其可以指将数据逐块压缩成向量。处理1000包括:根据基于字典的压缩来压缩一列或多列数据以生成值标识符列(1002),对值标识符排序(1004),生成块标识符(1006),生成块字 典(1008),以及生成偏移值(1010)。
根据基于字典的压缩来压缩一列或多列数据以生成值标识符的列(1002)。基于字典的压缩可以基于列中的值的基数使用最小比特数量来表示值标识符。
对值标识符进行排序(1004)。对值标识符进行排序可以包括对多个值标识符列进行排序并且还可以包括基于其他列的排序后的值标识符对值标识符列进行排序,例如参照图9所描述的那样。
生成块标识符(1006)。可以为选定的列中的每一个值标识符块生成块标识符。例如,对列应用块向量压缩进行确定,并且可以为该列的每一个块生成块标识符,其中,对于每一个块,为块中的每一个唯一的值标识符生成唯一的块标识符,并且相似的块标识符被用于相似的值标识符。
生成块字典(1008)。可以为每一个块生成块字典,并且对于每一个块字典,块标识符可以与值标识符相关联,其中仅为在块的范围内的每一个唯一的块标识符包括块标识符。例如,参照图8,第一个块828的块字典具有一个唯一的块标识符‘0’(838)。
在块字典列中可以包括多个块字典。例如,参照图8,在块字典列814中包括多个块字典。
可以重复使用块字典。例如,用于一个块的块字典可以被重复使用于具有相同的块标识符或具有附加块标识符的后续的块(如上所述)。
可以生成偏移值(1010)。偏移值可以指示块在在块字典列中的哪里开始,并且在块向量中偏移值可以与块标识符相关联。偏移值可以被包括在与块向量的向量相关联的块偏移列中(例如,如具有与块向量列822相关联的偏移值的偏移值列820所示)。
尽管图10包括特定组合和类型的子处理,但是处理1000、块向量压缩或二者均可以包括更少的、不同的或附加的子处理。举例来说,并非所有列都需要排序;并非所有列都需要根据块向量压缩来压缩;不需要对所有列或任何列都执行列的基于字典的压缩;对列的排序不需要根据对其它列的排序的结果;可以重复使用块字典;附加的子处理可以包括接收对一列或多列数据的查询,并且块向量可以与块字典协同使用以找到匹配查询准则的数据;可以使用增量缓冲器和可以并行地利用块向量搜索该增量缓冲器,并且从增量缓冲器得到的结果可以与其它结果合并;可以存储块向量、块字典和偏移 值;可以不生成偏移值;等等。
尽管每幅图描述了特征的特定组合,但是实施方式可以改变。例如,附加的、不同的或更少的组件可以被包括在图5的系统500中。
这里描述的主题可以用包括本说明书中公开的结构装置和它们的结构等同物的数字电子电路或计算机软件、固件、硬件、或者它们的组合来实现。这里描述的主题可以实现为一个或多个计算机程序产品,即,有形地具体实施在信息载体中(例如在机器可读存储设备中或在传播信号中)的一个或多个计算机程序,以供数据处理装置执行,或者用于控制数据处理装置的操作,所述数据处理装置例如可编程处理器、计算机或多个计算机。计算机程序(也称作程序、软件、软件应用或代码)可以用任何形式的编程语言来编写,编程语言包括汇编语言或解释语言,并且计算机程序可以任何形式配置,包括作为独立程序或者作为模块、组件、子程序、或者其它适合用于计算机环境的任何单元。计算机程序不一定对应于文件。程序可以存储在保持其它程序或数据的文件的一部分中,存储在专用于所述程序的单个文件中,或者存储在多个协作文件中(例如,存储一个或多个模块、子程序或代码部分的文件)。计算机程序可以被部署成在一台计算机上或者在位于一个地点或者分布在多个地点并通过通信网络互连的多个计算机上执行。
本说明书中所描述的处理和逻辑流,包括这里描述的主题的方法和步骤,可以由一个或多个可编程处理器来执行,该可编程处理器执行一个或多个计算机程序,以通过对输入数据进行操作并生成输出来执行这里描述的主题的功能。所述处理和逻辑流也可以由专用逻辑电路来执行,并且这里描述的主题的装置也可以被实现为专用逻辑电路,专用逻辑电路例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
举例来说,适合于执行计算机程序的处理器包括通用微处理器和专用微处理器两者,以及任何种类的数字计算机的任何一个或多个处理器。一般来说,处理器将从只读存储器、随机访问存储器或者二者接收指令和数据。计算机的主要元件是用于执行指令的处理器以及用于存储指令和数据的一个或多个存储设备。一般来说,计算机还将包括用于存储数据的一个或多个大容量存储设备,或者被可操作地耦接到所述一个或多个大容量存储设备,以便从其接收数据或向其发送数据或者二者都进行,大容量存储设备例如磁盘、磁光盘或者光盘。适于体现计算机程序指令和数据的介质包括所有形式的易 失性存储器(例如,随机访问存储器)或非易失性存储器,举例来说,包括半导体存储设备,例如,EPROM、EEPROM、闪存设备;磁盘,例如内部硬盘或可移动盘;磁光盘;以及CD-ROM和DVD-ROM盘。所述处理器和存储器可以由专用逻辑电路补充,或者合并到所述专用逻辑电路中。
为了提供与用户的交互,这里描述的主题可以在具有用于向用户显示信息的显示设备以及用户可以通过其向计算机提供输入的键盘、定点设备的计算机上实现,显示设备例如CRT(阴极射线管)或LCD(液晶显示器),定点设备例如鼠标或跟踪球。其它类型的设备也可以用来与用户进行交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈、或触觉反馈;并且,来自用户的输入可以被以任何形式接收,包括声音、语音或者触觉输入。
这里描述的主题可以在计算机系统中实现,该计算机系统包括后端组件(例如,数据服务器)、中间件组件(例如,应用服务器)、或者前端组件(例如,具有用户通过其可以与这里描述的主题的实施方式进行交互的图形用户界面或网络浏览器的客户计算机),或者这样的前端组件、中间件、后端组件的任意组合。通过任何形式或介质的数字数据通信,例如,通信网络,可以将系统的组件相互连接。通信网络的示例包括局域网(LAN)和广域网(WAN),例如因特网。
计算机系统可以包括客户机和服务器。客户机和服务器通常在逻辑意义上远离对方,并且典型地通过通信网络来进行交互。客户机和服务器的关系借助运行在各自计算机上的彼此具有客户机-服务器关系的计算机程序而发生。
已经按照具体实施例描述了这里描述的主题,并且其它实施例也可以被实施并且也在所附权利要求书的范围内。例如,操作可以不同但仍然达到期望的结果。在特定实施方式中,多任务和并行处理可以是优选的。其他实施例也在所附权利要求书的范围内。
Claims (11)
1.一种用于数据压缩处理的计算机实施的方法,所述方法包括:
根据基于字典的压缩来压缩数据列,所述压缩包括生成值标识符列,值标识符中的每一个表示所述数据列中的一个唯一值;
对所述值标识符进行排序;
为所述值标识符的每一个块生成块标识符的第一列表,所述生成包括:
具有用于块中的每一个唯一值标识符的唯一块标识符;以及
对于相同的块标识符具有相同的值标识符;
生成块字典列,所述生成块字典列包括为每一个块生成块字典,所述块字典包括:
块标识符的第二列表,每一个块标识符与一个值标识符相关联;以及
块标识符,为所述第二列表中每一个唯一的块标识符的值而存在于所述块字典中;以及
生成块偏移列,所述块偏移列的每一个值指示在块字典的列中块从其开始的偏移。
2.如权利要求1的方法,其中,值标识符是表示表的同一行之间具有数据相关性的结构化业务数据的值。
3.如权利要求2的方法,其中,所述业务数据包括被建模为连接表的集合的业务对象。
4.如权利要求1的方法,其中,在多个硬件服务器上并行地执行所述方法的步骤。
5.如权利要求1的方法,其中,所述数据列的变化被存储在与所述数据列分离的增量缓冲器中,并且所述变化被异步地整合。
6.如权利要求1的方法,还包括:
在生成块偏移列之后,存储所述块字典列和所述块偏移列以实现在所述块字典上的搜索。
7.如权利要求1的方法,其中,所述值标识符的每一个块的大小是固定的行数。
8.如权利要求1的方法,其中,对所述值标识符进行排序还包括利用结构化数据的表中的其它列对数据列进行排序,该排序包括:
对数据列进行排序以生成值标识符的分组;以及
根据前一列选择性地对后续列的块进行排序,如果前一列的块具有单个相同的值标识符,则对后续列的块进行排序。
9.如权利要求1的方法,其中,为所述第一列表中的值标识符的每一个分配块标识符,所述第一列表中的块标识符的次序与所述值标识符的次序匹配,所述第一列表中的块标识符包括每一个块开始的编号顺序,根据二进制编码来压缩每一个块字典以使得使用最小的比特长度来表示每一个块字典的块标识符,并且对于每一个块字典来说,块标识符仅为块标识符的每一个唯一值存在一次。
10.一种用于数据压缩处理的计算机实施的方法,所述方法包括:
对表示压缩的数据列的值标识符进行排序;
生成多个块字典,块字典用于所述值标识符的多个块中的每一个,所述块字典中的每一个包括:
块标识符的列表,每一个块标识符与一个值标识符相关联;以及
块标识符,为块中的每一个唯一值而存在,
根据基于字典的压缩来压缩所述数据列,所述压缩包括生成所述值标识符列,所述值标识符的每一个表示所述数据列中的一个唯一值。
11.如权利要求10的方法,还包括:
存储所述块字典以实现在所述块字典上的搜索。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/805,186 | 2007-05-21 | ||
US11/805,186 US7769729B2 (en) | 2007-05-21 | 2007-05-21 | Block compression of tables with repeated values |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101311930A CN101311930A (zh) | 2008-11-26 |
CN101311930B true CN101311930B (zh) | 2012-07-04 |
Family
ID=39777031
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101079373A Active CN101311930B (zh) | 2007-05-21 | 2008-05-21 | 具有重复值的表的块压缩 |
Country Status (4)
Country | Link |
---|---|
US (4) | US7769729B2 (zh) |
EP (1) | EP1995878B1 (zh) |
JP (1) | JP4907600B2 (zh) |
CN (1) | CN101311930B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023028442A1 (en) * | 2021-08-24 | 2023-03-02 | Lyft, Inc. | Compressing digital metrics for transmission across a network utilizing a graph-based compression dictionary and time slice delta compression |
US11789910B2 (en) * | 2016-04-26 | 2023-10-17 | Umbra Technologies Ltd. | Data beacon pulser(s) powered by information slingshot |
Families Citing this family (129)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9460064B2 (en) * | 2006-05-18 | 2016-10-04 | Oracle International Corporation | Efficient piece-wise updates of binary encoded XML data |
US20090006399A1 (en) * | 2007-06-29 | 2009-01-01 | International Business Machines Corporation | Compression method for relational tables based on combined column and row coding |
US7836037B2 (en) * | 2007-10-04 | 2010-11-16 | Sap Ag | Selection of rows and values from indexes with updates |
KR101443221B1 (ko) * | 2008-01-18 | 2014-09-24 | 삼성전자주식회사 | 렌더링 장치 및 방법 |
US8108401B2 (en) * | 2008-03-28 | 2012-01-31 | International Business Machines Corporation | Applying various hash methods used in conjunction with a query with a group by clause |
US7885967B2 (en) * | 2008-05-30 | 2011-02-08 | Red Hat, Inc. | Management of large dynamic tables |
US8498824B2 (en) * | 2008-06-02 | 2013-07-30 | Intel Corporation | Nucleic acid sequencing using a compacted coding technique |
US8099440B2 (en) * | 2008-08-15 | 2012-01-17 | International Business Machines Corporation | Method for laying out fields in a database in a hybrid of row-wise and column-wise ordering |
US8135738B2 (en) * | 2008-08-20 | 2012-03-13 | International Business Machines Corporation | Efficient predicate evaluation via in-list |
US8370326B2 (en) * | 2009-03-24 | 2013-02-05 | International Business Machines Corporation | System and method for parallel computation of frequency histograms on joined tables |
US8645337B2 (en) * | 2009-04-30 | 2014-02-04 | Oracle International Corporation | Storing compression units in relational tables |
US9667269B2 (en) | 2009-04-30 | 2017-05-30 | Oracle International Corporation | Technique for compressing XML indexes |
US8356060B2 (en) * | 2009-04-30 | 2013-01-15 | Oracle International Corporation | Compression analyzer |
US8583692B2 (en) * | 2009-04-30 | 2013-11-12 | Oracle International Corporation | DDL and DML support for hybrid columnar compressed tables |
US8935223B2 (en) * | 2009-04-30 | 2015-01-13 | Oracle International Corporation | Structure of hierarchical compressed data structure for tabular data |
US8321390B2 (en) * | 2009-06-11 | 2012-11-27 | Vivek Swarnakar | Methods and apparatus for organizing data in a database |
US8296517B2 (en) | 2009-08-19 | 2012-10-23 | Oracle International Corporation | Database operation-aware striping technique |
US8832142B2 (en) | 2010-08-30 | 2014-09-09 | Oracle International Corporation | Query and exadata support for hybrid columnar compressed data |
JP5487985B2 (ja) * | 2010-01-14 | 2014-05-14 | 富士通株式会社 | 圧縮装置、方法及びプログラム、並びに展開装置、方法及びプログラム |
DE102010006931A1 (de) * | 2010-02-04 | 2011-08-04 | Bienert, Jörg, 50354 | Verfahren zur Verarbeitung von Datensammlungen, insbesondere in Datenbanksystemen |
US20110219037A1 (en) * | 2010-03-04 | 2011-09-08 | Src, Inc. | High-Performance Persistence Framework |
US20110264667A1 (en) * | 2010-04-27 | 2011-10-27 | Stavros Harizopoulos | Column-oriented storage in a row-oriented database management system |
AU2010201705A1 (en) * | 2010-04-29 | 2011-11-17 | IFRS System Pty Limited | Automatic Report Generation System And Method Therefor |
US8239421B1 (en) | 2010-08-30 | 2012-08-07 | Oracle International Corporation | Techniques for compression and processing optimizations by using data transformations |
US9009182B2 (en) | 2010-10-05 | 2015-04-14 | Sap Se | Distributed transaction management with tokens |
US8442988B2 (en) | 2010-11-04 | 2013-05-14 | International Business Machines Corporation | Adaptive cell-specific dictionaries for frequency-partitioned multi-dimensional data |
US9325344B2 (en) | 2010-12-03 | 2016-04-26 | International Business Machines Corporation | Encoding data stored in a column-oriented manner |
US10945011B2 (en) | 2010-12-29 | 2021-03-09 | Comcast Cable Communications, Llc | Measuring video viewing |
US10089592B2 (en) | 2010-12-29 | 2018-10-02 | Comcast Cable Communications, Llc | Measuring video asset viewing |
US8898351B2 (en) * | 2010-12-30 | 2014-11-25 | Emc Corporation | Dynamic compression of an I/O data block |
US8423522B2 (en) | 2011-01-04 | 2013-04-16 | International Business Machines Corporation | Query-aware compression of join results |
US8868512B2 (en) * | 2011-01-14 | 2014-10-21 | Sap Se | Logging scheme for column-oriented in-memory databases |
US20120197925A1 (en) * | 2011-01-28 | 2012-08-02 | International Business Machines Corporation | Optimization of Database Driver Performance |
CN102651007A (zh) * | 2011-02-28 | 2012-08-29 | 国际商业机器公司 | 一种管理数据库索引的方法和装置 |
JP5699715B2 (ja) * | 2011-03-18 | 2015-04-15 | 日本電気株式会社 | データ保存装置、データ保存方法 |
EP2581704A1 (en) * | 2011-10-14 | 2013-04-17 | Harman Becker Automotive Systems GmbH | Method for compressing navigation map data |
US8838551B2 (en) * | 2011-10-21 | 2014-09-16 | International Business Machines Corporation | Multi-level database compression |
US9342314B2 (en) | 2011-12-08 | 2016-05-17 | Oracle International Corporation | Efficient hardware instructions for single instruction multiple data processors |
CN104040542B (zh) | 2011-12-08 | 2017-10-10 | 甲骨文国际公司 | 用于在易失性存储器内保持关系型数据的列向量的技术 |
US10534606B2 (en) | 2011-12-08 | 2020-01-14 | Oracle International Corporation | Run-length encoding decompression |
US9697174B2 (en) | 2011-12-08 | 2017-07-04 | Oracle International Corporation | Efficient hardware instructions for processing bit vectors for single instruction multiple data processors |
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 |
US8892586B2 (en) * | 2011-12-23 | 2014-11-18 | Sap Ag | Accelerated query operators for high-speed, in-memory online analytical processing queries and operations |
US11627356B2 (en) * | 2012-01-28 | 2023-04-11 | Comcast Cable Communications, Llc | Data translation for video-viewing activity |
US10645433B1 (en) | 2013-08-29 | 2020-05-05 | Comcast Cable Communications, Llc | Measuring video-content viewing |
US10440428B2 (en) | 2013-01-13 | 2019-10-08 | Comcast Cable Communications, Llc | Measuring video-program-viewing activity |
WO2013137070A1 (ja) * | 2012-03-13 | 2013-09-19 | 日本電気株式会社 | ログ圧縮システム、ログ圧縮方法、及びプログラム |
CN102646136B (zh) * | 2012-04-06 | 2014-04-02 | 北京西塔网络科技股份有限公司 | 一种高效数据存储查询的方法及系统 |
US9009155B2 (en) * | 2012-04-27 | 2015-04-14 | Sap Se | Parallel set aggregation |
US9171020B2 (en) | 2012-04-30 | 2015-10-27 | Sap Se | Deleting records in a multi-level storage architecture |
US9165010B2 (en) | 2012-04-30 | 2015-10-20 | Sap Se | Logless atomic data movement |
US11010415B2 (en) * | 2012-04-30 | 2021-05-18 | Sap Se | Fixed string dictionary |
US10162766B2 (en) | 2012-04-30 | 2018-12-25 | Sap Se | Deleting records in a multi-level storage architecture without record locks |
US9465829B2 (en) | 2012-04-30 | 2016-10-11 | Sap Se | Partial merge |
US9465844B2 (en) | 2012-04-30 | 2016-10-11 | Sap Se | Unified table query processing |
JP5826114B2 (ja) | 2012-05-25 | 2015-12-02 | クラリオン株式会社 | データ解凍装置、データ圧縮装置、データの解凍プログラム、データの圧縮プログラム、及び、圧縮データ配信システム |
US8756208B2 (en) | 2012-07-10 | 2014-06-17 | International Business Machines Corporation | Encoded data processing |
US8838577B2 (en) | 2012-07-24 | 2014-09-16 | International Business Machines Corporation | Accelerated row decompression |
GB2505898B (en) * | 2012-09-13 | 2014-11-19 | 1E Ltd | Data reduction |
US9154157B2 (en) * | 2012-09-27 | 2015-10-06 | Intel Corporation | Search unit to accelerate variable length compression/decompression |
US9063974B2 (en) | 2012-10-02 | 2015-06-23 | Oracle International Corporation | Hardware for table scan acceleration |
EP2720376A1 (en) * | 2012-10-09 | 2014-04-16 | Alcatel Lucent | Secure and lossless data compression |
US9646053B2 (en) * | 2013-03-12 | 2017-05-09 | Oracle International Corporation | OLTP compression of wide tables |
CN103347047B (zh) * | 2013-06-07 | 2017-02-08 | 南京交通职业技术学院 | 一种基于网络字典的无损数据压缩方法 |
US9165050B2 (en) * | 2013-07-19 | 2015-10-20 | Sap Se | Data availability during columnar table merges |
US8762387B1 (en) * | 2013-07-31 | 2014-06-24 | Linkedin Corporation | Inverted indexes for accelerating analytics queries |
US10133800B2 (en) * | 2013-09-11 | 2018-11-20 | Microsoft Technology Licensing, Llc | Processing datasets with a DBMS engine |
US9606921B2 (en) | 2013-09-21 | 2017-03-28 | Oracle International Corporation | Granular creation and refresh of columnar data |
US9977802B2 (en) | 2013-11-21 | 2018-05-22 | Sap Se | Large string access and storage |
US9977801B2 (en) * | 2013-11-21 | 2018-05-22 | Sap Se | Paged column dictionary |
US9495466B2 (en) | 2013-11-27 | 2016-11-15 | Oracle International Corporation | LIDAR model with hybrid-columnar format and no indexes for spatial searches |
WO2015077951A1 (en) * | 2013-11-28 | 2015-06-04 | Intel Corporation | Techniques for block-based indexing |
US9336196B2 (en) | 2013-12-06 | 2016-05-10 | Sap Se | Methods, systems, and apparatus for optimization using statistical estimation |
US10235377B2 (en) | 2013-12-23 | 2019-03-19 | Sap Se | Adaptive dictionary compression/decompression for column-store databases |
CN103761316B (zh) * | 2014-01-26 | 2018-02-06 | 北京中电普华信息技术有限公司 | 一种基于稀疏矩阵的数据压缩存储方法及装置 |
US10042902B2 (en) * | 2014-01-29 | 2018-08-07 | International Business Machines Corporation | Business rules influenced quasi-cubes with higher diligence of data optimization |
JP6336302B2 (ja) * | 2014-03-11 | 2018-06-06 | 株式会社電通国際情報サービス | 情報処理装置、情報処理方法及びプログラム |
US9697221B2 (en) * | 2014-03-19 | 2017-07-04 | Oracle International Corporation | OZIP compression and decompression |
US9870382B2 (en) | 2014-03-25 | 2018-01-16 | Sap Se | Data encoding and corresponding data structure |
CN105022739B (zh) * | 2014-04-21 | 2019-05-21 | 腾讯科技(北京)有限公司 | 数据的存储方法及装置 |
US10726005B2 (en) * | 2014-06-25 | 2020-07-28 | Sap Se | Virtual split dictionary for search optimization |
US10210280B2 (en) | 2014-10-23 | 2019-02-19 | Sap Se | In-memory database search optimization using graph community structure |
US10042552B2 (en) * | 2014-11-25 | 2018-08-07 | Sap Se | N-bit compressed versioned column data array for in-memory columnar stores |
US10725987B2 (en) * | 2014-11-25 | 2020-07-28 | Sap Se | Forced ordering of a dictionary storing row identifier values |
CN104731729B (zh) * | 2015-03-23 | 2018-07-13 | 华为技术有限公司 | 一种基于异构系统的表连接优化方法、cpu和加速器 |
US10248622B2 (en) * | 2015-03-30 | 2019-04-02 | Sap Se | Variable virtual split dictionary for search optimization |
US10025822B2 (en) | 2015-05-29 | 2018-07-17 | Oracle International Corporation | Optimizing execution plans for in-memory-aware joins |
US10733164B2 (en) | 2015-06-23 | 2020-08-04 | Microsoft Technology Licensing, Llc | Updating a bit vector search index |
US10242071B2 (en) | 2015-06-23 | 2019-03-26 | Microsoft Technology Licensing, Llc | Preliminary ranker for scoring matching documents |
US11281639B2 (en) | 2015-06-23 | 2022-03-22 | Microsoft Technology Licensing, Llc | Match fix-up to remove matching documents |
US20160378803A1 (en) * | 2015-06-23 | 2016-12-29 | Microsoft Technology Licensing, Llc | Bit vector search index |
US11392568B2 (en) | 2015-06-23 | 2022-07-19 | Microsoft Technology Licensing, Llc | Reducing matching documents for a search query |
US10339121B2 (en) * | 2015-08-06 | 2019-07-02 | Sap Se | Data compression |
US9990308B2 (en) | 2015-08-31 | 2018-06-05 | Oracle International Corporation | Selective data compression for in-memory databases |
US10409799B2 (en) * | 2015-10-19 | 2019-09-10 | International Business Machines Corporation | Supporting updatable repeated values over variable schema |
US10169361B2 (en) | 2015-11-16 | 2019-01-01 | International Business Machines Corporation | Columnar database compression |
CN105512305B (zh) * | 2015-12-14 | 2019-04-26 | 北京奇虎科技有限公司 | 一种基于序列化的文档压缩、文档解压方法和装置 |
CN105335531B (zh) * | 2015-12-14 | 2019-06-04 | 北京奇虎科技有限公司 | 一种文档的压缩、解压方法和装置 |
US10019375B2 (en) | 2016-03-02 | 2018-07-10 | Toshiba Memory Corporation | Cache device and semiconductor device including a tag memory storing absence, compression and write state information |
US10061832B2 (en) * | 2016-11-28 | 2018-08-28 | Oracle International Corporation | Database tuple-encoding-aware data partitioning in a direct memory access engine |
US10055358B2 (en) | 2016-03-18 | 2018-08-21 | Oracle International Corporation | Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors |
US10061714B2 (en) | 2016-03-18 | 2018-08-28 | Oracle International Corporation | Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors |
US9930146B2 (en) | 2016-04-04 | 2018-03-27 | Cisco Technology, Inc. | System and method for compressing content centric networking messages |
US10432217B2 (en) * | 2016-06-28 | 2019-10-01 | International Business Machines Corporation | Page filtering via compression dictionary filtering |
US10599488B2 (en) | 2016-06-29 | 2020-03-24 | Oracle International Corporation | Multi-purpose events for notification and sequence control in multi-core processor systems |
CN107643906B (zh) * | 2016-07-22 | 2021-01-05 | 华为技术有限公司 | 数据处理方法及装置 |
US10235100B2 (en) | 2016-08-23 | 2019-03-19 | Sap Se | Optimizing column based database table compression |
US10380058B2 (en) | 2016-09-06 | 2019-08-13 | Oracle International Corporation | Processor core to coprocessor interface with FIFO semantics |
US10783102B2 (en) | 2016-10-11 | 2020-09-22 | Oracle International Corporation | Dynamically configurable high performance database-aware hash engine |
US10459859B2 (en) | 2016-11-28 | 2019-10-29 | Oracle International Corporation | Multicast copy ring for database direct memory access filtering engine |
US10176114B2 (en) | 2016-11-28 | 2019-01-08 | Oracle International Corporation | Row identification number generation in database direct memory access engine |
US10725947B2 (en) | 2016-11-29 | 2020-07-28 | Oracle International Corporation | Bit vector gather row count calculation and handling in direct memory access engine |
CN108513146A (zh) * | 2017-02-27 | 2018-09-07 | 晨星半导体股份有限公司 | 收视记录处理电路与相关方法 |
JP7210130B2 (ja) * | 2017-04-07 | 2023-01-23 | 富士通株式会社 | 符号化プログラム、符号化方法および符号化装置 |
JP7003443B2 (ja) * | 2017-05-16 | 2022-01-20 | 富士通株式会社 | 符号化プログラム、符号化装置および符号化方法 |
CN107423111B (zh) * | 2017-06-23 | 2020-06-26 | 浪潮云信息技术有限公司 | 一种Openstack环境计算节点后端存储管理方法 |
US11200296B2 (en) | 2017-10-20 | 2021-12-14 | Red Hat, Inc. | Limited duration supply for heuristic algorithms |
US11468024B2 (en) * | 2018-03-27 | 2022-10-11 | Sap Se | Structural data matching using neural network encoders |
US10965315B2 (en) * | 2018-08-09 | 2021-03-30 | Andrew Kamal | Data compression method |
US11030149B2 (en) * | 2018-09-06 | 2021-06-08 | Sap Se | File format for accessing data quickly and efficiently |
US11500842B2 (en) * | 2018-12-14 | 2022-11-15 | Sap Se | Adaptive compression optimization for effective pruning |
US10606775B1 (en) * | 2018-12-28 | 2020-03-31 | Micron Technology, Inc. | Computing tile |
US11216461B2 (en) * | 2019-05-08 | 2022-01-04 | Datameer, Inc | Query transformations in a hybrid multi-cloud database environment per target query performance |
CN111697973B (zh) * | 2019-05-16 | 2021-02-02 | 时擎智能科技(上海)有限公司 | 压缩方法及压缩系统 |
US11403367B2 (en) | 2019-09-12 | 2022-08-02 | Oracle International Corporation | Techniques for solving the spherical point-in-polygon problem |
US11423000B2 (en) * | 2020-04-02 | 2022-08-23 | Sap Se | Data transfer and management system for in-memory database |
US11558067B2 (en) * | 2020-05-19 | 2023-01-17 | Sap Se | Data compression techniques |
KR102598292B1 (ko) * | 2021-07-23 | 2023-11-06 | 주식회사 중앙첨단소재 | Json 포맷 압축 및 복원방법 |
DE102021123997A1 (de) | 2021-09-16 | 2023-03-16 | Swedex Holding GmbH | Computerimplementiertes Datenbankverfahren, System zur Datenverarbeitung, Computerprogrammprodukt und computerlesbares Speichermedium |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5592667A (en) * | 1991-05-29 | 1997-01-07 | Triada, Ltd. | Method of storing compressed data for accelerated interrogation |
CN1666196A (zh) * | 2002-05-10 | 2005-09-07 | 甲骨文国际公司 | 存储和访问数据,以及提高数据库查询语言语句性能的方法和机制 |
CN1853181A (zh) * | 2003-09-15 | 2006-10-25 | Ab开元软件公司 | 数据归档 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5523946A (en) * | 1992-02-11 | 1996-06-04 | Xerox Corporation | Compact encoding of multi-lingual translation dictionaries |
JPH06348569A (ja) * | 1993-06-14 | 1994-12-22 | Nec Corp | データベースシステム |
US5574906A (en) * | 1994-10-24 | 1996-11-12 | International Business Machines Corporation | System and method for reducing storage requirement in backup subsystems utilizing segmented compression and differencing |
JPH08180067A (ja) * | 1994-12-26 | 1996-07-12 | Nec Corp | データベースレコード圧縮システム |
US5870036A (en) * | 1995-02-24 | 1999-02-09 | International Business Machines Corporation | Adaptive multiple dictionary data compression |
KR19990040843A (ko) * | 1997-11-20 | 1999-06-15 | 윤종용 | 코드분할 다중접속 디지털 이동통신 시스템의 기지국 송신출력측정 및 기지국 호 시험을 위한 전력 검출 및 시험 단말장치 |
JP3337633B2 (ja) * | 1997-12-03 | 2002-10-21 | 富士通株式会社 | データ圧縮方法及びデータ復元方法並びにデータ圧縮プログラム又はデータ復元プログラムを記録したコンピュータ読み取り可能な記録媒体 |
JP3651550B2 (ja) * | 1998-02-23 | 2005-05-25 | 三菱電機株式会社 | 属性圧縮装置および方法 |
US6397308B1 (en) * | 1998-12-31 | 2002-05-28 | Emc Corporation | Apparatus and method for differential backup and restoration of data in a computer storage system |
US6519685B1 (en) * | 1999-12-22 | 2003-02-11 | Intel Corporation | Cache states for multiprocessor cache coherency protocols |
JP2002063202A (ja) * | 2000-08-22 | 2002-02-28 | Nec Corp | 情報検索システムおよび方法 |
US6801208B2 (en) * | 2000-12-27 | 2004-10-05 | Intel Corporation | System and method for cache sharing |
US7024414B2 (en) * | 2001-08-06 | 2006-04-04 | Sensage, Inc. | Storage of row-column data |
US6687794B2 (en) * | 2001-10-18 | 2004-02-03 | International Business Machines Corporation | Prefetching mechanism for data caches |
US6976181B2 (en) * | 2001-12-20 | 2005-12-13 | Intel Corporation | Method and apparatus for enabling a low power mode for a processor |
US8868544B2 (en) * | 2002-04-26 | 2014-10-21 | Oracle International Corporation | Using relational structures to create and support a cube within a relational database system |
US6667700B1 (en) * | 2002-10-30 | 2003-12-23 | Nbt Technology, Inc. | Content-based segmentation scheme for data compression in storage and transmission including hierarchical segment representation |
US7290093B2 (en) * | 2003-01-07 | 2007-10-30 | Intel Corporation | Cache memory to support a processor's power mode of operation |
US7636720B2 (en) * | 2003-05-08 | 2009-12-22 | Microsoft Corporation | Associating and using information in a metadirectory |
US7383270B1 (en) * | 2004-02-03 | 2008-06-03 | Teradata Us, Inc. | Compressing data stored in an intermediate or result table of a database |
US7269606B2 (en) * | 2004-02-26 | 2007-09-11 | Sap Ag | Automatic reduction of table memory footprint using column cardinality information |
US7536506B2 (en) * | 2004-06-21 | 2009-05-19 | Dot Hill Systems Corporation | RAID controller using capacitor energy source to flush volatile cache data to non-volatile memory during main power outage |
US7774298B2 (en) * | 2004-06-30 | 2010-08-10 | Sap Ag | Method and system for data extraction from a transaction system to an analytics system |
US7533215B2 (en) * | 2005-09-15 | 2009-05-12 | Intel Corporation | Distributed and packed metadata structure for disk cache |
US7984241B2 (en) * | 2005-09-16 | 2011-07-19 | Hewlett-Packard Development Company, L.P. | Controlling processor access to cache memory |
CA2652115C (en) * | 2006-05-12 | 2015-11-17 | Goldengate Software, Inc. | Apparatus and method for read consistency in a log mining system |
US7707176B2 (en) * | 2006-12-22 | 2010-04-27 | Sap Ag | Content management system with improved performance |
US8626702B2 (en) * | 2006-12-27 | 2014-01-07 | Sap Ag | Method and system for validation of data extraction |
-
2007
- 2007-05-21 US US11/805,186 patent/US7769729B2/en active Active
-
2008
- 2008-05-05 EP EP08008447.8A patent/EP1995878B1/en active Active
- 2008-05-20 JP JP2008132427A patent/JP4907600B2/ja active Active
- 2008-05-21 CN CN2008101079373A patent/CN101311930B/zh active Active
-
2010
- 2010-08-02 US US12/848,862 patent/US8326810B2/en active Active
-
2012
- 2012-11-12 US US13/674,477 patent/US9450605B2/en active Active
-
2016
- 2016-08-08 US US15/231,621 patent/US10884987B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5592667A (en) * | 1991-05-29 | 1997-01-07 | Triada, Ltd. | Method of storing compressed data for accelerated interrogation |
CN1666196A (zh) * | 2002-05-10 | 2005-09-07 | 甲骨文国际公司 | 存储和访问数据,以及提高数据库查询语言语句性能的方法和机制 |
CN1853181A (zh) * | 2003-09-15 | 2006-10-25 | Ab开元软件公司 | 数据归档 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11789910B2 (en) * | 2016-04-26 | 2023-10-17 | Umbra Technologies Ltd. | Data beacon pulser(s) powered by information slingshot |
WO2023028442A1 (en) * | 2021-08-24 | 2023-03-02 | Lyft, Inc. | Compressing digital metrics for transmission across a network utilizing a graph-based compression dictionary and time slice delta compression |
Also Published As
Publication number | Publication date |
---|---|
EP1995878A3 (en) | 2009-07-08 |
US7769729B2 (en) | 2010-08-03 |
CN101311930A (zh) | 2008-11-26 |
US20130073530A1 (en) | 2013-03-21 |
US10884987B2 (en) | 2021-01-05 |
EP1995878A2 (en) | 2008-11-26 |
US20100299316A1 (en) | 2010-11-25 |
US20170031944A1 (en) | 2017-02-02 |
US8326810B2 (en) | 2012-12-04 |
JP2008287723A (ja) | 2008-11-27 |
JP4907600B2 (ja) | 2012-03-28 |
US9450605B2 (en) | 2016-09-20 |
US20080294863A1 (en) | 2008-11-27 |
EP1995878B1 (en) | 2017-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101311930B (zh) | 具有重复值的表的块压缩 | |
CN101311931B (zh) | 基于值的出现的表压缩 | |
Bassiouni | Data compression in scientific and statistical databases | |
CN102112986B (zh) | 对基于列的数据编码的结构的高效的大规模处理 | |
US8700579B2 (en) | Method and system for data compression in a relational database | |
Melnik et al. | Dremel: interactive analysis of web-scale datasets | |
Wu | Notes on design and implementation of compressed bit vectors | |
CN102112962A (zh) | 用于大规模数据存储的高效的基于列的数据编码 | |
CN102171695A (zh) | 用于基于列的数据编码的结构的查询的高效大规模联接 | |
CA2795525C (en) | Columnar storage representations of records | |
CA2485423A1 (en) | Storing and querying relational data in compressed storage format | |
Tenhunen | Scientific Methods in Relational Database Compression Research | |
Bhuiyan et al. | High Performance SQL Queries on Compressed Relational Database. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |