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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM