一种ROWID对应关系数据的压缩和解压方法技术

技术编号:22444406 阅读:20 留言:0更新日期:2019-11-02 04:22
本发明专利技术提出一种ROWID对应关系数据的压缩和解压方法,属于计算机ORACLE数据库同步领域,充分利用映射块内数据的特点,设置标记字节FLG,逐个判断SLOT是否记录、DBA是否重复、OBJD是否重复、ROWID是否连续,实现压缩,通过判断FLG的比特是否置位,来实现解压;算法简单,执行速度快,对于连续性高的ROWID映射数据有很高的压缩率。

A method of compressing and decompressing ROWID correspondence data

【技术实现步骤摘要】
一种ROWID对应关系数据的压缩和解压方法
本专利技术属于计算机ORACLE数据库同步领域,具体涉及一种ROWID对应关系数据的压缩和解压方法。
技术介绍
ORACLE数据库是一种使用非常广泛的数据库,ORACLE数据库中存储的每一行记录都有一个唯一的标识叫做ROWID,用ROWID可以查询到这条记录。ROWID分为三部分,OBJD、DBA和SLOT,共10个字节。OBJD占4字节,是ORACLE数据库给每个表、表的分区或者子分区分配的唯一编号;DBA是数据块的编号,占4字节,ORACLE将记录存储在不同的数据块上;一个数据块内可以存储多条记录,同一数据块内的所有记录的ROWID,它们的OBJD和DBA是相同的,记录在块内的编号称为SLOT,占2字节。为方便描述,以下将源库和目标库的记录的ROWID分别称为源ROWID和目标ROWID。在做ORACLE数据库同步时,需要将源库的记录同目标库的记录一一对应起来,才能将源库的记录变化正确地更新到目标库。其中的一种方式是采用ROWID映射,即将源ROWID和目标ROWID的对应关系存储下来,在同步针对记录的更新和删除动作时首先根据源记录的ROWID查询目标ROWID,从而对应到目标记录。在存储ROWID对应关系时,通常是用源库的OBJD,DBA确定具体的存储块,然后每个存储块内存储源SLOT和目标ROWID,每一条记录需要10+2共12个字节,如果一个块内有1000条记录,数据量将达到12000字节。为描述方便,以下将每个源库数据块的ROWID映射数据称为映射块。映射块需要占用一定的空间,但它有大量相同或者相近的数据,目标SLOT很多时候是连续的,目标OBJD通常是相同值,目标DBA也很容易重复,因此在存储上有很大的压缩空间,鉴于它的查询会很频繁,压缩和解压的速度要快。现有的压缩算法比如zip、minilzo,它们的速度不够,压缩的效果也不理想。
技术实现思路
本专利技术的目的在于提出一种ROWID对应关系数据的映射块的压缩和解压方法,能够达到一定的压缩率,并且能快速地压缩解压。为实现上述目的,本专利技术采用的技术方案如下:一种ROWID对应关系数据的压缩方法,包括以下步骤:对于ROWID对应关系数据,从源SLOT0开始,判断当前源SLOT有没有记录,如果没有,则统计后面连续没有记录的SLOT的个数,输出标记字节FLG;如果有,则生成新的标记字节FLG,输出目标SLOT,并根据SLOT是否小于256更新FLG;判断当前目标DBA是否与前面的DBA有重复,如果没有,则输出新的DBA并记录;如果有,则输出DBA的索引,并根据DBA的索引号是否小于256更新FLG;判断当前目标OBJD是否与前面的OBJD有重复,如果没有,则输出新的OBJD并记录;如果有,则输出OBJD的索引,并根据OBJD的索引号是否小于256更新FLG;判断后续是否有目标ROWID和当前连续,如果有,则输出连续个数,并根据连续个数是否小于256更新FLG;执行上述步骤直到没有ROWID记录时,完成压缩。进一步地,每一段压缩数据均以一个FLG开始,该FLG含有如下8个比特位:比特7:源SLOT无记录标记位,置此位,则另外7位代表连续多少个SLOT没有记录;比特6:目标SLOT占1字节还是2字节;比特5:新目标DBA标记,置此位,代表着遇到了新DBA,压缩数据包含4字节的DBA;反之,代表遇到了使用过的DBA,压缩数据包含DBA的索引;比特4:DBA索引占1字节还是2字节;比特3:新目标OBJD标记,置此位,代表着遇到了新OBJD,压缩数据包含4字节的OBJD;反之,代表遇到了使用过的OBJD,压缩数据包含OBJD的索引;比特2:OBJD索引占1字节还是2字节;比特1:表示目标ROWID是连续的,压缩数据包含连续ROWID的个数;比特0:连续的ROWID个数占1字节还是2字节。进一步地,统计后面连续没有记录的SLOT的个数不超过127个。进一步地,所述根据SLOT是否小于256更新FLG,是指如果SLOT小于256,输出1字节,否则输出2字节,更新FLG比特6。进一步地,所述根据DBA的索引号是否小于256更新FLG,是指如果DBA的索引号小于256,输出1字节,否则输出2字节,更新FLG比特5和4。进一步地,所述根据OBJD的索引号是否小于256更新FLG,是指如果OBJD的索引号小于256,则输出1字节,否则输出2字节,更新FLG比特3和2。进一步地,判断后续是否有目标ROWID和当前连续的标准是OBJD和DBA是否与当前目标ROWID相同,且目标SLOT连续递增。进一步地,所述根据连续个数是否小于256更新FLG,是指如果连续个数小于256,则输出1字节,否则输出2字节,更新FLG比特1和0。进一步地,如果还有ROWID记录,则进一步判断当前源SLOT有没有记录,并执行后续操作。一种ROWID对应关系数据的解压方法,包括以下步骤:对于ROWID对应关系数据的数据包,取当前标记字节FLG,如果比特7置位,则取出其另7个比特的数值N,并将连续N个源SLOT标记为无记录,然后重复该步骤;如果比特7未置位,则按比特6的指示取出1或2字节的目标SLOT;如果FLG的比特5置位,则取出4字节的目标DBA并记录,否则按照比特4的指示取出1或2字节的DBA索引号,然后用该索引在DBA记录中取出目标DBA;如果FLG的比特3置位,则取出4字节的目标OBJD并记录,否则按照比特4的指示取出1或2字节的OBJD索引号,然后用该索引在OBJD记录中取出目标OBJD;如果FLG的比特1置位,则按照比特0指示取出1或2字节作为连续ROWID的数量,并生成相应数量的连续ROWID;执行上述步骤直到没有未解压数据,完成解压。本专利技术的压缩和解压方法充分利用了映射块内数据的特点,算法简单,执行速度快,对于连续性高的ROWID映射数据有很高的压缩率。附图说明图1是ROWID的结构图。图2是一个块内的ROWID示例。图3是一种ROWID对应关系数据的压缩方法流程图。图4是一种ROWID对应关系数据的解压方法流程图。图5是映射块的数据示例。图6是图5映射块的压缩结果。具体实施方式为使本专利技术的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本专利技术做进一步说明。本实施例公开一种ROWID对应关系数据的压缩方法,如图3所示流程图,具体包括以下步骤:1)定义标记字节,以下简写为FLG,每一段压缩数据均以一个FLG开始,FLG的8个比特位有不同的用途:比特7:源SLOT无记录标记位,置此位,则另外7位代表连续多少个SLOT没有记录。比特6:目标SLOT占1字节还是2字节。比特5:新目标DBA标记,置此位,代表着遇到了新DBA,压缩数据包含4字节的DBA;反之,代表遇到了使用过的DBA,压缩数据包含DBA的索引。比特4:DBA索引占1字节还是2字节。比特3:新目标OBJD标记,置此位,代表着遇到了新OBJD,压缩数据包含4字节的OBJD;反之,代表遇到了使用过的OBJD,压缩数据包含OBJD的索引。比特2:OBJD索引占1字节还是2字节。比特1:表示目标ROWID是连续的,压缩数据包含连续ROWID的个数。比特0:连续的ROWI本文档来自技高网
...

