专利名称::基于聚类分块的只读兴趣点数据库压缩存储方法
技术领域:
:本发明涉及一种面向导航终端的基于聚类分块的只读兴趣点数据库压縮存储方法,属于智能交通领域的导航系统范畴。技术背景在导航电子地图中,包含着大量的兴趣点(POI,PointOfInterest)信息,例如公共设施、风景区、娱乐场所等等,以帮助驾驶者轻松找到目的地,并在行进过程中给予直观、精确的提示。用户对导航产品的满意程度,有相当部分取决于导航电子地图中POI信息的丰富程度。在车载导航发展最早、技术最先进的日本.导航电子地图中POI为1200万条,目前我国电子地图中POI达到500万条,预测将来至少要达到2000万。POI信息一般包括以下几个属性类别、所属省市区、名称、地址、电话、经度、纬度,前两者一般用来创建索引,其它属性均需作为数据保存到数据库中。早期的数据库压縮大多数是以属性列为压縮粒度,采用一些经典的无损压縮算法如字典压縮、哈夫曼编码等通用算法进行压縮。这种压縮方法的缺点是不考虑数据库中数据的结构性,将数据库以数据流的形式进行压縮,压縮率不高。直到近几年,对数据库压縮方法的研究才转向数据库专用压縮方法的研究,目前已出现的成果有(1)面向块的增量压缩方法(WeeK.NG,ChinyaV.Ravishankar.Relationaldatabasecompressionusingaugmentedvectorquantization[C].InProc.OfICDE,pages540-549,1995)。该方法将数据库数据分块,每个块中序号居中的元组为代表元组,块内其他元组可以用代表元组加增量的方式表示。其压縮方法是对块内的元组用矢量量化的方法进行量化,压縮时用由矢量量化产生的编码和每个元组与其代表元组的增量共同组成的有序对来压縮元组,进而实现数据库的压縮。面向块的增量压缩方法的优点是能够有效压缩数据库并能够执行压縮数据库的査询操作,缺点是对于字符串也需要进行量化,因此只适用于元组包含小范围枚举型字符串和数值的情况。(2)保序压縮技术(GennadyAntoshenkov,DavidB.Lomet,JamesMurray.Orderpreservingstringcompression[J].InProc.OfICDE,pages655-663,1996)。该方法最初是采用压缩字典编码对数据库的多个字符串属性值进行压缩。它将字符串拆分为多个小字符串,利用变长的字典编码法对这些小字符串压缩,其拆分的方法依赖于编码字典的编码顺序,而与编码字典具有相同顺序的序号编码表则保证了保序的实现。由于保序压縮简单易于实现,随后许多通用编码方式如哈夫曼编码、算术编码都被应用到保序压縮技术中。其优点在于易于实现,缺点是压縮率不高,且只适用于多个字符串的情况。(3)基于语义的压縮技术(ShivnathBabu,MinosN.Garofaiakis,RajeevRastogi.Spartan:Amodel-basedsemanticcompressionsystemformassivedatatables([J].InSIGMOD,2001))。这是一种利用属性的语义和数据挖掘模型来实现压縮的方法。该方法利用可预见的数据关系和为个别属性指定的容错方式来为整个数据表的所有行构建分类衰退树模型,压縮时选择属性集的一个特定子集,该子集中没有己经压縮过的值,而衰退树则采用一定的学习方法和组合优化算法来对这些值进行预计,并产生预计结果,即压缩值。通过不断更新衰退树的属性集子集来实现整个数据库的压縮。其可预见的数据关系是基于属性语义的关系,而数据挖掘则应用在衰退树的预见运算中。基于语义的压縮技术是有损的数据库压縮方法,由于利用了属性的语义,在衰退树进行压縮前需要首先分析属性字段的语义信息,因而该压縮方法复杂而不易实现,且压縮率也不高。(4)海量关系拆分压縮技术(骆吉洲,李建中,一种有效的关系数据库压縮方法,软件学报,16(2),2005:205-214)。这种方法是针对目前不断出现的海量关系数据库提出的一种专用压縮方法。该方法从海量关系数据库中分离出小值域属性组,将海量关系拆分,然后对小值域属性组所在的新关系进行压缩。压缩时需要先估计拆分压縮的压縮比,如果压縮比合理则进行拆分压縮,否则放弃拆分压縮。海量关系拆分压缩技术对海量数据库的压縮及二次压缩有较好的效果,但是由于小值域属性组的识别问题的NP完全性,使得拆分压縮复杂,代价过大,并且只适用于小值域的属性。而对于面向导航的POI数据库,一般具有以下几个特点同一省市区的经讳度和电话在一个有限的范围内离散分布。同一类别下不同POI的名称虽大多具有唯一性,但某些常用词重复比例较高,比如公司类别的POI名称里一般都含有公司这个词。同一省市区下不同POI的地址中含有重复前缀字符串的比例较高。由于POI信息具有较长时间的稳定性,所以一般专用于检索,不存在删除和修改的情况。并且POI—般需要按省市区和类别检索,以及按名称检索,对于中文名称还需要分词建立索引。考虑到以上因素,目前还没有一种现存的方法适合于面向导航的POI数据库的压缩。
发明内容本发明所要解决的技术问题克服现有技术的不足,提供一种基于聚类分块的只读兴趣点数据库压縮存储方法,该方法有效的提高了空间利用率,并且使得解压缩的范围仅限于块内,额外开销较小,特别适合于POI的检索。本发明的技术解决方案基于聚类分块的只读兴趣点数据库压縮存储方法,由以下步骤实现(1)将兴趣点POI记录按照省市区和类别进行聚类;(2)将同一类中的POI记录按照经度坐标一纬度坐标一电话进行升序排列;(3)将多条POI记录组合成一个记录块;(4)在所述的记录块内对POI记录中各个域采用不同的压縮方法进行压縮;(5)以所述的记录块内最后一条POI记录的ID作为块ID,将压縮后的记录块作为整体进行存储。所述的步骤(3)将多条记录组合成一个记录块的方法为-以一个磁盘块大小为限值,将同一类中所有的兴趣点记录按照所占的存储空间大小进行分块,使得每一块容量不大于该限值。所述步骤(4)在记录块内对POI记录中不同的域采用不同的压縮方法包括对于数值型的属性一经纬度坐标和电话号码使用差值压縮,即除第一条记录外,后续记录的经度坐标,讳度坐标和电话号码存储的是与上一条记录的差值,所述的差值长度不固定,需通过标识位来识别,所述的电话号码可能没有,需通过标识位来识别。差值压縮具体实现方法如下(1)首先将浮点数转换成整数;(2)除块内第一条记录外,块内后续记录的经度坐标,纬度坐标和电话号码存储与上一条记录的差值,这个差值长度不固定,根据差值大小所在的范围可能为l-4个字节,需要通过两个标识位来标识;(3)电话号码可能没有,需要通过一个bit来标识。所述步骤(4)在记录块内对POI记录中不同的域采用不同的压縮方法包括对于字符串类型的域,即名称和地址采用如下方法(1)釆用词典编码压縮方法对名称进行压缩;(2)采用前缀压缩方法对地址进行压縮。所述的词典编码压縮的前提是已经对名称做了分词预处理,所述的分词预处理的方法是首先对块内所有记录的名称包含的词进行统计,当某个词的出现频率超过两次时,即将该词提取出来存放到块首对应词长的词典区。所述的词典编码压縮方法是将名称中被提取过的词用该词的词长及其在所对应词长词典区中的序号来编码表示,同时为了和没有被提取的字区分开,每个名称都有一个位图索引来标识。所述的前缀压缩方法是将地址中的最大前缀字符串用其之前出现过的记录序号和串长度来编码表示,同时通过标识位来识别是否有前缀压縮。本发明与现有技术相比的优点在于(1)本发明并不局限于特定类型的数据,对于数值型和字符串型的数据都可以进行压縮。例如,
背景技术:
中提到的保序压缩技术只适用于多个字符串的情况;面向块的增量压縮方法则需要将字符串数值化,前提是出现的不同字符串个数很少,重复率很高;海量关系拆分压缩技术也是只适用于小值域的情况。而对于POI数据库而言,不仅有字符串类型,同时还有数值类型,并且字符串类型的名称专有性很强,具有相同名称的记录出现概率很低,采用
背景技术:
介绍的方法显然不合适。因此,我们对数值型和字符串型分别处理,采用不同的压縮方法,并且将名称中重复出现概率较大的词,以及地址中重复出现的前缀字符串提取出来,进行编码以达到压縮的目的。(2)充分利用了P01数据库的特性。例如,
背景技术:
中提到的面向块的增量压縮方法中,分块只是简单的将按占用空间大小作为依据。而对于POI数据库而言,先将记录按照省市区和类别进行聚类,然后再根据空间进行分块,可以使得块内冗余度更高,从而达到更好的压縮效果。同时,由于POI—般需要按省市区和类别检索,以及按名称检索,对于中文名称还需要分词建立索引。因此,按照省市区和类别进行聚类还可以满足按省市区和类别检索的方式,而将检索时用到的分词词典同时应用到压缩中作为压缩词典,也使得压缩方法变得简单。(3)在有效的提高了空间利用率的同时也适合于POI的检索。因为在以B树方式存储的数据库中,树的叶结点通常是一个磁盘块的大小,按照上述方法压縮后,在同一个结点内就可以存储更多的记录,提高了存储空间的利用率,同时也减少检索时的i/o次数。对于按类别检索,在解压满足条件的块后,将块内所有的记录作为结果集返回即可;对于按名称检索,将满足条件的记录所在的块从磁盘调至内存中,解压縮的范围也仅限于块内,同时解压后的结果可以存放在cache中,以方便后续的检索。图1为本发明的整体流程图;图2为分块流程图;图3为块内存储结构图;图4为块内压縮流程图。具体实施方式本发明所说的基于聚类分块的只读兴趣点数据库压缩存储方法流程如图1所示,1、将兴趣点记录按照省市区和类别进行聚类;2、将同一类中的记录按照经度坐标-纬度坐标-电话进行升序排列,并以此顺序将POI记录赋予唯一的ID;3、对记录进行预处理(1)因为坐标的小数点后六位的精度为0.1米,足以满足一般交通导航的要求,所以可以将经度坐标和讳度坐标乘以106,以四个字节的无符号整数来表示。(2)对名称进行分词处理。不但可以用于压縮,还可以建立词索引,实现对POI的名称检索。由于名称一般都比较短,因此可以取词长为2-4个字。4、在同一类内将多条记录组合成一个记录块。如图2所示,顺序遍历同一类中的所有记录,判断所占空间大小之和是否大于限值,如果小于则继续读入下一条记录;否则将遍历过的记录组成一个记录块,然后以下一条记录作为新块的第一条记录继续遍历分块。5、如图3所示,在对记录块进行压縮存储之前,首先预分配一个磁盘块大小的缓冲区,分为块头区和数据区。块头区包括词表区和记录头区,数据区即存储实际的记录。其中,每个记录头占用5个字节,结构如表l所示,由于记录不定长,所以需要指定每个属性压縮后的长度以及记录在块内的偏移地址,块最大限定为64KB,所以偏移量可以用两个字节表示。名称和地址压縮后长度上限为256个字(2个字节)。表1记录头结构B8B7B6B5B4B3B2Bl记录在块内偏移量(低字节)记录在块内偏移量(高字节)<table>tableseeoriginaldocumentpage8</column></row><table>其中,电话号码存在/地址压缩标识为0—不存在/未压縮;l一存在/压缩。长度编码如表2所示-表2长度编码<table>tableseeoriginaldocumentpage8</column></row><table>012字节103字节114字节记录的结构如表3所示:表3记录结构名称压缩标识位名称地址经度纬度电话图6、在块内对记录中不同的属性采用不同的压縮方法进行压縮。如图4所示,块内压缩的流程如下(1)统计块内所有名称中词的出现频率,将出现次数大于2的词提取到对应词长的词表区,并对该词进行编码,如表4所示表4名称词编码第一个字节第二个字节词表中的序号(低字节)词长编码(2bit)词表中的序号(高字节)10词长编码00—2字词;01—3字词;10~4字词(2)遍历块内记录,创建名称压缩标识位图,其作用是识别压缩后的名称中哪些字是压縮编码,哪些是普通的Unicode编码。其长度由记录头里的名称长度决定,例如名称长度是5<=8,则位图长度为l个字节;名称长度为13<-16,则位图长度为2个字节,以此类推,每一位对应一个字(2个字节),O代表没有压缩,l代表有压縮;同时找出在前256条记录中出现最大地址前缀的记录序号,对地址前缀进行编码,如表5所示;并且对坐标和电话进行差值压縮编码,将压缩后的记录存储到缓冲区中。(3)以块内最后一条记录的ID作为块ID,将缓冲区中的块头和数据区作为整体进行存储。表5地址前缀编码第一个字节第二个字节最大前缀所在记录的序号(前256个的偏移)最大前缀长度2权利要求1.基于聚类分块的只读兴趣点数据库压缩存储方法,其特征在于由以下步骤实现(1)将兴趣点POI记录按照省市区和类别进行聚类;(2)将同一类中的POI记录按照经度坐标-纬度坐标-电话进行升序排列;(3)将多条POI记录组合成一个记录块;(4)在所述的记录块内对POI记录中各个域采用不同的压缩方法进行压缩;(5)以所述的记录块内最后一条POI记录的ID作为块ID,将压缩后的记录块作为整体进行存储。2、根据权利要求1所述的基于聚类分块的只读兴趣点数据库压縮存储方法,其特征在于所述的步骤(3)将多条记录组合成一个记录块的方法为以一个磁盘块大小为限值,将同一类中所有的兴趣点记录按照所占的存储空间大小进行分块,使得每一块容量不大于该限值。3、根据权利要求1所述的基于聚类分块的只读兴趣点数据库压縮存储方法,其特征在于所述步骤(4)在记录块内对POI记录中不同的域采用不同的压縮方法包括对于数值型的属性一经纬度坐标和电话号码使用差值压縮,即除第一条记录外,后续记录的经度坐标,纬度坐标和电话号码存储的是与上一条记录的差值。4、根据权利要求3所述的基于聚类分块的只读兴趣点数据库压缩存储方法,其特征在于所述的差值长度不固定,需通过标识位来识别。5、根据权利要求3所述的基于聚类分块的只读兴趣点数据库压縮存储方法,其特征在于所述的电话号码可能没有,需通过标识位来识别。6、根据权利要求1所述的基于聚类分块的只读兴趣点数据库压缩存储方法,其特征在于所述步骤(4)在记录块内对POI记录中不同的域采用不同的压缩方法包括对于字符串类型的域,即名称和地址采用如下方法(1)采用词典编码压縮方法对名称进行压縮;(2)采用前缀压缩方法对地址进行压縮。7、根据权利要求6所述的基于聚类分块的只读兴趣点数据库压缩存储方法,其特征在于所述的词典编码压縮的前提是已经对名称做了分词预处理。8、根据权利要求7所述的基于聚类分块的只读兴趣点数据库压缩存储方法,其特征在于所述的分词预处理的方法是首先对块内所有记录的名称包含的词进行统计,当某个词的出现频率超过两次时,即将该词提取出来存放到块首对应词长的词典区。9、根据权利要求6所述的基于聚类分块的只读兴趣点数据库压縮存储方法,其特征在于:所述的词典编码压縮方法是将名称中被提取过的词用该词的词长及其在所对应词长词典区中的序号来编码表示,同时为了和没有被提取的字区分开,每个名称都有一个位图索引来标识。10、根据权利要求6所述的基于聚类分块的只读兴趣点数据库压縮存储方法,其特征在于所述的前缀压縮方法是将地址中的最大前缀字符串用其之前出现过的记录序号和串长度来编码表示,同时通过标识位来识别是否有前缀压縮。全文摘要本发明公开了一种基于聚类分块的只读兴趣点数据库压缩存储方法,包括步骤(1)将兴趣点记录按照省市区和类别进行聚类;(2)将同一类中的记录按照经度坐标-纬度坐标-电话进行升序排列;(3)通过一定的策略将多条记录组合成一个记录块;(4)在块内对记录中不同的属性采用不同的压缩技术进行压缩。(5)以块内最后一条记录的ID作为块ID,将记录块作为整体进行存储。本发明针对只读兴趣点数据库的特点,引入了多种压缩技术,提高了空间利用率,额外开销较小,特别适合于POI的检索。文档编号G01C21/26GK101271478SQ20081010603公开日2008年9月24日申请日期2008年5月7日优先权日2008年5月7日发明者鹏刘,康建初,诸彤宇,坚黄申请人:北京航空航天大学