数据库压缩及解压缩方法

文档序号:6436133阅读:302来源:国知局
专利名称:数据库压缩及解压缩方法
技术领域
本发明涉及数据库系统及信息压缩领域,尤指一种元组级数据库压缩及解压缩方法。
背景技术
在大型数据库应用系统中,经常需要处理数百Gb、甚至上Tb级的数据,这些数据通常被保存在大规模磁盘阵列中。一方面,大规模磁盘阵列的使用对系统硬件成本的贡献不可小视;另一方面,大量的磁盘读写操作也使得输入/输出成为系统的主要性能瓶颈。若采用数据库压缩方法,对存储的数据进行压缩,可显著减少数据的磁盘占用,从而大大降低系统的硬件成本,同时还能提高系统的整体性能。
现有的数据库压缩产品主要有Winzip,Winrar等,这些产品都是基于通用的压缩方法,例如LZ(其全称为Lempel-Ziv,是用两位作者Abraham Lempel和Jacob Ziv的名字命名的)算法和LZW(其全称为Lempel-Ziv-Welch,是用三位作者Abraham Lempel、Jacob Ziv和Terry A.Welch的名字命名的)算法,这些压缩算法的基本假设是数据中存在有大量重复出现的子串,如数据“ABCDABC”中的子串“ABC”,通过将这些重复出现的子串用更短的编码表示来达到压缩的目的;同时,压缩算法必须在压缩后的数据中存放编码表以便于解压,例如在上面这个例子中,编码表中必须记录子串“ABC”和压缩所用编码之间的对应关系。
将上述压缩方法用于数据库压缩,主要有两方面的问题一是上述压缩方法适用于压缩子串重复率较高的大型文本数据,而数据库中主要存放的结构数据不具有这一特征,因此无法获得很好的压缩效果;二是编码表需要占据大量的空间,以Winzip为例,即使压缩一个仅包含一个字节的数据,压缩后的数据长度也将达到200多个字节,而数据库中绝大多数元组的长度都不会超过这一长度,因此为了达到合理的压缩效率,其压缩解压过程必须以更大的单位进行,通常是单个页面或整个文件,而这意味着用户为了存取某个元组,必须将该元组所在的整个页面或整个文件进行压缩或解压,这大大增加了处理开销。

发明内容
本发明要解决的问题是提供一种压缩效率高且处理开销小的数据库中的数据压缩的数据库压缩方法。
为了解决上述问题,本发明采用以下技术方案一种数据库压缩方法,包括步骤a.建立数据库元组的每一种属性类型的压缩方法集,并对每一种压缩方法进行编号;b.根据数据库元组的属性类型及值从该属性类型的压缩方法集中选择压缩方法,并将该压缩方法的编号存放在压缩后元组的头部;c.利用压缩后元组头部存放的压缩方法的编号所对应的压缩方法对数据库元组的属性值进行压缩,并将压缩后的属性值存放在压缩后元组中。
进一步地,在步骤a中,所述属性类型为整数型,建立的压缩方法集为若所述属性值小于256,则将其压缩为一个字节,解压时将其扩展为四个字节,并将高位前三个字节设为0,并将其编号设为2;若所述属性值大于等于256且小于65536,则将其压缩为两个字节,解压时将其扩展为四个字节,并将高位前两个字节设为0,并将其编号设为3;若所述属性值大于等于65536且小于224,则将其压缩为三个字节,解压时将其扩展为四个字节,并将高位前一个字节设为0,并将其编号设为4。
进一步地,在步骤a中,所述属性类型为字符串,建立的压缩方法集为若所述字符串由中文字符构成,则其所有字符的高位均为1,将每个字符压缩为七个位,解压时将每七个位扩展为1个字节,并将其高位设为1,并将其编号设为2;若所述字符串由ASCII字符构成,则其所有字符的高位均为0,将每个字符压缩为七个位,解压时将每七个位扩展为1个字节,并将其高位设为0,并将其编号设为3;若所述字符串由英文字母、空格或者标点符号“,.‘;?!”构成,则将每个字符压缩为六个位,并将其编号设为4,解压时对于每六个位若位于0~25之间,则将其扩展为“A”~“Z”,若位于26~51之间,则将其扩展为“a”~“z”,若等于52,则将其扩展为空格,若位于53~59之间,则分别将其扩展为“,”、“.”、“’”、“”、“;”、“?”和“!”;若所述字符串由数字“0”~“9”、字符“-/._,”构成,则将每个字符压缩为四个位,并将其编号为5,解压时对于每四个位若位于0~9之间,则将其扩展为“0”~“9”,若位于10~15之问,则分别将其扩展为“-”、“/”、“.”、“_”、“,”和“”。
进一步地,在步骤a中,编号0表示对应的属性值为空值;编号1表示对应的属性值为不可压缩。
相应地,本发明要解决的另一个问题是提供一种解压缩效率高且处理开销小的用于解压缩数据库中的数据的数据库解压缩方法。
一种数据库解压缩方法,包括步骤选取数据库元组头部中的压缩方法编号;根据所述压缩方法编号所对应的压缩方法的解压函数对数据库元组的属性值进行解压缩;将解压缩后的属性值存放到解压后元组中。
与现有技术相比,本发明数据库压缩及解压缩方法的有益效果由于是根据数据库元组的属性的类型,为每一个属性确定其最适宜的压缩方法,并将该压缩方法的编号存放在压缩后元组的头部,而不是对整个数据库都采用一种压缩方法,这样可使得压缩效率提高,同样在解压缩的时候,根据待解压缩元组头部的编号就可知其对应的压缩方法,以对其进行解压缩,因而,解压缩的效率也很高。
另外,由于压缩解压过程是以元组为单位,因此用户为了存取某个元组,只需要压缩或解压当前这个元组,而不必象通用压缩方法那样需要压缩或解压该元组所在的页面或文件,这样便大大降低了处理开销。


