• 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

  • 相关阅读:
    友链
    CF496E Distributing Parts(贪心)题解
    CF786C Till I Collapse(根号分治)题解
    CF578B "Or" Game(贪心)题解
    CF433C Ryouko's Memory Note(贪心)题解
    Luogu4177 [CEOI2008]order(网络流)题解
    骗分专辑
    CF718A Efim and Strange Grade(贪心)题解
    prufer序列--学习笔记
    bzoj3450 Tyvj1952 Easy(期望DP)题解
  • 原文地址:https://www.cnblogs.com/chencheng/p/2585534.html
Copyright © 2020-2023  润新知