首页 / 专利库 / 齿轮 / 齿轮 / 倒档 / 基于Hbase数据库的倒排索引混合压缩及解压方法

基于Hbase数据库的倒排索引混合压缩及解压方法

阅读:145发布:2023-01-23

专利汇可以提供基于Hbase数据库的倒排索引混合压缩及解压方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于Hbase 数据库 的倒排索引混合压缩方法,包括以下步骤:对Hbase数据库进行处理得到内容包括键和值的Hbase数据库倒排索引数据表;对键部分采用键既字典压缩法进行压缩;对值部分采用可变字节码压缩法进行压缩;将压缩后的内容写入文件。本发明还公开了一种采用上述压缩方法压缩后的压缩文件键部分的解压方法,对每一条压缩数据的长度进行判断,根据以下两种情况分别处理并获得解压数据:1、长度小于或等于13,2、长度大于或等于25,否则解压失败。本发明采用分类混合压缩方法及分类解压法,在尽量保证高解压率的前提下提高压缩比,实现文件读取和数据解压的统一考量,在整体上提高倒排索引的查询效率并节省存储空间。,下面是基于Hbase数据库的倒排索引混合压缩及解压方法专利的具体信息内容。

1.一种基于Hbase数据库的倒排索引混合压缩方法,其特征在于:包括以下步骤:(1)对所述Hbase数据库进行倒排索引处理得到Hbase数据库倒排索引数据表,所述Hbase数据库倒排索引数据表的内容包括键和值;(2)对所述Hbase数据库倒排索引数据表中的键部分采用键既字典压缩法进行压缩;(3)对所述Hbase数据库倒排索引数据表中的值部分采用可变字节码压缩法进行压缩;(4)将压缩后的内容写入文件;所述步骤(1)中,所述Hbase数据库倒排索引数据表的逻辑视图图表如下所示:
上表中,Rowkey表示行键,在倒排索引表中表示某个词,对应于词级倒排表中的索引项T;Timestamp是由Hbase数据库在插入数据时自动生成的唯一时间戳标识;position是列族名,此列族下有若干不定数量的列,每一列的列名是T出现的文档的文档ID号;
所述步骤(2)包括以下步骤:
A、从所述Hbase数据库倒排索引数据表的键部分抽取一条记录;B、比较该条记录中的行键与字典数据中的行键是否相等,如果相等,则进入步骤C,如果不等,则以该条记录为新的字典数据,并将该条记录本身作为压缩后的数据,然后进入步骤E;C、将该条记录与字典数据从最后一位向前对比,当二者不一致时结束比较;D、取该条记录中第七个域开始至步骤C的结束位置之间的数据为压缩后的数据;E、完成该条记录的压缩,然后从所述Hbase数据库倒排索引数据表的键部分抽取下一条记录,并进入步骤B;F、重复步骤B-E,直到完成所有记录的压缩。
2.一种如权利要求1所述的压缩方法压缩后的压缩文件键部分的解压方法,其特征在于:包括以下步骤:
(1)从所述压缩文件键部分中抽取一条压缩数据;
(2)判断该条压缩数据的长度,如果长度小于或等于13,则进入步骤(3),如果长度大于或等于25,则进入步骤(7),如果长度大于13且小于25,则表明压缩文件已损坏,立即停止解压操作,解压失败;(3)令字典数据的前六个域数据为u,令该条压缩数据为v,令字典数据的最后多个数据为w,令字典数据的长度为p,令u的长度为m,令v的长度为n,则w为字典数据最后的(p-m-n)个剩余长度的数据,以u后接v再后接w作为解压数据;
(4)以字典数据长度作为解压数据的长度;
(5)完成该条压缩数据的解压,然后从所述压缩文件中抽取下一条压缩数据,并进入步骤(2);
(6)重复步骤(2)-(9),直到完成所有压缩数据的解压;
(7)以该条压缩数据为新的字典数据;
(8)以该条压缩数据为解压数据,以该条压缩数据的长度为解压数据的长度;
(9)完成该条压缩数据的解压,然后从所述压缩文件键部分中抽取下一条压缩数据,并进入步骤(2);
(10)重复步骤(2)-(9),直到完成所有压缩数据的解压。

