青草久久影院-青草久久伊人-青草久久久-青草久久精品亚洲综合专区-SM双性精跪趴灌憋尿调教H-SM脚奴调教丨踩踏贱奴

17站長網

17站長網 首頁 數據庫 SQLite教程 查看內容

SQLite數據庫文件格式分析(B樹的基本組織)

2023-3-21 15:27| 查看: 2096 |來源: 互聯網

此分析稱為簡易版,因為后面還計劃分析一個更復雜的數據庫文件,以深入理解SQLite數據庫B樹實現的結構,從簡易的開始不失為一種好的學習方法,這里的簡易版本文 ...

此分析稱為簡易版,因為后面還計劃分析一個更復雜的數據庫文件,以深入理解SQLite數據庫B樹實現的結構,從簡易的開始不失為一種好的學習方法,這里的簡易版本文件是指大 小為2K字節,即每個B樹頁1K字節,共兩個B樹頁,補充說明一下,這里的B樹頁就是指經典數據結構書上所講的B樹節點,在這里稱為頁是因為SQLite 在實現B樹時就是使用頁page的概念來組織的。創建方法如下:

CREATE TABLE tbl1(one varchar(10),two varchar(10));

INSERT INTO "tbl1" VALUES('first', 'xxx');

INSERT INTO "tbl1" VALUES('second', 'yyy');

然后退出,用UltraEdit打開這個數據庫文件:

00000000h: 53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00 ; SQLite format 3.

00000010h: 04 00 01 01 00 40 20 20 00 00 00 07 00 00 00 00 ; .....@ ........

00000020h: 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 01 ; ................

00000030h: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 ; ................

00000040h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

00000050h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

00000060h: 00 00 00 00 0D 00 00 00 01 03 B8 00 03 B8 00 00 ; ..........?.?.

00000070h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

這中間部分全部都是零。省去!

000003a0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

000003b0h: 00 00 00 00 00 00 00 00 46 01 06 17 15 15 01 71 ; ........F......q

000003c0h: 74 61 62 6C 65 74 62 6C 31 74 62 6C 31 02 43 52 ; tabletbl1tbl1.CR

000003d0h: 45 41 54 45 20 54 41 42 4C 45 20 74 62 6C 31 28 ; EATE TABLE tbl1(

000003e0h: 6F 6E 65 20 76 61 72 63 68 61 72 28 31 30 29 2C ; one varchar(10),

000003f0h: 74 77 6F 20 76 61 72 63 68 61 72 28 31 30 29 29 ; two varchar(10))

這是第一個B樹頁,這個B樹頁里存放了表sqlite_master的信息,這就是SQLite數據庫的系統表了。

下面分析一下這些二進制的具體涵義,SQLite統一采用大端法來表示數據,不同與一般intel機器的小端法了:

偏移地址 大小 涵義

0 16 "SQLite format 3/000"

16 2 400H=1024個字節,每個頁面的字節數

18 2 0101H表示版本號而已

20 1 每頁末端的未用空間,這里為零表示數據都是從每頁最后一個字節開始存放

21 1 最大負載分片數,類似與IP分片,一頁存不下,要分片

22 1 最小負載分片數

23 1 最小葉子負載分片數

24 4 文件修改計數,用于實現并行訪問

28 4 保留未用

32 4 第一個freelist頁

36 4 文件中的freelist頁數

40 60 這里未用

上面的這一百個字節稱為數據庫文件的文件頭,這個文件頭只有第一個B樹頁才有,后面的每一個B樹頁都沒有這個結構,后面每一頁結構都相同:

依次為:B樹頁頭結構,B樹指針結構,未用空間,B樹實際數據負載。

這里和經典數據結構書上的B樹結構有些出入,這里的目的是實際應用方便,而書上的結構目的是解釋清楚B樹的原理。所以有些不同:

一般書上講的一個B樹頁的結構為:指針,數據,指針,數據,指針,數據,...,指針

