一种Sqlite删除记录结构重组方法技术

技术编号:7025609 阅读:997 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供的一种Sqlite删除记录结构重组方法,包括:步骤一:设置滑动窗口初始偏移值offset为5;步骤二:学习待重组的记录所属数据表结构并依此界定滑动窗口;步骤三:计算所述滑动窗口的值和所述待重组的记录中整个数据域的大小,步骤四:判断步骤三计算的两个值是否相等,若是,则根据所述滑动窗口中最后一个小窗口的位置和所述待重组的记录的结构重组已删除记录,结束流程,否则判断所述offset取值是否已达其预定上限,若是,则尝试碎片重组并结束流程;否则,令offset=offset+1,并返回执行步骤三。本发明专利技术提供的Sqlite删除记录结构重组方法的重组结果准确性高、实用性强、可以适用于所有Sqlite数据库。

【技术实现步骤摘要】

本专利技术涉及计算机领域,尤其涉及。
技术介绍
Sqlite数据库是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的, 而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,能够支持Windows/ Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。因此,Sqlite数据库在计算机领域中得到了广泛的应用。在计算机领域中,有时候需要对已经删除的数据进行重组恢复,当前国内外对于 Sqlite数据库删除数据的通用解析的研究比较少,目前市场上的通用解析产品具有很大的局限性,以下为使说明更加清楚,结合附图简要介绍Sqlite删除记录前后的结构。图1所示为未删除的Sqlite记录结构示意图。由头部到尾部,该记录依次包括 记录总长度11、R0WID12、头部索引总长度13、N个索引域14和N个数据域15。其中,记录总长度11和R0WID12是变长整数,占用的空间大小为1-9字节,头部索引总长度13是N个索引14和头部索引总长度13占用的空间总大小。N个数据域15与N个索引域14 一一对应,S卩第i个(i = 1,2,. . .,N)索引域14中的索引INDEXi记录了第i个数据域中的数据 DATAi占用的空间大小。图2所示为删除后的Sqlite记录结构示意图。删除记录后,该已删除记录称为空闲节点,未删除前记录的前4个字节将被改写,如图2所示,删除后的Sqlite记录的前两个字节被改写为指向下一个空闲节点的指针21,第3-4个字节则用于表示该空闲节点的大小 22 (下文中记为FTL),从第5个字节开始,Sqlite记录的内容和被删除前记录中第5个字节之后的内容不变。显然,删除的记录结构之所以能够被重组,是因为记录删除后,原纪录中只有前4个字节覆盖,而第4个字节后面的内容没有改写或清空。从上述说明可知记录的删除可能造成原Sqlite记录中的索引1被覆盖或者部分被覆盖,因此,现有的Sqlite删除记录结构重组方法只能解析格式完整的删除记录,而当头部索引被覆盖或者存在伪索引时,该方法无法正常重组已删除记录,这样影响了删除记录重组的准确性和全面性。此外,目前没有相关的公开技术文档或专利提到能够解决这一问题,因此需要一种具有高准确性和全面性的Sqlite删除记录结构重组方法。
技术实现思路
本专利技术的目的在于提供,用以解决现有的删除记录结构重组方法只能解析格式完整的删除记录,而不能正常重组头部索引被覆盖或存在为索引情况下已删除记录的问题。本专利技术提供了一种全新的删除记录的结构重组方法, 该方法准确性高、实用性强、可以适用于所有Sqlite数据库。为了实现上述目的,本专利技术提供,该方法包括以下步骤步骤一设置滑动窗口初始偏移值offset为5 ;步骤二 学习待重组的记录所属数据表结构并依此界定滑动窗口 ;步骤三计算所述滑动窗口的值Value (window)和所述待重组的记录中整个数据域的大小 Length(DATA);步骤四判断所述Value (window)和Length (DATA)的值是否相等,若是,则执行步骤A,否则执行步骤B;步骤A 根据所述滑动窗口中最后一个小窗口的位置和所述待重组的记录的结构重组已删除记录,结束流程。步骤B:判断所述offset取值是否已达其预定上限,若是,则尝试碎片重组并结束流程;否则,令offset = offset+1,并返回执行步骤三;其中,所述滑动窗口包括至少两个小窗口,并按照与所述待重组的记录中字节排序相同的方向排列所述至少两个小窗口。所述步骤二包括读取所述待重组的记录中数据N的值以及变长整数值,将所述滑动窗口的小窗口数设置为所述N,并指定所述滑动窗口的每个小窗口刚好可以容纳一个变长整数,设定所述offset的取值上限。所述滑动窗口的值Value (window)为该滑动窗口中的所有小窗口对应的数据域占用的空间大小之和。所述待重组的记录中整个数据域的大小Length(DATA)满足关系式Length(DATA) = FTL-Length(window)-4其中,FTL为所述待重组的记录中第3至4个字节表示的数值,Length (window)为所述滑动窗口的整体大小值。所述令offset = offset+1包括使整个滑动窗口沿第一个小窗口指向最后一个小窗口的方向移动一个小窗口位置。较佳地,在上述Sqlite删除记录结构重组方法中,预先设定结构约束的过滤条件;在所述步骤A之前还包括判断所述滑动窗口中所有小窗口 Wi是否满足所述结构约束的过滤条件,若是则执行步骤A,否则执行步骤B。步骤B中所述尝试碎片重组并结束流程, 包括步骤Bl 结合结构约束尝试头部碎片重组;步骤B2 判断头部碎片重组是否成功,若是,则结束流程,否则,结合结构约束尝试尾部碎片重组,尝试完后结束流程。所述结构约束的过滤条件包括=Sqlite页大小带来的约束、Sqlite类型值约束、 数据类型约束和字符编码约束中的一项或多项。本专利技术提供的Sqlite删除记录结构重组方法创造性的引入变长滑动窗口机制和子滑动窗口机制用于删除记录重组,无需人工分析介入,能够自动判断是记录是否为碎片, 准确定位索引和内容,并且准确地重组删除记录。对于添加了结构约束的方法,在滑动窗口中引入可扩展的约束集,不仅能重组相对完整的删除记录,也能重组头部碎片的记录和尾部碎片的记录。本专利技术实施例提供的Sqlite删除记录结构重组方法对删除记录结构重组的准确性很高,实现简单,环境适应性强,并且该方法不局限于某一个数据库,而是对所有数据库的删除记录结构重组都适用,具有很强的通用性。由于Sqlite的使用呈广泛化趋势,该方法的重要性不言而喻,预计该方法将对数据库信息安全技术产生一定影响,也为其它数据库类型的删除记录重组甚至数据恢复提供崭新思路。附图说明图1为未删除的Sqlite记录结构示意图;图2为删除后的Sqlite记录结构示意图;图3为本专利技术实施例提供的一种基于数据分析的变长滑动窗口结构示意图;图4为本专利技术实施例提供的一种基于图3所示滑动窗口的Sqlite删除记录结构重组方法流程图;图5为本专利技术实施例提供的一种基于变长滑动窗口和结构约束的Sqlite删除记录结构重组方法流程图。具体实施例方式为解决现有技术中存在的问题,本专利技术实施例提供,并且针对头部索引被覆盖或者存在伪索引的情况,引入了 Sqlite数据表的结构约束,以提高Sqlite删除记录重组的准确性。以下先简要介绍基于Sqlite记录结构的变长滑动窗口机制。滑动窗口是指在数据流上设定的一个区间,该区间只包括数据流最近的部分数据,随着新数据的到来,窗口向前移动,用新的数据替换旧的数据。无论是传统的基于实际和元组的定长滑动窗口机制,还是现有的基于系统资源的变长滑动窗口机制,都是应用于数据流的流量控制和分析控制上,很难应用于数据流的数据分析上,特别是根据数据的分布情况而实时调整滑动窗口的大小。因此,本专利技术实施例提出了一种基于数据分析的变长滑动窗口,用于分析并重组Sqlite删除记录。以下结合附图具体说明本专利技术实施例。图3为本专利技术实施例提供的一种基于数据分本文档来自技高网
...

【技术保护点】
1.一种Sqlite删除记录结构重组方法,其特征在于,该方法包括以下步骤:步骤一:设置滑动窗口初始偏移值offset为5;步骤二:学习待重组的记录所属数据表结构并依此界定滑动窗口;步骤三:计算所述滑动窗口的值Value(window)和所述待重组的记录中整个数据域的大小Length(DATA);步骤四:判断所述Value(window)和Length(DATA)的值是否相等,若是,则执行步骤A,否则执行步骤B。步骤A:根据所述滑动窗口中最后一个小窗口的位置和所述待重组的记录的结构重组已删除记录,结束流程。步骤B:判断所述offset取值是否已达其预定上限,若是,则尝试碎片重组并结束流程;否则,令offset=offset+1,并返回执行步骤三;其中,所述滑动窗口包括至少两个小窗口,并按照与所述待重组的记录中字节排序相同的方向排列所述至少两个小窗口。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈明辉方均滩罗佳吴世雄
申请(专利权)人:厦门市美亚柏科信息股份有限公司
类型:发明
国别省市:92

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

1