【技术保护点】
1.一种ROWID对应关系数据的压缩方法,包括以下步骤:对于ROWID对应关系数据,从源SLOT0开始,判断当前源SLOT有没有记录,如果没有,则统计后面连续没有记录的SLOT的个数,输出标记字节FLG;如果有,则生成新的标记字节FLG,输出目标SLOT,并根据SLOT是否小于256更新FLG;判断当前目标DBA是否与前面的DBA有重复,如果没有,则输出新的DBA并记录;如果有,则输出DBA的索引,并根据DBA的索引号是否小于256更新FLG;判断当前目标OBJD是否与前面的OBJD有重复,如果没有,则输出新的OBJD并记录;如果有,则输出OBJD的索引,并根据OBJD的索引号是否小于256更新FLG;判断后续是否有目标ROWID和当前连续,如果有,则输出连续个数,并根据连续个数是否小于256更新FLG;执行上述步骤直到没有ROWID记录时,完成压缩。

【技术特征摘要】
1.一种ROWID对应关系数据的压缩方法,包括以下步骤:对于ROWID对应关系数据,从源SLOT0开始,判断当前源SLOT有没有记录,如果没有,则统计后面连续没有记录的SLOT的个数,输出标记字节FLG;如果有,则生成新的标记字节FLG,输出目标SLOT,并根据SLOT是否小于256更新FLG;判断当前目标DBA是否与前面的DBA有重复,如果没有,则输出新的DBA并记录;如果有,则输出DBA的索引,并根据DBA的索引号是否小于256更新FLG;判断当前目标OBJD是否与前面的OBJD有重复,如果没有,则输出新的OBJD并记录;如果有,则输出OBJD的索引,并根据OBJD的索引号是否小于256更新FLG;判断后续是否有目标ROWID和当前连续,如果有,则输出连续个数,并根据连续个数是否小于256更新FLG;执行上述步骤直到没有ROWID记录时,完成压缩。2.如权利要求1所述的压缩方法,其特征在于,统计后面连续没有记录的SLOT的个数不超过127个。3.如权利要求1所述的压缩方法,其特征在于,判断后续是否有目标ROWID和当前连续的标准是OBJD和DBA是否与当前目标ROWID相同,且目标SLOT连续递增。4.如权利要求1所述的压缩方法,其特征在于,如果还有ROWID记录,则进一步判断当前源SLOT有没有记录,并执行后续操作。5.如权利要求1所述的压缩方法,其特征在于,每一段压缩数据均以一个FLG开始,该FLG含有如下8个比特位:比特7:源SLOT无记录标记位,置此位,则另外7位代表连续多少个SLOT没有记录;比特6:目标SLOT占1字节还是2字节;比特5:新目标DBA标记,置此位,代表着遇到了新DBA,压缩数据包含4字节的DBA;反之,代表遇到了使用过的DBA,压缩数据包含DBA的索引;比特4:DBA索引占1字节还是2字节;比特3:新目标OBJD标记,置此位,代表着遇到了新OBJD,压缩数据包含4字节的OBJD;...

【专利技术属性】
技术研发人员:高志会李天伟林广生
申请(专利权)人:上海英方软件股份有限公司
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1