说明书全文

基于Hbase数据库的倒排索引混合压缩及解压方法

技术领域

[0001] 本发明涉及一种倒排索引压缩及解压方法,尤其涉及一种基于Hbase数据库的倒排索引混合压缩及解压方法。

背景技术

[0002] 对数据压缩可以加快数据从磁盘读入到内存的速率。高效的解压算法使得被压缩过的数据硬盘读取到内存后再解压所消耗的时间比相同的未压缩的数据块从磁盘读取到内存所消耗的时间少。当数据量巨大时,这种时间的缩短性更明显。所以,在更多的情况下,使用了压缩的倒排索引表的搜索引擎系统比没有使用的系统运行效率要高。通常而言,压缩比越大,解压缩效率相对较低。如果盲目追求压缩效率、解压效率和压缩比三者之一,均不能满足实际需求。因此需要从索引查询效率最大化出发,研究三者之间的最佳平衡点。
[0003] 不同于传统的行式关系性数据库,Hbase是一种稀疏的面向列的分布式数据库。在Hbase中所有数据都必须通过关键字关联起来,因此相对于关系型数据库或文件系统,Hbase数据库更适合于索引类数据结构的构建。
[0004] 使用基于统计的压缩方法(Shannon,1948;冯桂,2011),其核心原理是香农信息论。实际的操作过程是根据信源中出现频率大的符号用短一点的编码表示,频率小的符号用长一点的编码表示。由于大概率符号出现次数多,小概率符号出现次数少,经过编码后可以用尽可能少的符号无失真的表示原信源所包含信息。但使用基于统计的压缩方法使得码树过于庞大,而本身的压缩数据是以块为单位,因此压缩比效果不佳,并且解压过程中存在大量的位操和码树查询操作使得解压效率一般。
[0005] 使用基于整数变换的压缩方法(A,M.,2000;Williams,1999;V,A.,2005;王虎,2006),适用于一连串整数的压缩。它是通过整数的分解或者组合变换,用适当的位数来表示一个或一组整数,较小的数用较少的位数表示,较大的数用较多的位数来表示,通过牺牲固定位数可表示数的总的个数来换取较少的空间。但Hbase的数据是最短的8位字节型数据,以字节为单位压缩,提高压缩比难度大,并且不同的压缩方法由于操作粒度不同,使得解压效率也随着粒度的变化而变化。
[0006] 使用基于字典的压缩法(Ziv,1977;Storer,1992;曹登钧,2004),是将字典索引机制引入压缩方法中。在其他系统中通常需要额外的空间存放索引,查询时在索引中找到对应数据的位置信息,再到原文中找到需要查询的信息。但如果在字典压缩方法中需要额外的空间存放字典信息,会降低压缩比,甚至可能出现体积膨胀。
[0007] 上述的压缩方法从不同的度和方式提高了压缩比或者解压缩效率,但在倒排索引压缩中存在的共同问题是:这些压缩方法或是关注于压缩比,或是关注于解压缩效率,对更注重查询效率的倒排索引而言,文件的读取和数据的解压是统一的过程,应该把这两个因素统一考虑,而不是单独的偏向于某一方。本发明希望通过采用一种混合的压缩方法,针对文件中不同的逻辑部分采用不同的压缩方法,扬长避短完成压缩模型的构建。
[0008] Hbase数据库目前仅支持Gzip压缩和Lzo压缩,Gzip压缩满足较高的压缩比,但是解压效率低;Lzo具有很高的解压效率,但是压缩比较低。
[0009] 综上,目前还没有一种基于Hbase数据库的压缩及解压方法,能够兼顾较高解压率和较高压缩比、实现文件读取和数据解压的统一考量,在公开文献中未见相关报道,在实际应用中更未见应用先例。

发明内容

