一种sqlite的自由空间的删除记录挖掘方法和系统的制作方法

文档序号:6362555阅读:195来源:国知局
专利名称:一种sqlite的自由空间的删除记录挖掘方法和系统的制作方法
技术领域
本发明涉及数据库处理系统,尤其涉及sqlite的自由空间的删除记录挖掘方法和系统。
背景技术
传统的sqlite删除数据解析方法是根据记录数据的特征来识别记录关键数据的起始和终止标志,从而解析某些关键数据,但是这种方法的弊端是只能针对某一类数据库文件的某些关键数据,而无法提取全部数据,并且对于其他的数据库文件则需要重新提取数据特征并重新解析,无法保证通用性。目前市场上的sqlite数据库删除数据的通用解析产品具有很大的局限性,其 B+tree自由空间删除记录挖掘,由于对于记录特征提取不够精确,而且对于多数据表删除数据交叉的考虑不够充分,所以解析效果不尽如人意。测试发现对于B+tree自由空间删除记录挖掘,往往只能解析一小部分的删除记录,甚至无法解析任何一条记录,而且解析结果经常由于记录划分的不准确存在乱码现象,这样影响了删除记录解析的准确性和全面性。

发明内容
本发明的目的在于提供一种sqlite的自由空间的删除记录挖掘方法,可以通用、 全面地解决sqlite的自由空间上删除记录的挖掘。本发明是这样实现的,一种sqlite的自由空间的删除记录挖掘方法,所述方法包括下述步骤读取sqlite页的自由空间,从sqlite的多重通用特征中抽象出多元组用以描述自由空间的记录的关键点信息;通过页面交叉方法遍历上述关键点信息以挖掘删除记录。本发明的另一目的在于提供一种sqlite的自由空间的删除记录挖掘系统,所述系统包括关键点信息抽象单元,用于从sqlite的多重通用特征中抽象出多元组用以描述自由空间的记录的关键点信息;页面交叉遍历单元,用于通过页面交叉方法遍历上述关键点信息以挖掘删除记录。作为优选的,所述多重通用特征包括五元组,为当前页面的完整的记录数据块中的记录总长度的值、头部索引总长度的值、头部索引总长度所占用空间的大小,以及当前页面的空闲链表节点的前两个字节指向下一个空闲节点的指针的值、后两个字节表示该空闲节点的大小的值。作为优选的,根据所述五元组抽象出的所述多元组用以描述自由空间上记录的关键点信息,所述多元组包括三元组,为在当前页面的完整的记录数据块的或者当前页面的空闲链表节点的记录的所在的地址偏移、在当前页面的完整的记录数据块的或者当前页面的空闲链表节点的记录的所占用空间的大小,以及数据类型。作为优选的,所述页面交叉遍历单元,包括第一次遍历单元,用于根据节点的类型依次处理各个节点;第二次遍历单元,用于对于不满足重组条件的节点采用节点合并和拆分方式,再次尝试重组判断;第三次遍历单元,用于判断是否有不属于当前数据表的记录存在,如果有,采用交叉方法挖掘删除记录。本发明的实施例在研究sqlite格式和B+tree页面空间分配和释放的基础上,提出了基于多重通用特征的Sqlite的B+tree自由空间删除记录挖掘方法,并且利用多数据表删除数据交叉挖掘技术,充分挖掘其他数据表残留的删除记录,以提高自由空间删除记录挖掘的准确性和全面性。


