CN102591941B - 一种SQLite空闲链表节点的解析方法和装置 - Google Patents
一种SQLite空闲链表节点的解析方法和装置 Download PDFInfo
- Publication number
- CN102591941B CN102591941B CN201110443733.9A CN201110443733A CN102591941B CN 102591941 B CN102591941 B CN 102591941B CN 201110443733 A CN201110443733 A CN 201110443733A CN 102591941 B CN102591941 B CN 102591941B
- Authority
- CN
- China
- Prior art keywords
- nfp
- ftl
- node
- key point
- recording
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 19
- 238000000034 method Methods 0.000 claims abstract description 48
- 239000012634 fragment Substances 0.000 claims description 81
- 230000006798 recombination Effects 0.000 claims description 50
- 238000005215 recombination Methods 0.000 claims description 50
- 230000008521 reorganization Effects 0.000 claims description 36
- 238000012545 processing Methods 0.000 claims description 20
- 238000003379 elimination reaction Methods 0.000 claims description 7
- 238000013467 fragmentation Methods 0.000 claims description 6
- 238000006062 fragmentation reaction Methods 0.000 claims description 6
- 238000011282 treatment Methods 0.000 claims description 6
- 230000008030 elimination Effects 0.000 claims description 5
- 238000012217 deletion Methods 0.000 abstract description 11
- 230000037430 deletion Effects 0.000 abstract description 11
- 238000003780 insertion Methods 0.000 abstract description 4
- 230000037431 insertion Effects 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 239000002253 acid Substances 0.000 description 1
- 230000000739 chaotic effect Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种SQLite空闲链表节点的解析方法和装置,所述方法包括:读取SQLite空闲链表节点;从所述空闲链表节点中查找所有满足预设条件的记录关键点;对上述关键点进行记录重组;其中,所述记录关键点为4个字节组成的二元组<NFP,FTL>,所述预设条件为:value(NFP)>addr(NFP)并且value(FTL)∈(0,PSZ-addr(NFP)]。本发明基于SQLite数据库文件格式及记录的删除和***规则,采用删除记录二元组信息的通用关键点特征识别关键点信息,然后对上述关键点中的所有数据记录进行重组,实现快速、准确地解析SQLite空闲链表节点的多记录元组的发明目的。
Description
技术领域
本发明涉及计算机数据处理技术领域,特别是涉及一种SQLite空闲链表节点的解析方法和装置。
背景技术
SQLite数据库是遵守数据库事务正确执行四要素-原子性、一致性、隔离性和持久性(ACID,Atomicity、Consistency、Isolation、Durability)的关联式数据库管理***,其设计目标是嵌入式的,目前在很多嵌入式产品得到广泛使用。主要特点:占用***资源非常低,可支持Windows/Linux/Unix等等主流的操作***,可与很多程序语言相结合,并具有ODBC接口。与Mysql、PostgreSQL这两款开源数据库管理***相比,其处理速度更快。
传统的SQLite删除数据解析方法是根据记录数据的特征来断定某记录的大概范围,从而解析某些关键数据,但是这种方法的弊端是只能针对某一类 具体数据库文件(如某类手机中的短信数据库文件),而对于其他的数据库文件(如邮件数据库文件)则需要重新提取数据特征并重新解析,无法保证通用性。
SQLite数据库删除数据的通用解析,当前国内外研究比较少;目前市场上的通用解析产品具有很大的局限性,特别其多记录空闲链表节点,或存在记录碎片和关键点碎片的空闲链表节点,无法做到准确定位,解析效果不尽如人意。测试发现对于存在较多记录碎片和关键点碎片的多记录空闲链表节点,往往只能解析一条记录,甚至无法解析任何一条记录,而且解析结果经常由于记录元组划分的不准确存在乱码现象,因此现有技术对多记录删除数据重组的准确性和全面性均存在问题,无法适于实际应用。
发明内容
本发明所要解决的技术问题是提供一种SQLite空闲链表节点的解析方法,可解决现有技术只能对SQLite数据库文件的单记录删除结构进行解析的问题。
本发明还提供了一种SQLite空闲链表节点的解析装置,以保证上述方法在实际中的应用。
为了解决上述问题,本发明公开了一种SQLite空闲链表节点的解析方法,包括: 读取SQLite空闲链表节点;从所述空闲链表节点中查找所有满足预设条件的记录关键点;对上述关键点进行记录重组;
其中,所述记录关键点为4个字节组成的二元组<NFP,FTL>,所述预设条件为:
value(NFP)> addr(NFP)并且value(FTL)∈(0,PSZ-addr(NFP)];
NFP表示指向下一个空闲节点的指针,由2个字节组成;FTL是NFP后面的2个字节,表示该空闲节点的大小; value(NFP)表示NFP指向的位置;
addr(NFP)表示NFP本身的偏移地址;value(FTL)表示该空闲节点的大小;PSZ表示SQLite数据库中数据页的大小。
优选的,所述查找记录关键点的方法具体为:将所述空闲链表节点的偏移地址的初始值设置为0;从该空闲链表节点中的当前偏移地址处开始读取4个字节,组成二元组<NFP,FTL>,判断该<NFP,FTL>是否满足上述2个条件,若是,则当前偏移地址位置对应的二元组<NFP,FTL>为记录关键点;当前偏移地址增1,重复上述判断步骤,直至当前偏移地址到达该空闲链表节点的末端。
优选的,还包括对所述所有关键点进行如下处理的步骤:若关键点<NFPi,FTLi>记录重组不成功,根据碎片特征调整关键点<NFPi,FTLi>的二元组信息,消除可能存在的关键点碎片,然后进行记录重组。
优选的,还包括对所述关键点按从后到前的顺序进行如下伪关键点识别处理的步骤:若关键点<NFPi,FTLi>重组不成功,且具备碎片重组条件,则进一步判断<NFPi-1,FTLi-1>是否为重组不成功的节点,若是,将节点<NFPi,FTLi>向前与节点<NFPi-1,FTLi-1>合并,对合并后的节点<NFPi-1,FTLi-1>进行记录重组,若不能满足记录重组或者记录碎片重组的条件,则拆开合并后的节点<NFPi-1,FTLi-1>,对<NFPi,FTLi>进行记录碎片重组;若关键点<NFPi,FTLi>重组不成功且不具备碎片重组条件,则进一步判断<NFPi-1,FTLi-1>是否为重组成功的节点;若<NFPi-1,FTLi-1>是重组成功的节点,则检查<NFPi,FTLi>是否为合并过的节点,对于合并节点,拆开合并节点,从倒数第二个被合并节点开始重复上述伪关键点识别处理过程;若<NFPi-1,FTLi-1>是重组不成功的节点,将节点<NFPi,FTLi>向前与节点<NFPi-1,FTLi-1>合并 ,对合并后的节点<NFPi-1,FTLi-1>进行记录重组,若记录重组不成功,则根据碎片特征调整该合并后的节点<NFPi-1,FTLi-1>的二元组信息,消除可能存在的关键点碎片,然后进行记录重组;当合并后节点重组不成功、不具备碎片重组条件、且<NFPi-1,FTLi-1>的原始状态为碎片时,将合并节点<NFPi-1,FTLi-1>拆开,从倒数第二个被合并节点开始重复上述伪关键点识别处理过程。
依据本发明的另一优选实施例,还公开了一种SQLite空闲链表节点的解析装置, 包括空闲链表获取单元,关键点查找单元和记录重组单元,其中:
空闲链表获取单元用于读取SQLite空闲链表的节点;
关键点查找单元用于从所述空闲链表获取单元读取的空闲链表节点中查找所有满足预设条件的记录关键点;
上述记录关键点为4个字节组成的二元组<NFP,FTL>,所述预设条件为:
value(NFP)> addr(NFP)
并且
value(FTL)∈(0,PSZ-addr(NFP)]
NFP表示指向下一个空闲节点的指针,由2个字节组成;
FTL是NFP后面的2个字节,表示该空闲节点的大小;
value(NFP)表示NFP指向的位置;
addr(NFP)表示NFP本身的偏移地址;
value(FTL)表示该空闲节点的大小;
PSZ表示SQLite数据库中数据页的大小;
记录重组单元用于对所述关键点查找单元获得关键点进行记录重组。
优选的,所述关键点查找单元具体包括控制子单元和条件判断子单元,其中:控制子单元用于控制所述条件判断子单元从偏移地址为0到该空闲链表节点末端的遍历搜索过程;条件判断子单元用于从所述空闲链表节点中的当前偏移地址处开始读取4个字节,组成二元组<NFP,FTL>,判断该<NFP,FTL>是否满足所述预设条件,并将满足所述预设条件的当前偏移地址位置对应的二元组<NFP,FTL>作为记录关键点。
优选的,还包括关键点碎片消除单元,用于根据碎片特征调整重组不成功的关键点<NFPi,FTLi>的二元组信息,消除可能存在的关键点碎片,然后进行记录重组。
优选的,还包括记录碎片重组单元和伪关键点处理单元,其中,
记录碎片重组单元用于对重组不成功且具备碎片重组条件的关键点<NFPi,FTLi>作以下处理:当该关键点的前一个关键点<NFPi-1,FTLi-1>为重组不成功的节点时,合并节点<NFPi-1,FTLi-1>与<NFPi,FTLi>,并对合并后的节点进行记录重组,若不能满足记录重组或记录碎片重组条件,则拆开合并后的节点<NFPi-1,FTLi-1>,对<NFPi,FTLi>进行记录碎片重组;
伪关键点处理单元用于对重组不成功且不具备碎片重组条件的关键点<NFPi,FTLi>进行如下处理:当该关键点的前一个关键点<NFPi-1,FTLi-1>为重组成功的节点时,检查<NFPi,FTLi>是否为合并过的节点,对于合并节点,拆开合并节点,从倒数第二个被合并节点开始重复执行伪关键点识别处理;当该关键点的前一个关键点<NFPi-1,FTLi-1>为重组不成功的节点时,将<NFPi,FTLi>向前与<NFPi-1,FTLi-1>合并 ,对合并后的节点<NFPi-1,FTLi-1>进行记录重组、记录碎片标记和碎片消除处理,当合并后节点重组不成功、不具备碎片重组条件、且<NFPi,FTLi>的原始状态为碎片时,将合并节点<NFPi,FTLi>拆开,从倒数第二个被合并节点开始重复执行伪关键点识别处理。
与现有技术相比,本发明具有以下优点:
本发明优选实施例方案中,基于SQLite数据库文件格式及记录的删除和***规则,采用SQLite空闲链表节点的删除记录二元组信息的通用关键点特征识别关键点信息,然后对上述关键点中的所有数据记录进行重组,实现快速、准确地解析SQLite空闲链表节点的多记录元组的发明目的;另外,由于本发明优选实施例方案采用的是SQLite数据库空闲链表的通用特征进行识别处理的,因此,本发明方案不局限于某一个特定数据库文件(如手机中的电子邮件数据库)进行解析,而是对所有sqlite数据库的空闲节点多记录元组的解析都适用,具有很强的通用性。
在本发明进一步的优选实施例中,利用节点合并和分离方法识别真伪关键点,并且自适应消除关键点碎片,可增强空闲节点多记录元组解析的准确性。
附图说明
图1是本发明SQLite空闲链表节点的解析方法第一实施例的流程图;
图2是本发明SQLite空闲链表节点的解析方法第二实施例的流程图;
图3是本发明SQLite空闲链表节点的解析装置一实施例的结构框图。
具体实施方式
在结合附图和具体实施方式对本发明作进一步详细的说明之前,首先介绍一下与SQLite数据库有关的几个概念。
SQLite数据库文件:由固定大小的页(Page)组成,页的大小为512~32768字节(必须是2的指数),默认大小为1024字节(1KB)。页的大小可以在创建数据库时设置,数据库对象创建完成后就不能再修改了。页的类型包括二叉排序树(Btree)页、空闲(free)页和/或溢出页(overflow),Btree还可以是B+tree或B-tree,每一种节点又可分为主干页和叶子页。
空闲链表节点位于叶子页中,由删除记录构成,可以是单个删除记录,也可以是多个删除记录(包括完整记录和记录碎片)。
单个删除记录构成的空闲链表节点的结构如表1所示,其中,前2个字节表示指向下一个空闲节点的指针NFP,第3~4字节表示该空闲节点的大小FTL。
表1、单记录空闲链表节点的结构
对于多个删除记录构成的空闲链表节点,由于相邻的空闲节点会合并成一个空闲链表节点,而且***记录是又会从空闲节点中分配空间,从而破坏简单的空闲节点结构;如此经过多次记录***和删除之后,空闲节点的结构将变得很混乱:节点中存在多条记录或者记录碎片,内部每个NFP指向的位置呈随机化趋势,FTL的大小也未必表示后续空闲空间的大小,其中NFP和FTL组成的二元组<NFPi,FTLi>称为关键点,上述i∈[1,N],N表示该节点中包括的删除记录数。
表2、多记录空闲链表节点的结构
如表2所示, NFP1指向下一个空闲链表节点的地址,其他的NFPi(i∈(1,N])指向的位置有可能是下一个空闲链表节点的地址,也可能是NFPj(j∈(i,N]),还可能是后续***的记录的内容区;FTL1表示当前多记录构成的空闲节点的大小, FTLi(i∈(1,N])可能是表示该空闲节点后续的空间大小,也可能是记录碎片的大小;此外关键点<NFPi,FTLi>(i∈[1,N])有可能因为被覆盖而变成关键点碎片。
对于删除记录RECi(i∈[1,N]),前2字节NFPi指向下一块空闲节点的地址,后续2个字节FTLi表示该空闲节点的大小,经过一系列的删除、***操作之后,空闲节点的结构可能带来如下变化:
(1)NFPi指向的可能不是下一个空闲节点的地址;
(2)FTLi表示的可能是多条记录的长度或者仅为记录碎片的长度;
(3)关键点<NFPi,FTLi>可能因为被覆盖而变成碎片(小于4字节)。
但是,关键点<NFPi,FTLi>的最原始特性使得该关键点至少保持了2个基本特征:
(1)NFPi本身的位置偏移(记为addr(NFPi))和NFPi指向的位置(记为value(NFPi))之间的关系是线性增长关系,满足关系式:
value(NFPi) > addr(NFPi)
(2)FTLi表示的是相应的空闲节点或子节点的大小(记为value(FTLi)),其取值范围满足:
value(FTLi)∈(0, PSZ – addr(NFPi)]
上述PSZ表示SQLite数据库文件的Btree数据页的大小。
方法实施例:
参照图1,示出了本发明SQLite空闲链表节点的解析方法第一实施例的流程,具体包括以下步骤:
步骤S101:读取SQLite空闲链表节点;
步骤S102:从上述空闲链表节点中查找所有满足预设条件的记录关键点;
上述预设条件即上文所述的关键点<NFP,FTL>的2个基本特征:
value(NFPi) > addr(NFPi)
且
value(FTLi)∈(0, PSZ – addr(NFPi)]
在本优选实施例中,可采用下述方法查找记录关键点:
步骤S102-1:将该空闲链表节点FRN偏移地址offset的初始值设置为0;
步骤S102-2:判断offset是否已经达到该FRN的末端,若是,结束关键点的查找过程,转步骤S103;否则,转步骤S102-3;
步骤S102-3:从FRN中offset处开始读取4个字节,组成<NFP,FTL>;
步骤S102-4:判断该<NFP,FTL>是否满足上述的2个基本特征,若是,转步骤S103-5;否则,转步骤S102-6;
步骤S102-5:该offset位置对应的二元组即可能为记录关键点,将该关键点信息加入关键点链表FLIST,并且修正相关的二元组信息;转步骤S102-6;
步骤S102-6:offset++(即将偏移地址offset增1),转步骤S102-2;
步骤S103:对上述关键点进行记录重组;
参照图2,示出了本发明SQLite空闲链表节点的解析方法第二实施例的流程;考虑到value(NFPi) > addr(NFPi)和value(FTLi)∈(0, PSZ – addr(NFPi)]只是判断关键点<NFPi,FTLi>的必要条件,仅仅满足这2个特征未必是真关键点,还有可能是伪关键点,优选实施例为提高数据解析的精确性,除上述第一实施例所包括的步骤外,还包括进一步识别处理其中包括的伪关键点和关键点碎片的步骤,具体流程如下:
步骤S201:读取SQLite空闲链表节点;
步骤S202:从上述空闲链表节点中查找所有满足预设条件的记录关键点,并将上述关键点信息加入关键点链表FLIST;
步骤S203:正序遍历FLIST,检测各关键点是否满足记录重组或碎片重组条件,若是,则为相应关键点设置重组标记或碎片标记;
在本优选实施例中,可采用下述方法实现记录重组及碎片消除过程:
步骤S203-1:令i=1;
步骤S203-2:对<NFPi,FTLi>进行完整记录重组;
步骤S203-3:判断上述记录重组是否成功,若是,为该关键点设置重组标志,转步骤S203-7;否则,转步骤S203-4;
步骤S203-4:根据碎片特征调整<NFPi,FTLi>的二元组信息,消除可能存在的关键点碎片,然后尝试完整记录重组;
步骤S203-5:判断上述消除碎片后的记录重组是否成功,若是,为该关键点设置重组标志,转步骤S203-7;否则,还原<NFPi,FTLi>的二元组信息,转步骤S203-6;
步骤S203-6:检测<NFPi,FTLi>是否满足碎片重组条件;若是,为该关键点设置碎片标记;否则,根据碎片特征调整<NFPi,FTLi>的二元组信息,消除可能存在的关键点碎片,然后尝试记录记录碎片重组,若记录碎片标记失败,还原<NFPi,FTLi>的二元组信息;
步骤S203-7:i=i+1;若i≤N,转步骤S203-2;否则,转步骤S204;
其中,上述N表示FLIST中关键点的数量。
步骤S204:逆序遍历FLIST,对没有记录重组标记或碎片标记的关键点,利用节点合并和拆分方法识别真伪关键点;
在本优选实施例中,可采用下述方法实现上述记录重组及碎片消除过程:
步骤S204-1:令i=N;其中,N表示FLIST中关键点的数量;
步骤S204-2:判断<NFPi,FTLi>是否有重组标志,若是,转步骤S204-9;否则;转步骤S204-3;
步骤S204-3:判断<NFPi,FTLi>是否有碎片标记,若是,转步骤S204-4;否则,转步骤S204-6;
步骤S204-4:判断前一个节点<NFPi-1,FTLi-1>是否有重组标记,若是,i=i-1,转步骤S204-9;否则,转步骤S204-5;
步骤S204-5:把节点<NFPi-1,FTLi-1>与<NFPi,FTLi>合并 ,对于合并后的节点<NFPi-1,FTLi-1>进行记录重组;若重组成功,为合并后的节点设置重组标志,i=i-2,转步骤S204-9;否则,拆开合并的节点,对于<NFPi,FTLi>,根据二元组信息重组记录碎片,设置重组标记,i=i-1,转步骤S204-9;
步骤S204-6:判断前一个节点<NFPi-1,FTLi-1>是否有重组标记,若是,转步骤S204-7;否则,转步骤S204-8;
步骤S204-7:检查该节点<NFPi,FTLi>是否为合并过的节点,若是,拆开合并节点,<NFPi,FTLi>指向倒数第二个被合并节点,转步骤S204-9;否则,忽略该节点,i=i-1,转步骤S204-9;
步骤S204-8:将节点<NFPi-1,FTLi-1>与<NFPi,FTLi>合并(当前关键点为伪关键点),对于合并后的节点<NFPi-1,FTLi-1>,用步骤S203-2~S203-6的方法来检查是否满足重组条件或碎片重组条件,若是,设置相应的重组标志或碎片标志,i=i-1,转步骤S204-9;否则,当<NFPi,FTLi>的原始状态为碎片时,将合并节点拆开,下标第二大的被合并节点作为当前节点,转步骤S204-9;
步骤S204-9:若i≥1,转步骤S204-2;否则,结束流程。
对于前述的各方法实施例,为了描述简单,故将其都表述为一系列的动作组合,但是本领域的技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为根据本发明,某些步骤可以采用其他顺序或同时执行;其次,本领域技术人员也应该知悉,上述方法实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
装置实施例:
参照图3,示出了本发明SQLite空闲链表节点的解析装置一实施例的结构框图,包括空闲链表获取单元31、关键点查找单元32、记录重组单元33、关键点碎片消除单元34、记录碎片重组单元35和伪关键点处理单元36,其中:
空闲链表获取单元31:用于读取SQLite空闲链表节点。
关键点查找单元32:用于从空闲链表获取单元31读取的空闲链表节点中查找所有满足预设条件的记录关键点;
上述记录关键点为4个字节组成的二元组<NFP,FTL>,预设的判断条件为:
value(NFP)> addr(NFP)
并且
value(FTL)∈(0,PSZ-addr(NFP));
其中,
NFP表示指向下一个空闲节点的指针,由2个字节组成;
FTL是NFP后面的2个字节,表示该空闲节点的大小;
value(NFP)表示NFP指向的位置;
addr(NFP)表示NFP本身的偏移地址;
value(FTL)表示该空闲节点的大小;
PSZ表示SQLite数据库中数据页的大小;
本优选实施例的关键点查找单元32具体包括控制子单元32-1和条件判断子单元32-2,控制子单元32-1用于控制条件判断子单元32-2从偏移地址offset为0到该空闲链表节点末端的遍历搜索过程;条件判断子单元32-2用于从空闲链表获取单元31读取的空闲链表节点中的offset开始读取4个字节,判断是否满足上述预设条件,并将满足上述预设条件的offset位置对应的二元组<NFP,FTL>作为记录关键点。
记录重组单元33:用于对关键点查找单元32获得关键点进行记录重组。
关键点碎片消除单元34:用于根据碎片特征调整所有重组不成功的关键点<NFPi,FTLi>的二元组信息,消除可能存在的关键点碎片,然后进行记录重组。
记录碎片重组单元35:用于对所有重组不成功且具备碎片重组条件的关键点<NFPi,FTLi>作以下处理:当该关键点的前一个关键点<NFPi-1,FTLi-1>为重组不成功的节点时,合并节点<NFPi-1,FTLi-1>与<NFPi,FTLi>,并对合并后的节点进行记录重组,若不能满足记录重组或者记录碎片重组的条件,则拆开合并后的节点<NFPi-1,FTLi-1>,对<NFPi,FTLi>进行记录碎片重组。
伪关键点处理单元36:用于对重组不成功且不具备碎片重组条件的关键点<NFPi,FTLi>进行如下处理:当该关键点的前一个关键点<NFPi-1,FTLi-1>为重组不成功的节点时,将<NFPi-1,FTLi-1>与<NFPi,FTLi>合并,对合并后的节点<NFPi-1,FTLi-1>进行记录重组、记录碎片标记和关键点碎片消除处理,当合并后节点还是重组不成功、不具备碎片重组条件、且<NFPi,FTLi>的原始状态为碎片时,将合并节点<NFPi-1,FTLi-1>拆开,从倒数第二个被合并节点开始重复上述伪关键点识别处理过程;当该关键点的前一个关键点<NFPi-1,FTLi-1>为重组成功的节点时,检查<NFPi,FTLi>是否为合并过的节点,对于合并节点,拆开合并节点,从倒数第二个被合并节点开始重复上述伪关键点识别处理过程。
需要说明的是,上述装置实施例属于优选实施例,所涉及的单元和模块并不一定是本发明所必须的。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于本发明的装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本发明所提供的一种SQLite空闲链表节点的解析方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种SQLite空闲链表节点的解析方法,其特征在于,包括:
读取SQLite空闲链表节点;
从所述空闲链表节点中查找所有满足预设条件的记录关键点;
对上述关键点进行记录重组;
其中,所述记录关键点为4个字节组成的二元组<NFP,FTL>,所述预设条件为:
value(NFP)> addr(NFP)
并且
value(FTL)∈(0,PSZ-addr(NFP)]
NFP表示指向下一个空闲节点的指针,由2个字节组成;
FTL是NFP后面的2个字节,表示该空闲节点的大小;
value(NFP)表示NFP指向的位置;
addr(NFP)表示NFP本身的偏移地址;
value(FTL)表示该空闲节点的大小;
PSZ表示SQLite数据库中数据页的大小。
2.如权利要求1所述的方法,其特征在于,所述查找记录关键点的方法具体为:
将所述空闲链表节点的偏移地址的初始值设置为0;
从该空闲链表节点中的当前偏移地址处开始读取4个字节,组成二元组<NFP,FTL>,判断该<NFP,FTL>是否满足上述2个条件,若是,则当前偏移地址位置对应的二元组<NFP,FTL>为记录关键点;
当前偏移地址增1,重复上述判断步骤,直至当前偏移地址到达该空闲链表节点的末端。
3. 如权利要求1所述的方法,其特征在于,还包括对所述所有关键点进行如下处理的步骤:若关键点<NFPi,FTLi>记录重组不成功,根据碎片特征调整关键点<NFPi,FTLi>的二元组信息,消除可能存在的关键点碎片,然后进行记录重组。
4. 如权利要求3所述的方法,其特征在于,还包括对所述关键点按从后到前的顺序进行如下伪关键点识别处理的步骤:
若关键点<NFPi,FTLi>重组不成功,且具备碎片重组条件,则进一步判断<NFPi-1,FTLi-1>是否为重组不成功的节点,若是,将节点<NFPi,FTLi>向前与节点<NFPi-1,FTLi-1>合并,对合并后的节点<NFPi-1,FTLi-1>进行记录重组,若不能满足记录重组或者记录碎片重组的条件,则拆开合并后的节点<NFPi-1,FTLi-1>,对<NFPi,FTLi>进行记录碎片重组;
若关键点<NFPi,FTLi>重组不成功且不具备碎片重组条件,则进一步判断<NFPi-1,FTLi-1>是否为重组成功的节点;
若<NFPi-1,FTLi-1>是重组成功的节点,则检查<NFPi,FTLi>是否为合并过的节点,对于合并节点,拆开合并节点,从倒数第二个被合并节点开始重复上述伪关键点识别处理过程;
若<NFPi-1,FTLi-1>是重组不成功的节点,将节点<NFPi,FTLi>向前与节点<NFPi-1,FTLi-1>合并 ,对合并后的节点<NFPi-1,FTLi-1>进行记录重组,若记录重组不成功,则根据碎片特征调整该合并后的节点<NFPi-1,FTLi-1>的二元组信息,消除可能存在的关键点碎片,然后进行记录重组;当合并后节点重组不成功、不具备碎片重组条件、且<NFPi-1,FTLi-1>的原始状态为碎片时,将合并节点<NFPi-1,FTLi-1>拆开,从倒数第二个被合并节点开始重复上述伪关键点识别处理过程。
5. 一种SQLite空闲链表节点的解析装置,其特征在于,包括空闲链表获取单元,关键点查找单元和记录重组单元,其中:
空闲链表获取单元用于读取SQLite空闲链表的节点;
关键点查找单元用于从所述空闲链表获取单元读取的空闲链表节点中查找所有满足预设条件的记录关键点;
上述记录关键点为4个字节组成的二元组<NFP,FTL>,所述预设条件为:
value(NFP)> addr(NFP)
并且
value(FTL)∈(0,PSZ-addr(NFP)]
NFP表示指向下一个空闲节点的指针,由2个字节组成;
FTL是NFP后面的2个字节,表示该空闲节点的大小;
value(NFP)表示NFP指向的位置;
addr(NFP)表示NFP本身的偏移地址;
value(FTL)表示该空闲节点的大小;
PSZ表示SQLite数据库中数据页的大小;
记录重组单元用于对所述关键点查找单元获得关键点进行记录重组。
6. 如权利要求5所述的装置,其特征在于,所述关键点查找单元具体包括控制子单元和条件判断子单元,其中:
控制子单元:用于控制所述条件判断子单元从偏移地址为0到该空闲链表节点末端的遍历搜索过程;
条件判断子单元:用于从所述空闲链表节点中的当前偏移地址处开始读取4个字节,组成二元组<NFP,FTL>,判断该<NFP,FTL>是否满足所述预设条件,并将满足所述预设条件的当前偏移地址位置对应的二元组<NFP,FTL>作为记录关键点。
7. 如权利要求5所述的装置,其特征在于,还包括关键点碎片消除单元,用于根据碎片特征调整重组不成功的关键点<NFPi,FTLi>的二元组信息,消除可能存在的关键点碎片,然后进行记录重组。
8. 如权利要求7所述的装置,其特征在于,还包括记录碎片重组单元和伪关键点处理单元,其中,
记录碎片重组单元用于对重组不成功且具备碎片重组条件的关键点<NFPi,FTLi>作以下处理:当该关键点的前一个关键点<NFPi-1,FTLi-1>为重组不成功的节点时,合并节点<NFPi-1,FTLi-1>与<NFPi,FTLi>,并对合并后的节点进行记录重组,若不能满足记录重组或记录碎片重组条件,则拆开合并后的节点<NFPi-1,FTLi-1>,对<NFPi,FTLi>进行记录碎片重组;
伪关键点处理单元用于对重组不成功且不具备碎片重组条件的关键点<NFPi,FTLi>进行如下处理:
当该关键点的前一个关键点<NFPi-1,FTLi-1>为重组成功的节点时,检查<NFPi,FTLi>是否为合并过的节点,对于合并节点,拆开合并节点,从倒数第二个被合并节点开始重复执行伪关键点识别处理;
当该关键点的前一个关键点<NFPi-1,FTLi-1>为重组不成功的节点时,将<NFPi,FTLi>向前与<NFPi-1,FTLi-1>合并 ,对合并后的节点<NFPi-1,FTLi-1>进行记录重组、记录碎片标记和碎片消除处理,当合并后节点重组不成功、不具备碎片重组条件、且<NFPi,FTLi>的原始状态为碎片时,将合并节点<NFPi,FTLi>拆开,从倒数第二个被合并节点开始重复执行伪关键点识别处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110443733.9A CN102591941B (zh) | 2011-12-27 | 2011-12-27 | 一种SQLite空闲链表节点的解析方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110443733.9A CN102591941B (zh) | 2011-12-27 | 2011-12-27 | 一种SQLite空闲链表节点的解析方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102591941A CN102591941A (zh) | 2012-07-18 |
CN102591941B true CN102591941B (zh) | 2014-03-12 |
Family
ID=46480582
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110443733.9A Active CN102591941B (zh) | 2011-12-27 | 2011-12-27 | 一种SQLite空闲链表节点的解析方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102591941B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105426542B (zh) * | 2015-12-24 | 2019-02-22 | 厦门市美亚柏科信息股份有限公司 | 一种SQLite空闲页上被删数据表的记录分析方法和装置 |
CN109446022B (zh) * | 2018-10-12 | 2022-08-12 | 厦门市美亚柏科信息股份有限公司 | 一种数据库溢出页异常的检测方法、装置及存储介质 |
CN110347804B (zh) * | 2019-07-22 | 2023-05-12 | 同方知网数字出版技术股份有限公司 | 一种线性时间复杂度的敏感信息检测方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101702163A (zh) * | 2009-11-19 | 2010-05-05 | 福建鑫诺通讯技术有限公司 | 基于SQLite数据库的数据转换方法 |
-
2011
- 2011-12-27 CN CN201110443733.9A patent/CN102591941B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101702163A (zh) * | 2009-11-19 | 2010-05-05 | 福建鑫诺通讯技术有限公司 | 基于SQLite数据库的数据转换方法 |
Non-Patent Citations (4)
Title |
---|
"和欣"手机的数据完整性技术研究;刘文荣等;《电脑知识与技术》;20080423(第10期);7-9 * |
IPhone手机取证的应用研究;高峰;《警察技术》;20110507(第3期);38-41 * |
刘文荣等."和欣"手机的数据完整性技术研究.《电脑知识与技术》.2008,(第10期),7-9. |
高峰.IPhone手机取证的应用研究.《警察技术》.2011,(第3期),38-41. |
Also Published As
Publication number | Publication date |
---|---|
CN102591941A (zh) | 2012-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684333B (zh) | 一种数据存储及裁剪方法、设备和存储介质 | |
US8554561B2 (en) | Efficient indexing of documents with similar content | |
EP3438848B1 (en) | Identifying properties of a communication device | |
WO2013086969A1 (zh) | 重复数据查找方法、装置及*** | |
CN109086382B (zh) | 一种数据同步方法、装置、设备及存储介质 | |
CN103581331A (zh) | 虚拟机在线迁移方法与*** | |
US20170024439A1 (en) | Accelerated detection of matching patterns | |
CN106980680B (zh) | 数据存储方法及存储设备 | |
WO2014000458A1 (zh) | 小文件处理方法及装置 | |
WO2016043757A1 (en) | Data to be backed up in a backup system | |
CN102591941B (zh) | 一种SQLite空闲链表节点的解析方法和装置 | |
CN112597345A (zh) | 一种实验室数据自动采集与匹配方法 | |
US20180075074A1 (en) | Apparatus and method to correct index tree data added to existing index tree data | |
CN112600954B (zh) | IPv4地址匹配方法、电子装置、存储介质 | |
CN112231400B (zh) | 分布式数据库的访问方法、装置、设备及存储介质 | |
CN116126997B (zh) | 一种文献去重存储方法、***、设备及存储介质 | |
WO2011073680A1 (en) | Improvements relating to hash tables | |
CN108021472B (zh) | ReFS文件***的格式化恢复方法及存储介质 | |
CN111984591A (zh) | 文件存储、读取方法、装置、设备及计算机可读存储介质 | |
CN111026736A (zh) | 数据血缘管理方法及装置、数据血缘解析方法及装置 | |
US8988258B2 (en) | Hardware compression using common portions of data | |
CN110321346B (zh) | 一种字符串散列表实现方法和*** | |
CN114840502A (zh) | 使用不同的散列大小和压缩大小进行散列 | |
CN111309846B (zh) | 索引处理方法、装置、设备及介质 | |
CN113407375B (zh) | 数据库删除数据的恢复方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |