sqlite 页面结构分析

新建一个数据库,执行“create table t1(id integer,info text);”命令后对数据库文件结构的简要分析如下:

数据库中第一个页是Btree页。第一个页面的前100个字节是一个对数据库文件进行描述的“文件头”,通过对应关系可以获得“包括数据库的版本、格式的版本、页大小、编码等所有创建数据库时设置的永久性参数”。


文件头后面紧跟sqlite_master表的页面,也就是数据库的第一个页面,每个页面由四个部分构成

1:页头信息

0D表示页面的类型,00 00 表示第一个自由块偏移,00 01表示本页的CELL个数,03 C8表示CELL的开始地址(偏移地址),00表示碎片数。

2:CELL偏移地址

03 C8表示第一个CELL的偏移地址,如果有多个CELL依次存放多个CELL的偏移地址,通过CELL的偏移地址可以定位到具体CELL的位置。

3:CELL内容信息

根据CELL偏移地址(03 C8)计算得到0x000003c8存放CELL的实际信息。

sqlite_master是一个系统表,保存了数据库的schema信息并且保存表根页的编号等信息。这个例子中0x000003d9的值为2,表示t1这个表在数据库文件中第二个页面中。从文件头可以得知页面大小为1024,也就可以得知第二个页面的起始位置是0x00000400.

4:中间未分配的空间

可以看出CELL内容信息从页面尾部开始分配,页面的前端分配页面头信息和CELL的偏移地址信息。中间是未使用的页面空间。

转载请注明原始出处:http://www.cnblogs.com/chencheng/archive/2012/07/10/2585534.html

posted @ 2012-07-11 00:09  平凡之路  阅读(3789)  评论(2编辑  收藏  举报