图I为本发明的sqlite页面结构示意图;图2为本发明的sqlite页面的自由空间上WRN的sqlite记录结构图;图3为本发明的sqlite页面的自由空间上FRN的sqlite记录结构图;图4为本发明的sqlite页面的自由空间的删除记录挖掘流程图。
具体实施例方式( 一)sqlite的B+tree自由空间的简单介绍Sqlite数据库的页面组织是由B+tree来管理的,每个B+tree节点对应一个 sqlite页面,其中存放数据的叶子节点称为叶子页,而存放索引的内部节点称为内部页。每个页面的数据组织分别有页面头部(记为PH)的管理部分和页面尾部(记为PT)的数据部分组成,这样就形成了 PH和PT之间的自由空间(记为FSN)部分,如图I所示。sqlite页面转换(比如叶子页转换为内部页)或者申请已有的空闲页的时候,原有页面的内容不会清空,从而导致了自由空间的记录数据残留,与sqlite的空闲链表节点不同的是,残留的记录呈现多样化趋势当前数据表的完整的记录数据块(记为WRN);当前数据表的空闲链表节点(记为FRN);其他数据表的删除记录(记为0RN);其中,WRN是因为整表数据全部清空的时候,sqlite只会修改相应页面PH部分的前8个字节,而不会对所有记录执行逐条删除;FRN是由于当前数据表的记录单独删除而形成的;ORN是因为该页面在被申请进入当前数据表所对应的B+tree之前可能是从其他数据表对应的B+tree中释放出来的,因此ORN可能可以继续拆解为相应的FRN和WRN。( 二)基于多重通用特征的自由空间记录关键点信息分析如上述所描述,虽然自由空间上的记录复杂,但是,不管自由空间上的记录数据是属于哪张数据表,但是这些都可以归结为两大类WRN和FRN。自由空间上WRN的sqlite记录结构如图2所示。其中记录总长度(记为TL)和 ROWID是变长整数,占用的空间大小为1-9字节,头部索引总长度(记为HL)是N个索引 (记为Index)和HL占用的空间大小,而N个数据(记为Data)域与N个索引域一一对应, INDEXi记录了 DATAi占用的空间大小。不过,完整记录块可能会由于后续的空间分配而被截断,可能是从某记录的DATAi, i e [I, N]、INDEXi, i e [I, N]甚至是TL、ROffID或HL处被截断,但是头部完整的记录都能保证以下2个基本特征TL 至少满足 value (TL) < PSZ-offset (TL) _m,其中 value (TL)表示 TL 的值,PSZ 表示B+tree所管理的页面大小,offset (TL)表示TL所在的地址偏移,而m是一个表示TL 和ROWID的偏移数,根据当前记录的情况,其取值范围为m e [2,18];HL至少两个满足关系式size(HL) = η,其中size (HL)表示HL所占用空间的大小,η根据当前数据表的结构,其取值范围为n e [1,2];sn ( value (HL) ( sn+off,其中value (HL)表示HL的值,sn表示当前数据表的字段数,off根据当前数据表的结构,其取值范围为off e [O, sn]。自由空间上FRN,其记录的前4个字节被覆盖,其结构如图3所示。记录的前4个字节(记为FR)将被改写,其中前两个字节指向下一个空闲节点的指针(记为NFP),后两个字节表示该空闲节点的大小(记为FTL),但是由于可能内部空间经过多次的记录删除和插入,导致每个NFP指向的位置呈随机化趋势,FTL的大小也未必表示后续空闲空间的大小, 甚至NFP和FTL都被部分覆盖。但是,NFP和FTL至少都保持了 2个基本的特征value (NFP) > offset (NFP)value (FTL) e (O, PSZ-offset (NFP)]其中value、offset和PSZ表示的意思与上述描述相同。综上所述,提出了以下的五元组,用以判断自由空间上记录的关键点信息。〈〈value (TL), value (HL), size (HL) >,〈value (NFP), value (FTL) >>并且抽象出三元组〈offset (REC), size (REC) ,type〉,用以描述自由空间上记录的关键点信息,其中REC表示WRN或者FRN上的记录。但是,该五元组及其基本特征仅是满足记录关键点信息的必要非充分条件,所以不仅需要识别真伪关键点信息,还要识别哪些记录不属于当前数据表,对于非当前数据表的记录,利用页面交叉方法来挖掘删除记录。(三)结构约束机制这里引入了一个可扩展的结构约束集合,不仅能用于识别真伪关键点信息,而且还能够识别当前记录是否属于当前数据表,并且利用对应的数据表的结构约束来识别和挖掘删除记录。下面将举例说明I) sqlite页大小带来的约束所有的类型对应的INDEXi,由于sqlite页的大小限制,INDEXi占用的空间大小也将受到相应的限制。因为在sqlite文件初始页中有定义了 sqlite页的大小,该值用2个字节来表示,所以除非记录使用溢出页,否则size (INDEXi)的最大值将为2 (溢出页的情况不在此文档中考虑)。2) sqlite类型值约束所有的类型对应的INDEXi,其原始数值不能是当前未定义的值,如IOUl等。3)数据类型约束比如INTEGER类型约束、TEXT类型约束、BLOB类型约束等。4)其他扩展约束比如字符编码约束等,此外后续可以继续扩展相关的约束。(四)算法实现步骤
I.根据sqlite数据表结构和文件格式,从B+tree树上读取一个页面page, page 可能是内部页,也可能是叶子页;2.从page中读取自由空间FSN a)读取page的PH部分的前8字节的管理信息,其中第一个单元块地址作为FSN 的结束位置FE ;b) FSN的开始标志FB初始化为PH结束位置,且初始化zero标志为O ;c)若FB彡FE,则FB赋值为PH结束位置,转步骤f);d)若 value (FB) > offset (FB),则 FB = FB+2,转步骤 c);e)否则,若value (FB) = 0,则FB = FB+2,zero标志赋值为1,转步骤f);否则,转步骤g);f)若FB彡FE,没有FSN存在,返回失败;g)否则,根据zero标志确定FB是为当前位置还是PH结束位置,并且根据FB和 FE 确定 FSN 的二元组信息〈offset (FSN),size (FSN) >,转步骤 3 ;3.根据上述的五元组信息,识别所有关键点信息,写入FLIST链表a)学习当前数据表的结构,确定常量PSZ、m、n、sn和off;b) P初始化为FSN的开始位置P = FB ;c)若P彡FE,则跳出,转步骤4 ;d)计算〈〈value (TL),value (HL),size (HL) >,〈value (NFP),value (FTL) >>,判断是否满足该五元组对应的五个基本特征,若满足前3个基本特征,则type标识为WRN类型, 计算〈offset (REC),size (REC),type〉并写入到 FLIST, P = P+size (P),其中 size (P)表不 P对应的变长整数的大小,转步骤c);e)否则,若满足后2个基本特征,则type标识为FRN类型,,计算〈offset (REC), size (REC),type〉并写入到 FLIST, P = P+1,转步骤 c);f)否则,若type没有标识,P = P+1,转步骤c);4.第一次遍历FLIST,这里涉及多种记录类型,需要增加对记录类型的判断和处理。首先设置初始节点P为FLIST的第一个节点,a)若P为空,则转步骤5 ;b)读取P的type值,若type为WRN类型,则根据图2的sqlite记录结构和上述的结构约束,判断是否满足WRN类型的REC的重组条件,包括完整记录和碎片记录等,若满足重组条件,打上相应的标志,转步骤f);c)否则假定REC存在五元组的碎片,调整P的三元组信息,消除可能存在的关键点信息碎片,然后判断REC重组条件,若满足,该节点打上相应标记,转步骤g);若不满足,转步骤f);d)否则,若type为FRN类型,根据我们之前曾提出的“一种Sqlite删除记录结构重组方法”中国专利申请号201110266852. I来判断是否满足FRN类型的REC的重组条件, 若满足重组条件,打上相应的标志,转步骤g);e)否则假定REC存在五元组的碎片,调整P的三元组信息,消除可能存在的关键点信息碎片,然后判断REC重组条件,若满足,该节点打上相应标记,转步骤g);若不满足,转步骤f);
f)还原P的二元组信息;g)P向后取一个关键点信息节点,转步骤a);5.第二次遍历FLIST,主要是逆序遍历FLIST,利用节点合并和拆分技术,识别出真伪关键点信息,算法抽象为节点类型无关,如申请人申请的专利201110443733. 9 ;描述如下(其中P初始化为FLIST的最后一个节点)a)若P为空,转步骤6;b)若P有重组标记,转步骤e);c)否则,若前一个节点PRE有重组标记>若P的原始状态是碎片,则进行碎片重组,转步骤e);>否则,若P为合并节点,将合并节点拆分,P取倒数第二个被合并节点,转步骤 a);d)否则,节点向前合并,P取合并后的节点,用步骤4的b)至f)的方法来处理各种标记,转步骤e);e)P向前取一个节点,转步骤a);6.第三次遍历FLIST,首先设置初始节点P为FLIST的最后一个节点,a)若P为空,则跳出算法;b)若P有相应的重组或合并标记,P向前取一个节点,转步骤a);c)否则,检查P的大小,今若P的type为WRN类型,I)若P有相应的标记,则清空cnt,转步骤a);2)否则,计算节点P的大小是否满足下面的关系式
权利要求
1.一种sqlite的自由空间的删除记录挖掘方法,其特征在于,所述方法包括下述步骤读取sqlite页的自由空间,从sqlite的多重通用特征中抽象出多元组用以描述自由空间的记录的关键点信息;通过页面交叉方法遍历上述关键点信息以挖掘删除记录。
2.根据权利要求I所述的sqlite的自由空间的删除记录挖掘方法,其特征在于,所述多重通用特征包括五元组,为当前页面的完整的记录数据块中的记录总长度的值、头部索引总长度的值、头部索引总长度所占用空间的大小,以及当前页面的空闲链表节点的前两个字节指向下一个空闲节点的指针的值、后两个字节表示该空闲节点的大小的值。
3.根据权利要求2所述的sqlite的自由空间的删除记录挖掘方法,其特征在于,根据所述五元组抽象出的所述多元组用以描述自由空间上记录的关键点信息,所述多元组包括三元组,为在当前页面的完整的记录数据块的或者当前页面的空闲链表节点的记录的所在的地址偏移、在当前页面的完整的记录数据块的或者当前页面的空闲链表节点的记录的所占用空间的大小,以及数据类型。
4.根据权利要求I所述的sqlite的自由空间的删除记录挖掘方法,其特征在于,所述读取sqlite页的自由空间,从sqlite的多重通用特征中抽象出多元组用以描述自由空间的记录的关键点信息,引入可扩展的结构约束集合。
5.根据权利要求5所述的sqlite的自由空间的删除记录挖掘方法,其特征在于,所述可扩展的结构约束集合为以下的任一种或其组合sqlite页大小带来的约束、sqlite类型值约束以及数据类型约束。
6.根据权利要求I所述的sqlite的自由空间的删除记录挖掘方法,其特征在于, 通过页面交叉方法遍历上述关键点信息以挖掘删除记录的具体步骤为第一次遍历所述关键点信息所在的链表,根据节点的类型依次处理各个节点;第二次遍历所述关键点信息所在的链表,对于不满足重组条件的节点采用节点合并和拆分方式,再次尝试重组判断;第三次遍历所述关键点信息所在的链表,判断是否有不属于当前数据表的记录存在, 如果有,采用交叉方法挖掘删除记录。
7.—种sqlite的自由空间的删除记录挖掘系统,其特征在于,所述系统包括关键点信息抽象单元,用于从sqlite的多重通用特征中抽象出多元组用以描述自由空间的记录的关键点信息;页面交叉遍历单元,用于通过页面交叉方法遍历上述关键点信息以挖掘删除记录。
8.根据权利要求7所述的sqlite的自由空间的删除记录挖掘系统,其特征在于,所述多重通用特征包括五元组,为当前页面的完整的记录数据块中的记录总长度的值、头部索引总长度的值、头部索引总长度所占用空间的大小,以及当前页面的空闲链表节点的前两个字节指向下一个空闲节点的指针的值、后两个字节表示该空闲节点的大小的值。
9.根据权利要求8所述的sqlite的自由空间的删除记录挖掘系统,其特征在于,根据所述五元组抽象出的所述多元组用以描述自由空间上记录的关键点信息,所述多元组包括三元组,为在当前页面的完整的记录数据块的或者当前页面的空闲链表节点的记录的所在的地址偏移、在当前页面的完整的记录数据块的或者当前页面的空闲链表节点的记录的所占用空间的大小,以及数据类型。
10.根据权利要求7所述的sqlite的自由空间的删除记录挖掘系统,其特征在于,所述页面交叉遍历单元,包括第一次遍历单元,用于根据节点的类型依次处理各个节点;第二次遍历单元,用于对于不满足重组条件的节点采用节点合并和拆分方式,再次尝试重组判断;第三次遍历单元,用于判断是否有不属于当前数据表的记录存在,如果有,采用交叉方法挖掘删除记录。
全文摘要
本发明提供一种sqlite的自由空间的删除记录挖掘方法,所述方法包括下述步骤读取sqlite页的自由空间,从sqlite的多重通用特征中抽象出多元组用以描述自由空间的记录的关键点信息;通过页面交叉方法遍历上述关键点信息以挖掘删除记录。本方法能充分挖掘其他数据表残留的删除记录,以提高自由空间删除记录挖掘的准确性和全面性。
文档编号G06F17/30GK102591979SQ20121000168
公开日2012年7月18日 申请日期2012年1月5日 优先权日2012年1月5日
发明者吴世雄, 方均滩, 陈明辉 申请人:厦门市美亚柏科信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1