CN101311931B - 基于值的出现的表压缩 - Google Patents
基于值的出现的表压缩 Download PDFInfo
- Publication number
- CN101311931B CN101311931B CN2008101079388A CN200810107938A CN101311931B CN 101311931 B CN101311931 B CN 101311931B CN 2008101079388 A CN2008101079388 A CN 2008101079388A CN 200810107938 A CN200810107938 A CN 200810107938A CN 101311931 B CN101311931 B CN 101311931B
- Authority
- CN
- China
- Prior art keywords
- row
- value
- frequent
- data
- bit vectors
- 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/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
- G06F16/2237—Vectors, bitmaps or matrices
-
- 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
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/40—Data acquisition and logging
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
公开了包括计算机程序产品的方法和装置,用于基于值的出现对表进行压缩。总体来说,生成表示在列的相邻行的组中频繁出现值的出现量的数量,生成表示在所述列的行中是否存在该频繁出现值的向量,并且存储所述数量和所述向量以实现对所述数量和所述向量所表示的数据的搜索。向量可以省略表示相邻行的组的部分。值可以是表示诸如业务对象的业务数据的基于字典的压缩值。压缩可以在存储器内并行执行,以改进存储器利用率、网络带宽消耗和处理性能。
Description
技术领域
本公开内容涉及数字计算机的数据处理,更具体地说,涉及基于值的出现对表进行压缩。
背景技术
搜索引擎可以在诸如关系表之类的数据库表中搜索大量数据,以找到结果。对于海量数据,诸如包含上百万的记录的表的组合,数据的处理可能需要大量硬件资源。例如,可能需要大量随机存取存储器空间来存储与执行用户请求相关的所有记录。
发明内容
这里公开的主题提供包括计算机程序产品的方法和装置,其实现与基于值的出现对表进行压缩相关的技术。
在一个方面,生成基于字典的压缩值的列,对列进行排序,生成至少一个比特向量以用于所述列中的至少一个,生成表示所述列中的至少一个的最频繁出现值的出现的数量,从比特向量中去除最频繁出现值,并且存储所述数量和所述比特向量以实现对每一个所述数量和所述比特向量所表示的数据的存储器内搜索。所述基于字典的压缩值的列以基于列的数据库的每列的可能值的字典为基础,并且所述值可以代表结构化的业务数据。所述排序可以包括对列进行排序,以使得在列的顺序中排在第一的第一列具有的该第一列的最频繁出现值比其它列的频繁出现值出现得更频繁。排序还可以包括对所述第一列进行排序,以使得该第一列的最频繁出现值的实例位于该第一列的一端,并且对其它列进行排序,以使得所述其它列中的至少一个的最频繁出现值的实例朝向各个其它列的端部。比特向量中的每一个可以表示各列的最频繁出现值,其中每个比特表示最频繁出现值是否存在。
在相关的方面,为所述列中的至少一列生成对应于数据列的最频繁出现值的至少一个比特向量,生成表示该列的最频繁出现值的出现的至少一个数量,从所述至少一个比特向量中去除最频繁出现值,并且存储所述数量和所述至少一个比特向量,以实现对所述数量和所述比特向量所表示的数据的搜索。所述向量的每个比特表示在所述列的相应位置上值是否被实例化。
在相关方面,生成表示在列的相邻行的组中频繁出现值的出现量的数量,生成表示在所述列的行中频繁出现值被实例化的位置的向量,并且存储所述数量和所述向量以实现对所述数量和所述向量所表示的数据的搜索。所述向量可以省略表示相邻行的组的部分。
主题可以被实现为例如计算机程序产品(例如,有形地体现在计算机可读介质中的源代码和编译代码)、计算机实现的方法和***。
变化可以包括一个和多个下列特征。
列的值可以是表示结构化业务数据的值,其可以具有表的同一行中的数据相关性。业务数据可以包括业务对象,其可以被建模为连接表的集合。
动作可以在多个硬件服务器上并行执行。例如,行可以分布在多个服务器上,并且每个服务器可以负责压缩它的行中的数据。
可以从列中去除与向量对应的频繁出现值,例如与比特向量对应的最频繁出现值,以生成简化列。可以替代列而存储简化列。
可以为每一列、为所有列和为列的集合的任何子集生成比特向量。
对列的值的改变可以存储在与列分离的增量缓冲器中,并且可以异步整合所述改变。
可以实现这里描述的主题以实现下列优点中的一个和多个。对海量数据库数据(例如包含海量数据的关系表)进行有效处理,可能需要高级数据压缩,以在所安装的存储器中(例如易失性存储器)或在硬盘存储器设备上保留数据卷,并用于在移动数据时(例如从硬盘驱动器移动到存储器)的高效数据流。压缩可能在信息处理硬件领域中具有多种影响,因为缩减的数据量会需要较少的安装的主存储器或硬盘容量,并且缩减的数据流会对处理器高速缓存、处理器架构和网络带宽具有较低的要求。所有这些都可能对硬件需求、响应时间和总体***性能具有有益影响。诸如业务数据的数据可以被压缩并在存储器中进行搜索,因为对显著的数据压缩可以允许对数据进行节省成本的存储器内处理(例如,可以缩减服务器数量或物理存储空间的量)。可以使用增量缓冲器来异步更新数据,并且增量缓冲器可以帮助实现对索引更新进行调度,以在不阻碍搜索性能时运行(例如,***可能用于优选异步的、不经常更新的情况中,以作为对提高搜索的响应时间的折衷)。可以实现压缩技术的组合,这可以取决于具体情况而提供有益的存储器成本缩减。例如,如果期望缩减一列的存储器占用空间,则可以仅仅对该列执行基于字典的压缩,同时在期望进行压缩以减少存储器占用空间的情况下可以对其它列执行基于向量的压缩。
在附图和下面的描述中陈述了一个或多个实现方式的细节。从说明书、附图和权利要求书中,进一步的特征、方面和优点变得更加明显。
附图说明
图1A是图示结构化数据的表、用于表的列的字典、属性表和主索引的框图。
图1B是图示结构化数据的表、用于表的列的字典、属性表和增量索引的框图。
图1C是图示从主索引和增量索引生成结果集合的示例。
图2A-2B是图示结构化数据的表的框图。
图3是图示属性和关键指标(key figure)的基数(cardinality)的表。
图4A-4B是图示根据基于向量的压缩而进行压缩的列的框图。
图5是图示用于压缩数据和搜索压缩的数据的***的框图。
图6是图示对跨越多列的数据进行排序的表的框图。
图7A-7B是图示对数据进行压缩和实现对压缩数据进行搜索的处理的流程图。
不同附图中的相同参考标号和标记指代相同的元素。
具体实施方式
一般来说,在图1-7中,可以利用可以被称为基于字典的压缩、比特向量压缩(或基于向量的压缩)、排序比特向量压缩(或基于缩短的向量的压缩)、以及块向量压缩这样的技术的组合来压缩数据。所述数据可以是结构化的业务数据,其中从如下意义上说数据被结构化,即,数据可以是组织在诸如表之类的数据结构中的属性或关键指标,并且属性或关键指标可以具有相关性。例如,在信息表中,行可能在该行的数据之间具有相关性,使得该行的每列中的数据都与该行的其它列中的其它数据相关联。数据的诸如空值的特定值可能在跨越成千或成百万的行中被非常频繁的实例化,所述成千或成百万的行可能位于数据结构的一部分中,诸如在表的特定行中,或者也可能跨越整个数据结构,从这个意义上说,数据可以形成稀疏分布。例如,具有两千万条目的数据列可以包括一千九百万个空条目,其中该一千九百万个空条目位于不一定相邻的不同行中。
图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是图示根据基于向量的压缩而被压缩的列的框图。该压缩可以被称为比特向量压缩。总的来说,该压缩可以涉及找到列中最频繁的值并且使用该列的比特向量来表示该值的出现或未出现。例如,l表示该值出现而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的每次出现旁边的l和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)的代码会比没有基于缩短的向量的压缩的情况更整洁并且更加快速。
举一个可以实现多少压缩的例子,如以上所述再次令表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包括特定顺序的特定处理,但是可以存在附加的、更少的或不同的子处理,并且那些子处理可以是以其它不同的顺序。例如,可以基于列的出现最频繁的值的比特向量表示对列进行排序,而不是对整列进行排序(例如,可以仅仅将出现最频繁的值排序到列的一端,而其它值不需要在它们之间进行排序)。
再例如,可以基于对是否期望用一种类型的压缩(如果有的话)来优化性能(例如,降低存储器消耗)的确定,来应用基于字典的压缩、基于普通向量的压缩、以及基于缩短的向量的压缩。例如,如果预期与列的基于非字典的值相比,基于字典的值和字典将消耗更少的存储器,则可以执行基于字典的压缩。再例如,可以只对具有属性而非关键指标的行使用任意类型的压缩来进行压缩。
尽管每幅图描述了特征的特定组合,但是实施方式可以改变。例如,附加的、不同的或更少的组件可以被包括在图5的***500中。
这里描述的主题可以用包括本说明书中公开的结构装置和它们的结构等同物的数字电子电路或计算机软件、固件、硬件、或者它们的组合来实现。这里描述的主题可以实现为一个或多个计算机程序产品,即,有形地具体实施在信息载体中(例如在机器可读存储设备中或在传播信号中)的一个或多个计算机程序,以供数据处理装置执行,或者用于控制数据处理装置的操作,所述数据处理装置例如可编程处理器、计算机或多个计算机。计算机程序(也称作程序、软件、软件应用或代码)可以用任何形式的编程语言来编写,编程语言包括汇编语言或解释语言,并且计算机程序可以任何形式配置,包括作为独立程序或者作为模块、组件、子程序、或者其它适合用于计算机环境的任何单元。计算机程序不一定对应于文件。程序可以存储在保持其它程序或数据的文件的一部分中,存储在专用于所述程序的单个文件中,或者存储在多个协作文件中(例如,存储一个或多个模块、子程序或代码部分的文件)。计算机程序可以被部署成在一台计算机上或者在位于一个地点或者分布在多个地点并通过通信网络互连的多个计算机上执行。
本说明书中所描述的处理和逻辑流,包括这里描述的主题的方法和步骤,可以由一个或多个可编程处理器来执行,该可编程处理器执行一个或多个计算机程序,以通过对输入数据进行操作并生成输出来执行这里描述的主题的功能。所述处理和逻辑流也可以由专用逻辑电路来执行,并且这里描述的主题的装置也可以被实现为专用逻辑电路,专用逻辑电路例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
举例来说,适合于执行计算机程序的处理器包括通用微处理器和专用微处理器两者,以及任何种类的数字计算机的任何一个或多个处理器。一般来说,处理器将从只读存储器、随机访问存储器或者二者接收指令和数据。计算机的主要元件是用于执行指令的处理器以及用于存储指令和数据的一个或多个存储设备。一般来说,计算机还将包括用于存储数据的一个或多个大容量存储设备,或者被可操作地耦接到所述一个或多个大容量存储设备,以便从其接收数据或向其发送数据或者二者都进行,大容量存储设备例如磁盘、磁光盘或者光盘。适于体现计算机程序指令和数据的介质包括所有形式的易失性存储器(例如,随机访问存储器)或非易失性存储器,举例来说,包括半导体存储设备,例如,EPROM、EEPROM、闪存设备;磁盘,例如内部硬盘或可移动盘;磁光盘;以及CD-ROM和DVD-ROM盘。所述处理器和存储器可以由专用逻辑电路补充,或者合并到所述专用逻辑电路中。
为了提供与用户的交互,这里描述的主题可以在具有用于向用户显示信息的显示设备以及用户可以通过其向计算机提供输入的键盘、定点设备的计算机上实现,显示设备例如CRT(阴极射线管)或LCD(液晶显示器),定点设备例如鼠标或跟踪球。其它类型的设备也可以用来与用户进行交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈、或触觉反馈;并且,来自用户的输入可以被以任何形式接收,包括声音、语音或者触觉输入。
这里描述的主题可以在计算机***中实现,该计算机***包括后端组件(例如,数据服务器)、中间件组件(例如,应用服务器)、或者前端组件(例如,具有用户通过其可以与这里描述的主题的实施方式进行交互的图形用户界面或网络浏览器的客户计算机),或者这样的前端组件、中间件、后端组件的任意组合。通过任何形式或介质的数字数据通信,例如,通信网络,可以将***的组件相互连接。通信网络的示例包括局域网(LAN)和广域网(WAN),例如因特网。
计算机***可以包括客户机和服务器。客户机和服务器通常在逻辑意义上远离对方,并且典型地通过通信网络来进行交互。客户机和服务器的关系借助运行在各自计算机上的彼此具有客户机-服务器关系的计算机程序而发生。
已经按照具体实施例描述了这里描述的主题,并且其它实施例也可以被实施并且也在所附权利要求书的范围内。例如,操作可以不同但仍然达到期望的结果。在特定实施方式中,多任务和并行处理可以是优选的。其他实施例也在所附权利要求书的范围内。
Claims (20)
1.一种对数据进行压缩的方法,所述方法包括:
生成基于字典的压缩值的列,所述基于字典的压缩值的列以基于列的数据库的每列的可能值的字典为基础,并且是结构化的业务数据;
对所述列进行排序,以使得在所述列的顺序中排在第一的第一列具有的该第一列中的最频繁出现值比其它列的频繁出现值出现得更频繁;
对所述第一列进行排序,以使得该第一列的最频繁出现值的实例位于该第一列的一端;
对所述其它列中的至少一个进行排序,以使得所述其它列中的至少一个的最频繁出现值的实例朝向各个其它列的端部;
生成用于所述列中的至少一个的比特向量,所述比特向量中的每一个表示各列的最频繁出现值,所述生成用于所述列中的至少一个的比特向量包括使比特向量的每个比特在最频繁出现值存在于相应列的相应行中时表示该最频繁出现值存在;
生成用于具有相关联的比特向量的列中的每一个的数量,该数量表示列的一端的最频繁出现值的出现量;
基于与比特向量相关联的数量,从比特向量的每一个中去除各个列的一端的最频繁出现值的表示;以及
存储用于一个或多个比特向量的每一个的一个或多个数量,以实现对每一个所述数量和所述比特向量所表示的数据的非易失性存储器搜索。
2.如权利要求1所述的方法,其中,所述基于字典的压缩值是表示在表的同一行之间具有数据相关性的结构化业务数据的值。
3.如权利要求2所述的方法,其中,所述业务数据包括建模为连接表的集合的业务对象。
4.如权利要求1所述的方法,其中,在多个硬件服务器中并行执行所述方法。
5.如权利要求4所述的方法,还包括从对应于所述一个或多个数量从列中去除最频繁出现值,以生成简化列,并代替所述列而存储该简化的列。
6.如权利要求1所述的方法,其中,为所述列中的每一个或所有所述列生成所述比特向量。
7.如权利要求1所述的方法,其中,在与所述列分离的增量缓冲器中存储对所述列的基于字典的压缩值的改变,并且所述改变被异步地整合。
8.一种对数据进行压缩的方法,所述方法包括:
对数据列进行排序,以帮助生成表示频繁出现的值的出现次数的数量,所述数据列包括基于字典压缩的值;
生成与排序后的数据列的值相对应的比特向量,所述生成包括使所述向量的每个比特在所述值存在于所述排序后的列的行中时表示该值存在,而在另外的值存在于该排序后的列的行中时表示该值不存在;
生成表示所述排序后的列的最频繁出现值的出现量的数量;
从所述比特向量去除在所述排序后的列中该最频繁出现值的表示;以及
存储所述数量和所述比特向量,以实现对所述数量和所述比特向量所表示的数据的搜索。
9.如权利要求8所述的方法,其中,所述基于字典的压缩值是表示在表的同一行之间具有数据相关性的结构化业务数据的值。
10.如权利要求8所述的方法,其中,在非易失存储器中、在多个硬件服务器上并行执行所述产品的操作。
11.如权利要求8所述的方法,其中,所述比特向量对应于所述排序后的列的最频繁出现值。
12.如权利要求8所述的方法,还包括从所述排序后的列去除所述最频繁出现值,以生成简化列,并且代替所述列而存储所述简化列。
13.如权利要求8所述的方法,其中,将对所述列的基于字典的压缩值的改变存储在与所述列分离的增量缓冲器中,并且异步地整合所述改变。
14.如权利要求8所述的方法,还包括:
生成基于字典的压缩值。
15.一种对数据进行压缩的方法,包括:
生成表示在列的相邻行的组中频繁出现值的出现量的数量;
生成用于所述列的频繁出现值的向量,所述向量表示在所述列的行中是否存在该频繁出现值,并且所述向量省略了表示所述相邻行的组的部分;以及
存储所述数量和所述向量以实现对所述数量和所述向量所表示的数据的搜索。
16.如权利要求15所述的方法,其中,所述列的值表示具有在表的同一行之间具有数据相关性的结构化业务数据。
17.如权利要求15所述的方法,其中,所述向量对应于所述列的最频繁出现值。
18.如权利要求15所述的方法,还包括从所述列中去除频繁出现值,以生成简化列,并且替代所述列而存储所述简化列。
19.如权利要求15所述的方法,其中,将对所述列的值的改变存储在与所述列分离的增量缓冲器中,并且异步整合所述改变。
20.如权利要求15所述的方法,其中,所述向量是比特向量。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/805,178 US8032499B2 (en) | 2007-05-21 | 2007-05-21 | Compression of tables based on occurrence of values |
US11/805,178 | 2007-05-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101311931A CN101311931A (zh) | 2008-11-26 |
CN101311931B true CN101311931B (zh) | 2011-12-07 |
Family
ID=39485118
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101079388A Active CN101311931B (zh) | 2007-05-21 | 2008-05-21 | 基于值的出现的表压缩 |
Country Status (4)
Country | Link |
---|---|
US (4) | US8032499B2 (zh) |
EP (1) | EP1995877B1 (zh) |
KR (1) | KR101529315B1 (zh) |
CN (1) | CN101311931B (zh) |
Families Citing this family (105)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8886614B2 (en) * | 2004-02-03 | 2014-11-11 | Teradata Us, Inc. | Executing a join plan using data compression |
US9460064B2 (en) * | 2006-05-18 | 2016-10-04 | Oracle International Corporation | Efficient piece-wise updates of binary encoded XML data |
US8032499B2 (en) | 2007-05-21 | 2011-10-04 | Sap Ag | Compression of tables based on occurrence of values |
US9003054B2 (en) * | 2007-10-25 | 2015-04-07 | Microsoft Technology Licensing, Llc | Compressing null columns in rows of the tabular data stream protocol |
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 |
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 |
US8250043B2 (en) * | 2008-08-19 | 2012-08-21 | Netapp, Inc. | System and method for compression of partially ordered data sets |
US10430415B2 (en) * | 2008-12-23 | 2019-10-01 | International Business Machines Corporation | Performing predicate-based data compression |
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 |
US8356060B2 (en) | 2009-04-30 | 2013-01-15 | Oracle International Corporation | Compression analyzer |
US8935223B2 (en) * | 2009-04-30 | 2015-01-13 | Oracle International Corporation | Structure of hierarchical compressed data structure for tabular data |
US9667269B2 (en) | 2009-04-30 | 2017-05-30 | Oracle International Corporation | Technique for compressing XML indexes |
US8577902B1 (en) * | 2009-05-12 | 2013-11-05 | Microstrategy Incorporated | Data organization and indexing related technology |
US8452755B1 (en) | 2009-05-12 | 2013-05-28 | Microstrategy Incorporated | Database query analysis technology |
US8296517B2 (en) | 2009-08-19 | 2012-10-23 | Oracle International Corporation | Database operation-aware striping technique |
US20130262486A1 (en) * | 2009-11-07 | 2013-10-03 | Robert B. O'Dell | Encoding and Decoding of Small Amounts of Text |
US8832142B2 (en) | 2010-08-30 | 2014-09-09 | Oracle International Corporation | Query and exadata support for hybrid columnar compressed data |
TW201143305A (en) * | 2009-12-29 | 2011-12-01 | Ibm | Data value occurrence information for data compression |
US8255372B2 (en) | 2010-01-18 | 2012-08-28 | Oracle International Corporation | Efficient validation of binary XML data |
US9195657B2 (en) * | 2010-03-08 | 2015-11-24 | Microsoft Technology Licensing, Llc | Columnar storage of a database index |
US9152683B2 (en) * | 2010-10-05 | 2015-10-06 | International Business Machines Corporation | Database-transparent near online archiving and retrieval of data |
US8442988B2 (en) | 2010-11-04 | 2013-05-14 | International Business Machines Corporation | Adaptive cell-specific dictionaries for frequency-partitioned multi-dimensional data |
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 |
US20120303633A1 (en) * | 2011-05-26 | 2012-11-29 | International Business Machines Corporation | Systems and methods for querying column oriented databases |
US10756759B2 (en) * | 2011-09-02 | 2020-08-25 | Oracle International Corporation | Column domain dictionary compression |
US8843456B2 (en) * | 2011-12-06 | 2014-09-23 | International Business Machines Corporation | Database table compression |
US9792117B2 (en) | 2011-12-08 | 2017-10-17 | Oracle International Corporation | Loading values from a value vector into subregisters of a single instruction multiple data register |
US9697174B2 (en) | 2011-12-08 | 2017-07-04 | Oracle International Corporation | Efficient hardware instructions for processing bit vectors for single instruction multiple data processors |
WO2013086380A1 (en) | 2011-12-08 | 2013-06-13 | Oracle International Corporation | Techniques for more efficient usage of memory - to - cpu bandwidth |
US10534606B2 (en) | 2011-12-08 | 2020-01-14 | Oracle International Corporation | Run-length encoding decompression |
US9342314B2 (en) | 2011-12-08 | 2016-05-17 | Oracle International Corporation | Efficient hardware instructions for single instruction multiple data processors |
US9582553B2 (en) * | 2012-06-26 | 2017-02-28 | Sap Se | Systems and methods for analyzing existing data models |
US8862571B2 (en) * | 2012-06-29 | 2014-10-14 | International Business Machines Corporation | Predicate pushdown with late materialization in database query processing |
US8838577B2 (en) | 2012-07-24 | 2014-09-16 | International Business Machines Corporation | Accelerated row decompression |
US8812523B2 (en) | 2012-09-28 | 2014-08-19 | Oracle International Corporation | Predicate result cache |
US9063974B2 (en) | 2012-10-02 | 2015-06-23 | Oracle International Corporation | Hardware for table scan acceleration |
KR101403356B1 (ko) * | 2012-10-22 | 2014-06-05 | (주)티베로 | 데이터 압축 장치, 데이터 압축 방법 및 그 방법을 위한 컴퓨터 판독 가능한 기록 매체 |
CN103885984B (zh) * | 2012-12-21 | 2018-05-04 | 国际商业机器公司 | 处理数据库查询结果集的方法和设备 |
US9442949B2 (en) | 2013-03-14 | 2016-09-13 | Futurewei Technologies, Inc. | System and method for compressing data in a database |
US10296462B2 (en) | 2013-03-15 | 2019-05-21 | Oracle International Corporation | Method to accelerate queries using dynamically generated alternate data formats in flash cache |
US10642837B2 (en) | 2013-03-15 | 2020-05-05 | Oracle International Corporation | Relocating derived cache during data rebalance to maintain application performance |
US9165050B2 (en) * | 2013-07-19 | 2015-10-20 | Sap Se | Data availability during columnar table merges |
US9659050B2 (en) * | 2013-08-06 | 2017-05-23 | Sybase, Inc. | Delta store giving row-level versioning semantics to a non-row-level versioning underlying store |
US8902086B1 (en) * | 2013-09-11 | 2014-12-02 | Allegiance Software, Inc. | Data encoding for analysis acceleration |
US9430390B2 (en) | 2013-09-21 | 2016-08-30 | Oracle International Corporation | Core in-memory space and object management architecture in a traditional RDBMS supporting DW and OLTP applications |
US8933829B2 (en) | 2013-09-23 | 2015-01-13 | International Business Machines Corporation | Data compression using dictionary encoding |
US9495466B2 (en) | 2013-11-27 | 2016-11-15 | Oracle International Corporation | LIDAR model with hybrid-columnar format and no indexes for spatial searches |
US9336196B2 (en) | 2013-12-06 | 2016-05-10 | Sap Se | Methods, systems, and apparatus for optimization using statistical estimation |
US9608664B2 (en) | 2013-12-30 | 2017-03-28 | International Business Machines Corporation | Compression of integer data using a common divisor |
CN103761316B (zh) * | 2014-01-26 | 2018-02-06 | 北京中电普华信息技术有限公司 | 一种基于稀疏矩阵的数据压缩存储方法及装置 |
CN104899204B (zh) * | 2014-03-05 | 2020-04-07 | 腾讯科技(深圳)有限公司 | 数据存储方法及装置 |
US9628107B2 (en) | 2014-04-07 | 2017-04-18 | International Business Machines Corporation | Compression of floating-point data by identifying a previous loss of precision |
CN105022739B (zh) * | 2014-04-21 | 2019-05-21 | 腾讯科技(北京)有限公司 | 数据的存储方法及装置 |
US10726005B2 (en) | 2014-06-25 | 2020-07-28 | Sap Se | Virtual split dictionary for search optimization |
US10057217B2 (en) * | 2014-07-15 | 2018-08-21 | Sap Se | System and method to secure sensitive content in a URI |
US9350384B2 (en) | 2014-09-30 | 2016-05-24 | International Business Machines Corporation | Hierarchical data compression and computation |
US10210280B2 (en) | 2014-10-23 | 2019-02-19 | Sap Se | In-memory database search optimization using graph community structure |
US9959299B2 (en) | 2014-12-02 | 2018-05-01 | International Business Machines Corporation | Compression-aware partial sort of streaming columnar data |
US9413386B1 (en) | 2015-02-19 | 2016-08-09 | Qualcomm Incorporated | System, apparatus, and method for decompressing data |
US10909078B2 (en) | 2015-02-25 | 2021-02-02 | International Business Machines Corporation | Query predicate evaluation and computation for hierarchically compressed data |
US10459913B2 (en) | 2015-02-26 | 2019-10-29 | Red Hat, Inc. | Database query processing |
US9306597B1 (en) | 2015-03-30 | 2016-04-05 | Microsoft Technology Licensing, Llc | Data compression |
US10248622B2 (en) * | 2015-03-30 | 2019-04-02 | Sap Se | Variable virtual split dictionary for search optimization |
US10025823B2 (en) | 2015-05-29 | 2018-07-17 | Oracle International Corporation | Techniques for evaluating query predicates during in-memory table scans |
US10733164B2 (en) | 2015-06-23 | 2020-08-04 | Microsoft Technology Licensing, Llc | Updating a bit vector search index |
US11392568B2 (en) | 2015-06-23 | 2022-07-19 | Microsoft Technology Licensing, Llc | Reducing matching documents for a search query |
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 |
US9990308B2 (en) | 2015-08-31 | 2018-06-05 | Oracle International Corporation | Selective data compression for in-memory databases |
US10169361B2 (en) | 2015-11-16 | 2019-01-01 | International Business Machines Corporation | Columnar database compression |
US10303655B1 (en) * | 2015-12-21 | 2019-05-28 | EMC IP Holding Company LLC | Storage array compression based on the structure of the data being compressed |
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 |
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 |
US10235100B2 (en) | 2016-08-23 | 2019-03-19 | Sap Se | Optimizing column based database table compression |
US10133667B2 (en) | 2016-09-06 | 2018-11-20 | Orcle International Corporation | Efficient data storage and retrieval using a heterogeneous main memory |
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 |
US10762071B2 (en) * | 2016-11-29 | 2020-09-01 | Sap Se | Value-ID-based sorting in column-store databases |
US10725947B2 (en) | 2016-11-29 | 2020-07-28 | Oracle International Corporation | Bit vector gather row count calculation and handling in direct memory access engine |
US11086876B2 (en) | 2017-09-29 | 2021-08-10 | Oracle International Corporation | Storing derived summaries on persistent memory of a storage device |
US11699032B2 (en) * | 2017-11-03 | 2023-07-11 | Microsoft Technology Licensing, Llc | Data set lookup with binary search integration and caching |
US11663207B2 (en) * | 2018-09-24 | 2023-05-30 | Salesforce, Inc. | Translation of tenant identifiers |
US11086828B2 (en) * | 2018-10-12 | 2021-08-10 | Sap Se | Compression of column store tables |
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 |
US11157478B2 (en) | 2018-12-28 | 2021-10-26 | Oracle International Corporation | Technique of comprehensively support autonomous JSON document object (AJD) cloud service |
US11184021B2 (en) * | 2019-03-15 | 2021-11-23 | Samsung Electronics Co., Ltd. | Using predicates in conditional transcoder for column store |
US11514027B2 (en) | 2019-06-07 | 2022-11-29 | Sap Se | Paged hybrid LOBs |
US11403367B2 (en) | 2019-09-12 | 2022-08-02 | Oracle International Corporation | Techniques for solving the spherical point-in-polygon problem |
US11423001B2 (en) | 2019-09-13 | 2022-08-23 | Oracle International Corporation | Technique of efficiently, comprehensively and autonomously support native JSON datatype in RDBMS for both OLTP and OLAP |
US11386089B2 (en) | 2020-01-13 | 2022-07-12 | The Toronto-Dominion Bank | Scan optimization of column oriented storage |
US11558067B2 (en) * | 2020-05-19 | 2023-01-17 | Sap Se | Data compression techniques |
US11463559B1 (en) | 2021-08-24 | 2022-10-04 | Lyft, Inc. | Compressing digital metrics for transmission across a network utilizing a graph-based compression dictionary and time slice delta compression |
US11609889B1 (en) * | 2021-09-17 | 2023-03-21 | International Business Machines Corporation | Reordering datasets in a table for increased compression ratio |
US20240086392A1 (en) * | 2022-09-14 | 2024-03-14 | Sap Se | Consistency checks for compressed data |
SE545875C2 (en) * | 2023-03-30 | 2024-02-27 | Tomicic Consulting AB | Method and system for referencing data |
CN118100955B (zh) * | 2024-04-26 | 2024-07-23 | 深圳鲲云信息科技有限公司 | 一种用于对压缩数据进行并行解压的预处理的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1317116A (zh) * | 1998-07-08 | 2001-10-10 | 必需技术公司 | 值一实例连接的计算机实现的数据库 |
CN1808431A (zh) * | 2005-12-31 | 2006-07-26 | 中国工商银行股份有限公司 | 多表连接方法 |
Family Cites Families (15)
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 |
US6269363B1 (en) * | 1994-01-24 | 2001-07-31 | Yossi Matias | Method of accessing data using approximate data structures by relaxing the operations that define same |
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 |
US5870036A (en) * | 1995-02-24 | 1999-02-09 | International Business Machines Corporation | Adaptive multiple dictionary data compression |
US6112208A (en) * | 1997-08-25 | 2000-08-29 | Fujitsu Limited | Data compressing method and apparatus to generate bit maps in accordance with extracted data symbols |
JP3337633B2 (ja) * | 1997-12-03 | 2002-10-21 | 富士通株式会社 | データ圧縮方法及びデータ復元方法並びにデータ圧縮プログラム又はデータ復元プログラムを記録したコンピュータ読み取り可能な記録媒体 |
US20020099691A1 (en) * | 1998-06-24 | 2002-07-25 | Michael Dean Lore | Method and apparatus for aggregation of data in a database management system |
EP1217540A1 (en) * | 2000-11-29 | 2002-06-26 | Lafayette Software Inc. | Methods of organizing data and processing queries in a database system, and database system and software product for implementing such method |
EP1407386A2 (en) * | 2001-06-21 | 2004-04-14 | ISC, Inc. | Database indexing method and apparatus |
US20050119299A1 (en) | 2002-03-08 | 2005-06-02 | Sankyo Company, Limited | Ophthalmic solutions containing tetrazole derivatives |
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 |
US7243110B2 (en) * | 2004-02-20 | 2007-07-10 | Sand Technology Inc. | Searchable archive |
US7269606B2 (en) * | 2004-02-26 | 2007-09-11 | Sap Ag | Automatic reduction of table memory footprint using column cardinality information |
US7792877B2 (en) * | 2007-05-01 | 2010-09-07 | Microsoft Corporation | Scalable minimal perfect hashing |
US8032499B2 (en) | 2007-05-21 | 2011-10-04 | Sap Ag | Compression of tables based on occurrence of values |
-
2007
- 2007-05-21 US US11/805,178 patent/US8032499B2/en active Active
-
2008
- 2008-03-19 EP EP08005176.6A patent/EP1995877B1/en active Active
- 2008-05-20 KR KR1020080046518A patent/KR101529315B1/ko active IP Right Grant
- 2008-05-21 CN CN2008101079388A patent/CN101311931B/zh active Active
-
2011
- 2011-08-26 US US13/219,499 patent/US8126855B2/en active Active
-
2012
- 2012-01-23 US US13/356,567 patent/US8768899B2/en active Active
-
2014
- 2014-05-12 US US14/275,709 patent/US9852169B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1317116A (zh) * | 1998-07-08 | 2001-10-10 | 必需技术公司 | 值一实例连接的计算机实现的数据库 |
CN1808431A (zh) * | 2005-12-31 | 2006-07-26 | 中国工商银行股份有限公司 | 多表连接方法 |
Also Published As
Publication number | Publication date |
---|---|
KR20080102981A (ko) | 2008-11-26 |
US20110313980A1 (en) | 2011-12-22 |
CN101311931A (zh) | 2008-11-26 |
US20140250090A1 (en) | 2014-09-04 |
EP1995877A1 (en) | 2008-11-26 |
US20120124019A1 (en) | 2012-05-17 |
KR101529315B1 (ko) | 2015-06-29 |
US8768899B2 (en) | 2014-07-01 |
EP1995877B1 (en) | 2016-11-02 |
US8126855B2 (en) | 2012-02-28 |
US20080294676A1 (en) | 2008-11-27 |
US9852169B2 (en) | 2017-12-26 |
US8032499B2 (en) | 2011-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101311931B (zh) | 基于值的出现的表压缩 | |
CN101311930B (zh) | 具有重复值的表的块压缩 | |
Bassiouni | Data compression in scientific and statistical databases | |
US8700579B2 (en) | Method and system for data compression in a relational database | |
US9020910B2 (en) | Storing tables in a database system | |
Wu | Notes on design and implementation of compressed bit vectors | |
US20030212694A1 (en) | Method and mechanism of improving performance of database query language statements | |
CN101499065B (zh) | 基于fa的表项压缩方法及装置、表项匹配方法及装置 | |
CA2485423A1 (en) | Storing and querying relational data in compressed storage format | |
CN105144157A (zh) | 用于压缩数据库中的数据的***和方法 | |
CN103198127B (zh) | 大文件排序方法及*** | |
Dong et al. | Record-aware compression for big textual data analysis acceleration | |
US20230367752A1 (en) | Systems and methods for processing timeseries data | |
Tenhunen | Scientific Methods in Relational Database Compression Research | |
Bhuiyan et al. | High Performance SQL Queries on Compressed Relational Database. | |
Klose | A Cost Model for Compression Techniques in Hybrid Main Memory Database Systems | |
Vitter | Online Electronic Catalog of Jeff Vitter |
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 |