[0010] 本发明的目的就在于为了解决上述问题而提供一种基于Hbase数据库的倒排索引混合压缩及解压方法。
[0011] 为了达到上述目的,本发明采用了以下技术方案:
[0012] 本发明基于Hbase数据库的倒排索引混合压缩方法包括以下步骤:(1)对所述Hbase数据库进行倒排索引处理得到Hbase数据库倒排索引数据表,所述Hbase数据库倒排索引数据表的内容包括键和值;(2)对所述Hbase数据库倒排索引数据表中的键部分采用键既字典压缩法进行压缩;(3)对所述Hbase数据库倒排索引数据表中的值部分采用可变字节码压缩法进行压缩;(4)将压缩后的内容写入文件。
[0013] 本发明的思路是把Hbase数据库进行倒排索引处理得到内容包括键和值的Hbase数据库倒排索引数据表,尽量简化Hbase数据库的同时便于分类压缩;在压缩过程中采用键既字典压缩法和可变字节码压缩法分别对键部分和值部分进行压缩,这样在尽量保证较高解压率的前提下提高压缩比,实现高效压缩及解压目的。
[0014] 作为优选,所述步骤(1)中,所述Hbase数据库倒排索引数据表的逻辑视图图表如下所示:
[0015]
[0016] 上表中,Row key表示行键,在倒排索引表中表示某个词,对应于词级倒排表中的索引项T;Time stamp是由Hbase数据库在插入数据时自动生成的唯一时间戳标识;position是列族名,此列族下有若干不定数量的列,每
[0017] 一列的列名是T出现的文档的文档ID号;
[0018] 所述步骤(2)包括以下步骤:
[0019] A、从所述Hbase数据库倒排索引数据表的键部分抽取一条记录;B、比较该条记录中的行键与字典数据中的行键是否相等,如果相等,则进入步骤C,如果不等,则以该条记录为新的字典数据,并将该条记录本身作为压缩后的数据,然后进入步骤E;C、将该条记录与字典数据从最后一位向前对比,当二者不一致时结束比较;D、取该条记录中第七个域开始至步骤C的结束位置之间的数据为压缩后的数据;E、完成该条记录的压缩,然后从所述Hbase数据库倒排索引数据表的键部分抽取下一条记录,并进入步骤B;F、重复步骤B-E,直到完成所有记录的压缩。
[0020] 对应地,本发明所述压缩方法压缩后的压缩文件键部分的解压方法,包括以下步骤:
[0021] (1)从所述压缩文件键部分中抽取一条压缩数据;
[0022] (2)判断该条压缩数据的长度,如果长度小于或等于13,则进入步骤(3),如果长度大于或等于25,则进入步骤(7),如果长度大于13且小于25,则表明压缩文件已损坏,立即停止解压操作,解压失败;
[0023] (3)令字典数据的前六个域数据为u,令该条压缩数据为v,令字典数据的最后多个数据为w,令字典数据的长度为p,令u的长度为m,令v的长度为n,则w为字典数据最后的(p-m-n)个剩余长度的数据,以u后接v再后接w作为解压数据;
[0024] (4)以字典数据长度作为解压数据的长度;
[0025] (5)完成该条压缩数据的解压,然后从所述压缩文件中抽取下一条压缩数据,并进入步骤(2);
[0026] (6)重复步骤(2)-(9),直到完成所有压缩数据的解压;
[0027] (7)以该条压缩数据为新的字典数据;
[0028] (8)以该条压缩数据为解压数据,以该条压缩数据的长度为解压数据的长度;
[0029] (9)完成该条压缩数据的解压,然后从所述压缩文件键部分中抽取下一条压缩数据,并进入步骤(2);
[0030] (10)重复步骤(2)-(9),直到完成所有压缩数据的解压。
[0031] 本发明的有益效果在于:
[0032] 本发明根据Hbase的物理存储的规律性,针对数据块采用以键既字典算法为核心的混合压缩方法,对数据中不同的逻辑部分采用不同的压缩方法,并进行对应分类解压,在尽量保证较高解压率的前提下提高压缩比,实现文件读取和数据解压的统一考量,在整体上提高倒排索引的查询效率并节省存储空间;本发明还具有以下特点:(1)满足Hbase整个体系结构,支持Map/Reduce操作;(2)同时提高了空间利用率和解压效率;(3)针对键部分的键既字典压缩方法不仅适用于倒排索引的压缩,同样适用于其它类似大表的压缩。附图说明
[0033] 图1是本发明中实施例所述的HFile文件结构图;
[0034] 图2是与图1对应的HFile文件结构的中文结构图;
[0035] 图3是本发明中实施例所述的数据块记录结构图;
[0036] 图4是与图3对应的数据块记录结构的中文结构图;
[0037] 图5是本发明所述键既字典压缩法压缩的流程图
[0038] 图6是本发明所述键既字典压缩法解压的流程图;
[0039] 图7是本发明所述可变字节码压缩法压缩的流程图;
[0040] 图8是本发明所述可变字节码压缩法解压的流程图;
[0041] 图9是本发明实施例所述压缩文件写入的流程图。

