sqlite文件分析

sqlite文件分析

ID:20448117

大小:914.16 KB

页数:15页

时间:2018-10-13

sqlite文件分析_第1页
sqlite文件分析_第2页
sqlite文件分析_第3页
sqlite文件分析_第4页
sqlite文件分析_第5页
资源描述:

《sqlite文件分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、SQLite文件分析作者:饶捃1前言在移动终端APP开发屮,数据存储的性能是影响APP整体性能的重要因素之一,当今主流手机操作系统:IOS、Android、WindowsPhone等平台最常使用的数据库是SQLite,研究SQLite对于深度优化移动APP数据存储性能会比较有帮助。本文重点介绍SQLite主数据文件的操作原理,文中没有过多介绍具体字节级的含义,而较多使用了阁例来方便大家理解。本文没有讨论SQLite日志文件等临时文件,日志文件主要用于保障主数据文件的完整性。1.1预备知识(1)Btree,B-tree,B+t

2、ree文屮涉及到的最重要的数据结构是B树,SQLite文件大体就是许多棵B树的集合。每一张数据表、表的每一个索引都是以B树的形式存储在文件中的。读本文前需要了解B树相关知识。在SQLite中,存储表数据用B+tree,存储表索引用B-tree。表索引和表数据采用不同的B树的原因是为了提高10效率。注:后面文中在不区分B-tree和B+tree的地方统一用Btree來统称这两种B树。(2)Page(页)SQLite数据库文件由固定大小的“页(page)”组成。页的大小可以在512〜32768之间(包含这两个值,必须是2的指数)

3、,默认大小为1024个字节。页大小可以在数据库刚创建时设置,创建数据库之后,Page大小不再改变。Page是SQLite中B树的结构单元,也是磁盘读写的单元。数据文件中的Page从1开始编号,顺序排列在文件中,通过Page号可以很方便定位出Page在文件中的具体位置。(3)rovid每张表里的每条记录都会有一个唯一的整数id:rowid,这个是用于查找记录的关键key值。如果建表时创建了integer型主键,该值就作为rowid使用。如果没有创建,则系统向动生成integer的rowid,rowid用变长整数来表示。(4)

4、变长整数变长整数是SQLite的特色之一,它既可以处理大整数,又可以节省存储空间。可变长整数巾1〜9个字节组成,每个字节的低7位有效,第8位是标志位。在组成可变长整数的各字节中,前面字节(整数的高位字节)的第8位置1,只有最低一个字节的第8位置0,表示整数结束。可变长整数可以不到9个字节,即使使用了全部9个字节,也可以将它转换为一个64-bit整数。下而是一些可变长整数的例子,例子取向源文件btree.c屮的注释:0x00转挽为0x000000000x7f转换为0x0000007f0x810x00转换为0x000000800

5、x820x00转挽为0x000001000x800x7f转换为0x0000007f0x8a0x91OxdlOxac0x78转挽为0x123456780x810x810x810x810x01转换为0x1020408,该值与本人验算不一致,应是笔误。上面例子取A源文件bree.c中的注释,但0x12345678这个似乎是错误的,欢迎大家验算纠正。相应的计算函数是sqlite3GetVarint和sqlite3PutVarint。2文件格式2.1系统表sqlite_masterSQLite数掘库文件巾多棵Btree构成,每•棵Bt

6、ree至少占用一个完整的页,侮个页是Btree的一个结点单元。每个表或索引的第I个页为根页(rootpage),所有表或索引的根页编号都存储在系统表sqlite_master屮,表sqlite_master的根页力page1。sqlite_master是SQLite系统表,保存了数据库的结构(schema)信息,它包含5个字段:编号字段说明1type值为"table'1、"index">"trigger"或"view"之一。2name对象名称,值为字符串。3tbl_name如果是表或视图对象,此字段值与字段2相同。如果是索引

7、或触发器对象,此字段值为与其相关的表名。4rootpage对触发器或视阁对象,此字段值为0。对表或索引对象,此字段值为其根页的编号。5SQL字符串,创建此对象时所使用的SQL语句。2.2Page的格式每个页由四个部分构成:1.页头2.单元指针数组3.未分配空间1.单元内容区首先介绍“单元”的概念:Btree页A部以单元(cell)为单位来组织数裾,一个单元包含一个(或部分,当使用溢出页时)payload(也称为Btree记录)。由于各类数据人小各不相同,每个单元的人小也就是可变的,所以Btree页内部的空间需要进行动态分配。

8、页㈧所有单元的内容集屮在页的底部,称为“单元内容区”,由下向上增长。由于单元的大小可变,因此耑要对每个单元在页内的起始位置(称为单元指针)进行记录。单元指针保存在单元指针数组中,位于页头之后。单元指针数组包含0个或多个指针,由上向下增长。单元指针数组和单元内容区相向增长,中间部分为未分配空

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。