图1是本发明数据库压缩方法的流程图;图2是本发明数据库解压缩方法的流程图。
具体实施例方式
如图1所示,本发明数据库压缩方法包括步骤10)建立数据库元组的每一种属性类型的压缩方法集,并对每一种压缩方法进行编号;步骤11)根据数据库元组的属性类型及值从该属性类型的压缩方法集中选择压缩方法,并将该压缩方法的编号存放在压缩后元组的头部;步骤12)利用压缩后元组头部存放的压缩方法的编号所对应的压缩方法对数据库元组的属性值进行压缩,并将压缩后的属性值存放在压缩后元组中。
下面以某省计划生育委员会育龄妇女信息数据库为例来详述本发明数据库压缩方法的技术方案。
由于数据库是由多张表构成的,每张表中又存放有多条元组(或称记录),每条元组包含多个属性(或称字段)。属性具有不同的类型,例如整数型、字符型、日期型等。对于同一表中所有元组所包含的属性数目是相同的,且所有元组所对应的同一个属性(或称为表中的一列)的类型也是相同的。
该数据库中存放了该省所有育龄妇女的有关信息,数据量大约为200Gb。在该数据库中存放的属性类型有两类,分别是整数型和字符串。
首先为每一种属性类型建立与其对应的压缩方法集,并对每种压缩方法进行编号。
每种压缩方法中包含压缩函数(用于压缩)和对应的解压函数(用于解压缩)。将压缩方法编号,其中编号0和1是保留的,不管属性是何种类型,编号0表示对应的属性值为空值,编号1表示对应的属性值为不可压缩。
本例中,当所述属性类型为整数型时,建立的压缩方法集为
压缩方法1若所述属性值小于256,则将其压缩为一个字节,并将其编号设为2,解压时将其扩展为四个字节,并将高位三个字节设为0;压缩方法2若所述属性值大于等于256且小于65536,则将其压缩为两个字节,并将其编号设为3,解压时将其扩展为四个字节,并将高位两个字节设为0;压缩方法3若所述属性值大于等于65536且小于224,则将其压缩为三个字节,并将其编号设为4,解压时将其扩展为四个字节,并将高位一个字节设为0。
当所述属性的类型为字符串时,建立的压缩方法集为压缩方法1若所述字符串由中文字符构成,常见于中文信息,则其所有字符的高位均为1,将每个字符压缩为七个位,解压时将每七个位扩展为1个字节,并将其高位设为1,并将其编号设为2;压缩方法2若所述字符串由ASCII字符构成,常见于一般文本信息,则其所有字符的高位均为0,将每个字符压缩为七个位,解压时将每七个位扩展为1个字节,并将其高位设为0,并将其编号设为3;压缩方法3若所述字符串由英文字母、空格或者七个常见的标点符号“,.‘;?!”构成,常见于英文信息,则将每个字符压缩为六个位,并将其编号设为4,解压时对于每六个位1)如果位于0~25之间,则将其扩展为“A”~“Z”,2)如果位于26~51之间,则将其扩展为“a”~“z”,3)如果等于52,则将其扩展为空格,4)如果位于53~59之间,则分别将其扩展为“,”、“.”、“’”、“”、“;”、“?”和“!”;压缩方法4若所述字符串由数字“0”~“9”、字符“-/._,”构成,常见于电话号码、邮政编码、身份证号码等,则将每个字符压缩为四个位,解压时对于每四个位1)如果位于0~9之间,则将其扩展为“0”~“9”,2)如果位于10~15之间,则分别将其扩展为“-”、“/”、“.”、“_”、“,”和“”,并将其编号为5。
下面以该数据库中的个人信息表为例,个人信息表的元组包含属性为姓名、身份证号、联系电话。例如一个元组(张三、110102740101046、66160000),由于字符串“张三”全部由中文字符构成,因此选择的压缩方法为1,编号为2;由于字符串“110102740101046”和“66160000”均由数字构成,因此选择的压缩方法为4,编号为5。并将所选择的压缩方法的编号存放在压缩后元组的头部为<2550>(压缩后的数据统一以十六进制串表示,串中的每个字符表示一个十六进制数字,占半个字节)。
下一步是利用压缩后元组头部存放的压缩方法的编号所对应的压缩方法对数据库元组的属性值进行压缩,并将压缩后的属性值存放在压缩后元组中。对于本例的元组压缩后元组为<25507FE411010274010104666160000>,共18个字节(压缩前为27个字节)。
下面对三种数据库压缩方法的方案的压缩效果和处理开销进行比较
方案A不压缩;方案B采用通用压缩工具WinZip进行页面级压缩,页面大小为8Kb;方案C采用本发明数据库压缩方法。
在压缩效果方面,以整个该省计划生育委员会育龄妇女信息数据库为考察对象,并比较其压缩率(越小越好)。其中方案A由于不压缩,因此压缩率为100%,方案B的压缩率为79.4%,而方案C的压缩率为52.3%。
在处理开销方面,以该省计划生育委员会育龄妇女信息数据库中最大的一张表(包含有四千多万条元组)中的所有元组为考察对象,并比较其访问时间(越小越好),其中方案A耗时125秒,方案B耗时748秒,方案C耗时215秒。
综上所述本发明数据库压缩方法的压缩效率高而且处理开销小。
相应地,如图2所示,本发明数据库解压缩方法包括步骤20)提取数据库元组头部中的压缩方法编号;步骤21)根据所述压缩方法编号所对应的压缩方法的解压函数对数据库元组的属性值进行解压缩;步骤22)将解压缩后的属性值存放到解压后元组中。
还以上述该省计划生育委员会育龄妇女信息数据库为例,将上述采用本发明数据库压缩方法压缩后的元组解压缩,一个解压缩前元组为<25507FE411010274010104666160000>。
首先,将该数据库元组头部中的压缩方法编号提取出来,为<2550>,又因为对于同一个表中的所有元组相对应的属性的类型是相同的,故所有的属性类型都存放在表的头部而不必再存放在各个元组中,因而,在本例中还需从该表的头部提取出属性的类型,根据属性类型和该属性的压缩方法编号来确定其压缩方法为压缩方法编号2,其属性类型为整数型,故其对应的压缩方法为1;压缩方法编号5,属性类型为字符串,故其对应的压缩方法为4;压缩方法编号5,属性类型为字符串,故对应的压缩方法为4;对数据库元组的属性解压缩后存放在解压后元组中为(张三、110102740101046、66160000)。
对于上述元组,使用本发明数据库压缩方法,压缩率为66.7%,由于元组长度过小,因此无法使用通用压缩方法进行压缩;同时解压时只需要解压该元组的所有属性,因此处理开销也远比通用压缩方法小。
以上所述仅是本发明数据库压缩及解压缩方法的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明数据库压缩及解压缩方法原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明数据库压缩及解压缩方法的保护范围。
权利要求
1.一种数据库压缩方法,其特征在于,包括以下步骤a.建立数据库元组的每一种属性类型的压缩方法集,并对每一种压缩方法进行编号;b.根据数据库元组的属性类型及值从该属性类型的压缩方法集中选择压缩方法,并将该压缩方法的编号存放在压缩后元组的头部;c.利用压缩后元组头部存放的压缩方法的编号所对应的压缩方法对数据库元组的属性值进行压缩,并将压缩后的属性值存放在压缩后元组中。
2.如权利要求1所述的数据库压缩方法,其特征在于,在所述步骤a中,所述属性类型为整数型,建立的压缩方法集为若所述属性值小于256,则将其压缩为一个字节,解压时将其扩展为四个字节,并将高位前三个字节设为0,并将其编号设为2;若所述属性值大于等于256且小于65536,则将其压缩为两个字节,解压时将其扩展为四个字节,并将高位前两个字节设为0,并将其编号设为3;若所述属性值大于等于65536且小于224,则将其压缩为三个字节,解压时将其扩展为四个字节,并将高位前一个字节设为0,并将其编号设为4。
3.如权利要求1所述的数据库压缩方法,其特征在于,在所述步骤a中,所述属性类型为字符串,建立的压缩方法集为若所述字符串由中文字符构成,则其所有字符的高位均为1,将每个字符压缩为七个位,解压时将每七个位扩展为1个字节,并将其高位设为1,并将其编号设为2;若所述字符串由ASCII字符构成,则其所有字符的高位均为0,将每个字符压缩为七个位,解压时将每七个位扩展为1个字节,并将其高位设为0,并将其编号设为3;若所述字符串由英文字母、空格或者标点符号“,.‘;?!”构成,则将每个字符压缩为六个位,并将其编号设为4,解压时对于每六个位若位于0~25之间,则将其扩展为“A”~“Z”,若位于26~51之间,则将其扩展为“a”~“z”,若等于52,则将其扩展为空格,若位于53~59之间,则分别将其扩展为“,”、“.”、“’”、“”、“;”、“?”和“!”;若所述字符串由数字“0”~“9”、字符“-/._,”构成,则将每个字符压缩为四个位,并将其编号设为5,解压时对于每四个位若位于0~9之间,则将其扩展为“0”~“9”,若位于10~15之间,则分别将其扩展为“-”、“/”、“.”、“_”、“,”和“”。
4.如权利要求2或者3所述的数据库压缩方法,其特征在于,在所述步骤a中,编号0表示对应的属性值为空值;编号1表示对应的属性值为不可压缩。
5.一种数据库解压缩方法,其特征在于,包括以下步骤选取数据库元组头部中的压缩方法编号;根据所述压缩方法编号所对应的压缩方法的解压函数对数据库元组的属性值进行解压缩;将解压缩后的属性值存放到解压后元组中。
全文摘要
本发明公开一种数据库压缩方法,包括建立数据库元组的每一种属性类型的压缩方法集,对压缩方法编号;根据数据库元组的属性类型及值从该属性类型的压缩方法集中选择压缩方法,将压缩方法的编号存放在压缩后元组头部;利用压缩后元组头部存放的压缩方法编号所对应的压缩方法对数据库元组的属性值进行压缩,并将压缩后的属性值存放在压缩后元组中。相应地,本发明还公开了一种数据库解压缩方法,包括选取数据库元组头部中的压缩方法编号;根据所述压缩方法编号对应的压缩方法的解压函数对数据库元组的属性值解压缩;将解压缩后的属性值存放到解压后元组中。由于能够以元组为单位对数据库中数据压缩和解压缩,能够使压缩及解压缩效率高且处理开销小。
文档编号G06F17/30GK1770150SQ20041008878
公开日2006年5月10日 申请日期2004年11月3日 优先权日2004年11月3日
发明者陈刚, 冯柯, 何清法, 陈池 申请人:北京神舟航天软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1