具体实施方式

[0042] 下面结合附图及具体实施例对本发明作进一步具体描述:
[0043] 首先对Hbase数据库进行说明:Hbase是架构在Hadoop上的分布式列数据库,其文件系统沿用了Hadoop的HDFS(Hadoop File System)。Hbase的一张表中可以有多个列族(Column Family),在物理存储上一个列族对应一个文件夹,文件夹中可包含若干个Hfile文件。如图1和图2所示,Hfile文件是不定长文件,Data块中每一条记录保存一个键值(Key/Value)对,其余部分主要保存相应的定位信息和索引信息。Hbase会自动对内存中的数据以行键(row key)基于字典序的方式排序,在写文件时一次性将内存区中所有数据按块为单位写入文件,并且在文件尾部加上数据块索引信息。在读取文件时,并非一次性读取所有数据,而是依据索引信息读取相关数据块。
[0044] 通过对源码分析,发现在Hbase内部压缩机制中,只能对数据(Data)和原数据(Meta)块压缩,并且压缩过程发生在数据从内存写入磁盘时,压缩以一个块为单位,即每一个块的压缩都需要重新初始化压缩算法,上一个块的压缩并不对下一个块的压缩有影响;相应的,从磁盘中读取数据至内存中时,执行解压操作。
[0045] 如图3和图4所示,数据块中一条记录的结构,开始是两个固定长度的数值,分别表示键(Key)的长度和值(Value)的长度。键数据开始是固定长度的数值,表示行键长度,紧接着是行键,然后是固定长度的数值,表示列族(Family)名的长度,然后是列族名,接着是列名(Qualifier),然后是两个固定长度的数值,表示时间戳(Time Stamp)和键值类型(Key Type)。在数据类型方面,除了键的长度和值的长度是整型类似外,其余部分都是字节类型。键数据其原始类型主要是有整型和字符型,但是Hbase为了简化数据存取过程,会自动把数据转换为字节型,因此,键在软件制造的角度看来是一个字节型数组。相对于键,值在实际应用中取值类型更是千变万化,但是基于同样的原因,值也被简化为一个字节数组。
[0046] Hbase数据库的倒排索引采用词级倒排表,结构如下:
[0047]
[0048]
[0049]
[0050] 其中,T表示索引项,即某个词;doci(i=1,2,...,n)表示包含T的文档ID号;posi(i=1,2,...,f)表示T在该文档doci(i=1,2,...,n)中出现的位置。
[0051] 现目前,HBase对多列族支持不良,效率低下,系统缺陷多,官方建议列族最多应控制在2个或3个。由于每一个列族单独存贮在一个文件下,同一行数据的不同列族数据存放在不同文件中,保存了大量冗余信息,类似于Row key、时间戳这样的数据会随着列族的增多而重复保存多次,读取时I/O操作频繁效率低下。倒排文件读取具有实时性,应该尽量减少不必要的I/O操作,并且倒排索引的读取具有一次读取整行的特点,对一个特定的关键词,在后续的操作中需要的是所有的信息,包括了文件ID号、位置记录序列、词频(隐藏在位置记录中),因此不适宜多列族存储。把文件ID号做为列名,是为了充分利用Hfile的存储格式。在数据块中,列名域是专用来存储列名的空间,把文件ID号存储在其中,可节省存储空间,并且也符合人的逻辑思维习惯,并且Hbase提供相应的接口可获取对应的列名。
[0052] 鉴于Hbase和Hfile的特点,本发明设计了一种混合压缩方案:包括以下步骤:(1)对所述Hbase数据库进行倒排索引处理得到Hbase数据库倒排索引数据表,所述Hbase数据库倒排索引数据表的内容包括键和值;(2)对所述Hbase数据库倒排索引数据表中的键部分采用键既字典压缩法进行压缩;(3)对所述Hbase数据库倒排索引数据表中的值部分采用可变字节码压缩法进行压缩;(4)将压缩后的内容写入文件。
[0053] 首先,把词级倒排表的结构转化为HBase数据库下的索引表,其逻辑视图图表如下所示:
[0054]
[0055] 上表中,“Row key”表示行键,在倒排索引表中表示某个词,对应于词级倒排表中的索引项T;“Time stamp”由Hbase数据库在插入数据时自动生成的唯一时间戳标识;“position”列族名,此列族下有若干不定数量的列,每一列的列名是T出现的文档的文档ID号,如表中的:Doci、Docj、Dock,对应的是词级倒排表中的doci;position列族下每一列在某一特定行最多只有一个值,这个值是T在文档doci中出现的位置组成的位置记录序列。与上表对应的中文表格如下:
[0056]
[0057] Hbase是稀疏存储数据库,值为空的部分会直接忽略,对于表中特定行最多只有一列有效的结构,在实际存储时,存储的数目等于值不为空的数目。上述HBase数据库下的索引表的物理视图如下表所示:
[0058]
[0059] 与上表对应的中文表格如下:
[0060]
[0061] 然后,对所述Hbase数据库倒排索引数据表中的键部分采用键既字典压缩法进行压缩。如图5所示,键既字典压缩法的压缩过程包括以下步骤:
[0062] A、从所述Hbase数据库倒排索引数据表的键部分抽取一条记录key;B、比较该条记录key中的行键row key与字典数据dict中的行键row key是否相等,如果相等,则进入步骤C,如果不等,则以该条记录key为新的字典数据dict,并将该条记录key本身作为压缩后的数据,然后进入步骤E;C、将该条记录key与字典数据dict从最后一位向前对比,当二者不一致时结束比较;D、取该条记录key中第七个域开始至步骤C的结束位置之间的数据为压缩后的数据;E、完成该条记录key的压缩,然后从所述Hbase数据库倒排索引数据表的键部分抽取下一条记录key,并进入步骤B;F、重复步骤B-E,直到完成所有记录key的压缩。
[0063] 上述压缩方法中核心方法见图5中的虚线框内所示。
[0064] 如图6所示,对应地,键既字典压缩法的解压过程包括以下步骤:
[0065] (1)从所述压缩文件键部分中抽取一条压缩数据;
[0066] (2)判断该条压缩数据的长度,如果长度小于或等于13,则进入步骤(3),如果长度大于或等于25,则进入步骤(7),如果长度大于13且小于25,则表明压缩文件已损坏,立即停止解压操作,解压失败(说明:长度大于13且小于25的情况一般不会出现,所以在图4中未作表示);
[0067] (3)令字典数据的前六个域数据为u,令该条压缩数据为v,令字典数据的最后多个数据为w,令字典数据的长度为p,令u的长度为m,令v的长度为n,则w为字典数据最后的(p-m-n)个剩余长度的数据,以u后接v再后接w作为解压数据;
[0068] (4)以字典数据长度作为解压数据的长度;
[0069] (5)完成该条压缩数据的解压,然后从所述压缩文件中抽取下一条压缩数据,并进入步骤(2);
[0070] (6)重复步骤(2)-(9),直到完成所有压缩数据的解压;
[0071] (7)以该条压缩数据为新的字典数据;
[0072] (8)以该条压缩数据为解压数据,以该条压缩数据的长度为解压数据的长度;
[0073] (9)完成该条压缩数据的解压,然后从所述压缩文件键部分中抽取下一条压缩数据,并进入步骤(2);
[0074] (10)重复步骤(2)-(9),直到完成所有压缩数据的解压。
[0075] 上述解压方法中核心方法见图6中的虚线框内所示。
[0076] 下面对上述压缩和解压的核心方法的理论来源作出进一步说明:
[0077] 数据块中每条记录都是键在前值在后,所有键的结构是相同的。现假设(n,key)k表示一个键的长度和键本身序列,其中k表示键在文件中的行数。序列key=a1,a2,a3,...,an,且key由七个小的序列组成:关键字长度,rowlen=a1,a2;关键字,row=a3,...,a3+i;列族名长 度,famlen=aj;列族 名,fam=aj+1,...,aj+8;列 名,col=aj+9,...,aj+12;时间戳,time=aj+13,...,aj+20;类型标记,type=aj+21,其中j=i+4,i∈[0,255]。
[0078] 研究分析发现,(n,key)k具有以下三种规律:
[0079] 规律1:对于 和 其中famlenr≡famlenk,famr≡famk。
[0080] 规律2:对于 和 如果rowr=rowk,那么rowlenr≡rowlenk。
[0081] 推论1:数列长度n=j+21=i+25,所以n∈[25,280]。
[0082] 令(cn,ckey)表示压缩后键数列的长度和压缩后的键数列,其中ckey=c1,...,ccn,且ckey可分为3个数列:ccol=c1,...,cci,ctime=...,ccj,ctype=cck,其中ci∈[1,4],cj∈[0,8],ck∈[0,1]。
[0083] 推论2:压缩后的数列长度cn=ci+cj+ck,所以cn∈[1,13]。
[0084] 规律3:对于 和 如果rowr=rowk,不存在一个(n,key)l,l∈(r,k),使得rowl≠rowk。
[0085] 由于存在上述的三则规律,所以Hbase记录中的键在存储结构上相同、在内容上存在大量的冗余,极其适用于基于字典的压缩方法;而在值部分的存储是词在某一文章中出现的位置序列,这种逻辑特性适合于基于正数变换的压缩方法,因此本发明在Hbase环境中提出一种键既字典的混合索引压缩模型。
[0086] 如图7所示,对所述Hbase数据库倒排索引数据表中的值部分采用可变字节码压缩法进行压缩。在Key/Value对的Value部分结构简单,由若干个有序的四字节整型数组成。压缩过程如下:
[0087] 第一步:从字节数组中,提取出所有的整型数据,还原为位置序列
[0088] 第二步:将位置序列转换为其差值序列
[0089] 第三步:对差值序列中的每一个数进行VBC编码压缩,并记录下压缩后的字节个数。
[0090] 在现在的计算机系统及程序设计语言中,一个无符号整型数据通常使用32位来表示,但是对于较小的数来说完全使用不了这么多位,如数字1,其在内存中的二进制表示为00000000 00000000 00000000 0000001,有效的使用位只有1位,而浪费了31位。可变字节码,以一个字节为单位表示数,即表示一个数至少需8位,这样对于较小的数就能使用较少的位来存储。可变字节码的编码思想是把一个字节分为两个部分:最高一位是旗帜位,若0表示这是编码的最后一个字节;若为1,表示下一个字节也是当前编码的一部分。因此,整数x使用可变编码需要的位数是:
[0091]
[0092] 这样一来,0到127的数只需要1个字节就可以表示,128到16511需要2个字节表示,这一数据分布范围对于词在文档中的位置而言是绰绰有余的。取原序列的差值序列就是为了尽可能的让数据分布在0到127的范围内。虽然,可变字节码同其他基于位的整数编码相比压缩率相对较低,但是因为可变字节码是基于字节的,所以在解压缩方面的效率是其它整数编码效率所不能达到的。
[0093] VBC编码过程:
[0094] 第一步:初始化字节数组r[4]内容全为0,i为0,需编码整数为x;
[0095] 第二步:x取其最低位的八个比特位组成一个字节b,判断b的最高位是否为1,若为1,跳至第二步,否则,跳至第四步;
[0096] 第三步:另r[i]的最高位为1,低七位为b的高7位,i自增1,x右移7位,跳至第二步;
[0097] 第四步:令r[i]等于b。
[0098] 字节数组r中的前i个就是压缩后的结果。
[0099] 如图8所示,对应地,对所述Hbase数据库倒排索引数据表中的值部分采用可变字节码压缩法进行解压的过程如下:
[0100] 第一步:初始化整型数i为0,整型数x为0;
[0101] 第二步:从压缩文件中读取一个字节b;
[0102] 第三步:将b的低7位比特位保存至x的低i位至低(i+6)位比特位;
[0103] 第四步:i=i+7;
[0104] 第五步:判断b的最高位是否为1,若成立跳至第二步;若不成立,跳至第六步;
[0105] 第六步:x为解压后的数据。
[0106] 如图9所示,最后,将压缩后的内容写入文件,其方法包括以下步骤:
[0107] (1)使用程序设计语言标准函数打开文件;
[0108] (2)使用程序设计语言标准函数写入压缩后的键的长度;
[0109] (3)使用程序设计语言标准函数写入压缩后的值的长度;
[0110] (4)使用程序设计语言标准函数写入压缩后的键;
[0111] (5)使用程序设计语言标准函数写入压缩后的值;
[0112] (6)直至数据压缩完;
[0113] (7)使用程序设计语言标准函数关闭文件。
[0114] 下面以具体的实验对本发明方法的先进性进行验证:
[0115] 由于本文仅针对数据块部分的压缩,为了简化实验、增强实验结果的有效性,本文所有的实验都并非在Hbase环境下进行,而是把Hbase产生的数据处理后,作为输入数据在模拟的Hbase读写程序中执行,验证本文方案。
[0116] 本文使用的实验数据来源于互联网上的2539张网页,对这些网页净化、切词处理后,直接插入到单机环境下的Hbase数据库中,并且立即停止Hbase数据库服务,令其把内存中的数据写入磁盘。一共生成了3个Hfile文件,其大小分别为:14684627字节、19308570字节、57521867字节。然后对这3个文件进行预处理,分别从中提取出所有的数据块数据,保存在三个文件A、B、C中,文件大小分别为:14675030字节、19296005字节、
57485075字节。
[0117] 实验用计算机的基本信息:
[0118] 系统版本号:RedHat CentOS release 5.5;
[0119] CPU型号:Intel(R)Xeon(R)CPU E5345@2.33GHz(2颗);
[0120] 内存容量:4046280kB。
[0121] 本文的压缩方法命名为mix,使用ASCI C语言编写,gcc编译器编译为静态链接库,编译时开启O2级编译优化;对比组实验分别采用LZO-2.05库[5]和ZLIB-1.2.5库[6],其各自的默认编译优化级别分别为O2和O3。各个对比组实验均是一样的框架,唯一不同在于调用的压缩和解压缩库不同。在读写磁盘和解压缩数据都是以一个数据块为单位操作。
[0122] 压缩比的测试方法如下:用压缩方法分别对三个文件进行压缩,测出每个文件的压缩比Ci(1≤i≤3),最后取三次压缩的平均值 具体见下表所示:
[0123]
[0124] 通过上表可发现,本文的混合压缩方法的压缩比远远优于Lzo在倒排索引表上的压缩效果,并且已经非常接近Gzip的压缩比。由此可得出,本文所设计的混合压缩方法,在压缩比上已经取得了良好的压缩效果。
[0125] 压缩效率的测试方法如下:在集中的一段时间内,每种压缩方法对每个文件压缩十次,每次均记录下仅压缩所耗用的时间TCi(1≤i≤10);用文件的大小M除以十次压缩所耗用的平均时间 得到每一个文件的压缩效率最后,取三个文件压缩效率的平均值,得到各个压
缩方法的在倒排索引表上的压缩效率 具体见下表所示:
[0126]
[0127] 压缩时间是指单纯对文件压缩所耗用的时间,而执行时间是在压缩时间之上还加入了数据写入磁盘的时间。压缩时间和执行时间的测试方法基本相同,均是执行十次取平均值,压缩时间仅测量压缩部分所消耗时间 执行时间测量了压缩时间和磁盘写入时间具体见下表所示:
[0128]
[0129] 解压效率的测试方法同压缩效率的测试方法基本相同,不同在于点在于解压效率中测试的是解压时间。具体见下表所示:
[0130]
[0131] 解压时间是指单纯对文件解压所耗用的时间,而执行时间是在解压时间之上还加入了数据从磁盘读入内存的时间。解压时间和执行时间的测试方法基本相同,均是执行十次取平均值,解压时间仅测量解压部分所消耗时间,执行时间测量了解压时间和磁盘读入时间。具体见下表所示:
[0132]
[0133] 文件[A\B\C][M\L\G]分别是三种压缩方法:Mix、Lzo和Gzip对文件A、B、C压缩后所得到的文件,各个文件大小如表8所示:
[0134]
[0135] 实验结论:
[0136] 倒排索引主要运用在搜索引擎技术中,因此为了满足搜索引擎的技术特性,更加强调对倒排索引的即时访问性,反映在本文中主要是解压执行时间需要尽可能的短。
[0137] 设源数据大小为S(单位为MB),压缩比为C,解压效率为D(单位为MB/s),从磁盘读数据传输到内存的时间为T,整个解压过程所消耗的时间t,等于:
[0138]
[0139] Hbase读取文件并非一次读取一个文件,而是以块为单位,将包含相关RowKey的数据块读入内存。Hbase的压缩同样是以块为单位,所以无论是采用何种压缩算法,对于每一块中的数据分布是没有影响的。因此,访问Hbase中的数据,采用何种节压缩方法的源数据大小都是相等的。
[0140] 现将实验所测数据代入上式,得到3种方法的解压过程时间为:
[0141] tmix=1.23S+Tmix,
[0142] tlzo=1.39S+Tlzo,
[0143] tgzip=4.18S+Tgzip
[0144] 时间T与压缩后的数据大小有关,当源数据大小相同时,时间T与压缩比相关。在此种情况下,mix的压缩比大于lzo的压缩比,所以Tmix小于Tlzo。因此,可得出以下结论:
[0145] tmix
[0146] 由于mix和gzip的压缩比差别微小,由此而引起的时间T的差别较由解压率而引起的差别不明显,因此可认定:
[0147] tmix
[0148] 因此,mix比lzo和gzip更适合于倒排索引的压缩。
[0149] 以上结论适用于单机环境,若在分布式环境下,还需加入网络传输的时间,整个解压过程消耗的时间t为:
[0150]
[0151] 其中Tnet为网络传输所消耗的时间。Tnet也与压缩后文件的大小相关,在同源大小的情况下与压缩比相关。因此,网络传输时间的加入并不会对实验结论产生影响,只会增大mix方法和lzo方法之间的差距。
[0152] 综合结论:
[0153] 通过实验及其实验结果分析,本文提出的针对Hbase数据库下特定的倒排索引表的混合压缩方法具有很高的即时性,可以满足搜索引擎对于即时响应的要求。并且,本文设计的针对key值部分的键既字典压缩法也适用于Hbase下其他的大表设计。但是,由于Hbase数据库在源码中只给出了Lzo算法和Gzip算法的选项,因此为了在Hbase中能够使用本方法,必须对Hbase源码修改,同时需要给出本方法的Java调用接口。其次,在Hbase中除了可以对数据块压缩外,还可以对元数据块进行压缩。
相关专利内容
标题 发布/更新时间 阅读量
倒踩多段变档内变速器 2020-05-12 153
一种倒档同步装置 2020-05-12 701
混合动力双力倒档器 2020-05-12 704
倒档自锁控制装置 2020-05-12 498
倒档同步器组件 2020-05-11 552
手动变速器倒档机构 2020-05-13 251
防倒档的限位执行机构 2020-05-13 256
铣汽车倒档轴专用夹具 2020-05-13 19
倒档器 2020-05-11 284
倒档导块 2020-05-11 581
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