而SQLite組織為:指針,指針,指針,...,指針,數據,數據,...數據。

第一個頁面中從00000060h行第五個字節開始就表示B樹頁頭結構了:

偏移地址 大小 涵義

0 1 0Dh=1101b各位意義為1: intkey, 2: zerodata, 4: leafdata, 8: leaf

1 2 第一個空閑塊的字節偏移量,這里為0

3 2 01,這個B樹頁存放的記錄數為1個,即系統表中只存放了一條記錄,因為只創建了一個表tbl1

5 2 負載區首地址,03B8,往下看到000003b0h行那個46就是負載區的開始了

7 1 分片數,這里數據少,不考慮,所以為0

到0000006Bh偏移處B數頭結束了,接下來的就是B數指針結構了,此處只有一項,只有一個指針03B8h處。

從000003B8h偏移到結束都是sqlite_master表的實際數據了。當然這些數據也是有結構的。46h表示這條記錄有70個字節,除去其本身46,和后面的01是索引外,整個記錄剛好是70個字節,01索引后面都是payload負載數據了。

如法炮制,下面列出第二個B樹頁:

00000400h: 0D 00 00 00 02 03 E5 00 03 F3 03 E5 00 00 00 00 ; ......?.??...

00000410h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

這中間部分全部為零。省去!

000007d0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................

000007e0h: 00 00 00 00 00 0C 02 03 19 13 73 65 63 6F 6E 64 ; ..........second

000007f0h: 79 79 79 0B 01 03 17 13 66 69 72 73 74 78 78 78 ; yyy.....firstxxx

由于不是第一頁,所以不存在文件頭的100個字節了,一開始就是B樹頁頭結構了,這里有兩個指針03F3和03E5,其它的和上面一樣。整個數據庫管理系統就是準確無誤地對這個文件進行管理。

進一步的工作:只有數據多了,才能看出B樹組織的好處:查找,刪除,增加的快速!把這個文件變大再分析!

本文最后更新于 2023-3-21 15:27,某些文章具有時效性,若有錯誤或已失效,請在網站留言或聯系站長:[email protected]
·END·
站長網微信號:w17tui,關注站長、創業、關注互聯網人 - 互聯網創業者營銷服務中心

免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!

17站長網微信二維碼

始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!

掃一掃,關注站長網微信

大家都在看

熱門排行

最近更新

返回頂部
主站蜘蛛池模板: 精品久久99麻豆蜜桃666 | 99精品视频 | 国产成人拍精品免费视频爱情岛 | 99视频偷窥在线精品国自产拍 | 亚洲中文热码在线视频 | 亚洲网站视频在线观看 | 蜜芽在线播放免费人成日韩视频 | 国产精品1区2区 | 麻豆官网md.pub | 被老师按在办公桌吸奶头 | 男人有噶坏 | 99热久久这里只有精品视频 | 成人1000部免费观看视频 | 三级黄色高清视频 | 美国特级成人毛片 | 中文在线日韩亚洲制服 | 国产精品亚欧美一区二区三区 | 伊人久久大香线蕉综合bd高清 | 国产美女裸身网站免费观看视频 | 色欲国产麻豆一精品一AV一免费 | 国产探花在线精品一区二区 | 99久久精品互换人妻AV | 亚洲无线码一区在线观看 | 久久高清一本无码 | a亚洲在线观看不卡高清 | 99视频精品全部免费 在线 | 羞羞漫画视频 | 国产AV精品久久久毛片 | 妖精视频免费看 | 亚洲一区综合图区 | 100国产精品人妻无码 | 草草久久久亚洲AV成人片 | 2017必看无码作品 | 欧美囗交xx bbb视频 | 男人插曲女人身体视频 | 国产美女久久久久久久久久久 | 果冻传媒视频在线观看完整版免费 | 色翁荡熄月月 | 多男同时插一个女人8p | 亚洲午夜精品A片久久不卡蜜桃 | 久久这里只精品热在线18 |