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

17站長(zhǎng)網(wǎng)

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

2023-3-21 15:27| 查看: 2050 |來(lái)源: 互聯(lián)網(wǎng)

此分析稱(chēng)為簡(jiǎn)易版,因?yàn)楹竺孢計(jì)劃分析一個(gè)更復(fù)雜的數(shù)據(jù)庫(kù)文件,以深入理解SQLite數(shù)據(jù)庫(kù)B樹(shù)實(shí)現(xiàn)的結(jié)構(gòu),從簡(jiǎn)易的開(kāi)始不失為一種好的學(xué)習(xí)方法,這里的簡(jiǎn)易版本文 ...

此分析稱(chēng)為簡(jiǎn)易版,因?yàn)楹竺孢計(jì)劃分析一個(gè)更復(fù)雜的數(shù)據(jù)庫(kù)文件,以深入理解SQLite數(shù)據(jù)庫(kù)B樹(shù)實(shí)現(xiàn)的結(jié)構(gòu),從簡(jiǎn)易的開(kāi)始不失為一種好的學(xué)習(xí)方法,這里的簡(jiǎn)易版本文件是指大 小為2K字節(jié),即每個(gè)B樹(shù)頁(yè)1K字節(jié),共兩個(gè)B樹(shù)頁(yè),補(bǔ)充說(shuō)明一下,這里的B樹(shù)頁(yè)就是指經(jīng)典數(shù)據(jù)結(jié)構(gòu)書(shū)上所講的B樹(shù)節(jié)點(diǎn),在這里稱(chēng)為頁(yè)是因?yàn)镾QLite 在實(shí)現(xiàn)B樹(shù)時(shí)就是使用頁(yè)page的概念來(lái)組織的。創(chuàng)建方法如下:

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

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

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

然后退出,用UltraEdit打開(kāi)這個(gè)數(shù)據(jù)庫(kù)文件:

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))

這是第一個(gè)B樹(shù)頁(yè),這個(gè)B樹(shù)頁(yè)里存放了表sqlite_master的信息,這就是SQLite數(shù)據(jù)庫(kù)的系統(tǒng)表了。

下面分析一下這些二進(jìn)制的具體涵義,SQLite統(tǒng)一采用大端法來(lái)表示數(shù)據(jù),不同與一般intel機(jī)器的小端法了:

偏移地址 大小 涵義

0 16 "SQLite format 3/000"

16 2 400H=1024個(gè)字節(jié),每個(gè)頁(yè)面的字節(jié)數(shù)

18 2 0101H表示版本號(hào)而已

20 1 每頁(yè)末端的未用空間,這里為零表示數(shù)據(jù)都是從每頁(yè)最后一個(gè)字節(jié)開(kāi)始存放

21 1 最大負(fù)載分片數(shù),類(lèi)似與IP分片,一頁(yè)存不下,要分片

22 1 最小負(fù)載分片數(shù)

23 1 最小葉子負(fù)載分片數(shù)

24 4 文件修改計(jì)數(shù),用于實(shí)現(xiàn)并行訪(fǎng)問(wèn)

28 4 保留未用

32 4 第一個(gè)freelist頁(yè)

36 4 文件中的freelist頁(yè)數(shù)

40 60 這里未用

上面的這一百個(gè)字節(jié)稱(chēng)為數(shù)據(jù)庫(kù)文件的文件頭,這個(gè)文件頭只有第一個(gè)B樹(shù)頁(yè)才有,后面的每一個(gè)B樹(shù)頁(yè)都沒(méi)有這個(gè)結(jié)構(gòu),后面每一頁(yè)結(jié)構(gòu)都相同:

依次為:B樹(shù)頁(yè)頭結(jié)構(gòu),B樹(shù)指針結(jié)構(gòu),未用空間,B樹(shù)實(shí)際數(shù)據(jù)負(fù)載。

這里和經(jīng)典數(shù)據(jù)結(jié)構(gòu)書(shū)上的B樹(shù)結(jié)構(gòu)有些出入,這里的目的是實(shí)際應(yīng)用方便,而書(shū)上的結(jié)構(gòu)目的是解釋清楚B樹(shù)的原理。所以有些不同:

一般書(shū)上講的一個(gè)B樹(shù)頁(yè)的結(jié)構(gòu)為:指針,數(shù)據(jù),指針,數(shù)據(jù),指針,數(shù)據(jù),...,指針

而SQLite組織為:指針,指針,指針,...,指針,數(shù)據(jù),數(shù)據(jù),...數(shù)據(jù)。

第一個(gè)頁(yè)面中從00000060h行第五個(gè)字節(jié)開(kāi)始就表示B樹(shù)頁(yè)頭結(jié)構(gòu)了:

偏移地址 大小 涵義

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

1 2 第一個(gè)空閑塊的字節(jié)偏移量,這里為0

3 2 01,這個(gè)B樹(shù)頁(yè)存放的記錄數(shù)為1個(gè),即系統(tǒng)表中只存放了一條記錄,因?yàn)橹粍?chuàng)建了一個(gè)表tbl1

5 2 負(fù)載區(qū)首地址,03B8,往下看到000003b0h行那個(gè)46就是負(fù)載區(qū)的開(kāi)始了

7 1 分片數(shù),這里數(shù)據(jù)少,不考慮,所以為0

到0000006Bh偏移處B數(shù)頭結(jié)束了,接下來(lái)的就是B數(shù)指針結(jié)構(gòu)了,此處只有一項(xiàng),只有一個(gè)指針03B8h處。

從000003B8h偏移到結(jié)束都是sqlite_master表的實(shí)際數(shù)據(jù)了。當(dāng)然這些數(shù)據(jù)也是有結(jié)構(gòu)的。46h表示這條記錄有70個(gè)字節(jié),除去其本身46,和后面的01是索引外,整個(gè)記錄剛好是70個(gè)字節(jié),01索引后面都是payload負(fù)載數(shù)據(jù)了。

如法炮制,下面列出第二個(gè)B樹(shù)頁(yè):

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

由于不是第一頁(yè),所以不存在文件頭的100個(gè)字節(jié)了,一開(kāi)始就是B樹(shù)頁(yè)頭結(jié)構(gòu)了,這里有兩個(gè)指針03F3和03E5,其它的和上面一樣。整個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)就是準(zhǔn)確無(wú)誤地對(duì)這個(gè)文件進(jìn)行管理。

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

本文最后更新于 2023-3-21 15:27,某些文章具有時(shí)效性,若有錯(cuò)誤或已失效,請(qǐng)?jiān)诰W(wǎng)站留言或聯(lián)系站長(zhǎng):17tui@17tui.com
·END·
站長(zhǎng)網(wǎng)微信號(hào):w17tui,關(guān)注站長(zhǎng)、創(chuàng)業(yè)、關(guān)注互聯(lián)網(wǎng)人 - 互聯(lián)網(wǎng)創(chuàng)業(yè)者營(yíng)銷(xiāo)服務(wù)中心

免責(zé)聲明:本站部分文章和圖片均來(lái)自用戶(hù)投稿和網(wǎng)絡(luò)收集,旨在傳播知識(shí),文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請(qǐng)勿用于商業(yè)用途,如果損害了您的權(quán)利,請(qǐng)聯(lián)系我們及時(shí)修正或刪除。謝謝!

17站長(zhǎng)網(wǎng)微信二維碼

始終以前瞻性的眼光聚焦站長(zhǎng)、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領(lǐng)域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長(zhǎng)轉(zhuǎn)型升級(jí),為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質(zhì)的創(chuàng)業(yè)信息和品牌營(yíng)銷(xiāo)服務(wù),與站長(zhǎng)一起進(jìn)步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨(dú)!

掃一掃,關(guān)注站長(zhǎng)網(wǎng)微信

大家都在看

熱門(mén)排行

最近更新

返回頂部
主站蜘蛛池模板: 我与旗袍老师疯狂床震 | 亚洲人成77777在线视频 | 欧美日韩一级黄色片 | 寂寞夜晚看免费视频 | 国产在线一区观看 | 暖暖日本手机免费完整版在线观看 | 俄罗斯12一15处交 | 日本熟妇乱妇熟色A片蜜桃 日本熟妇多毛XXXXX视频 | 青青草国产自偷拍 | 日本高清免费在线观看 | 国产精品免费大片 | 国产精品夜夜春夜夜爽久久小 | 99视频在线观看免费视频 | 一级做a爰片久久毛片潮喷动漫 | 亚洲欧美一区二区三区蜜芽 | 亚洲精品成人AV在线观看爽翻 | 老湿机一区午夜精品免费福利 | 116美女写真成人午夜视频 | 我的好妈妈BD免费观看 | 久久精品亚洲热综合一本奇米 | 国产精品亚洲精品久久品 | 91精品欧美一区二区三区 | 国产激情视频在线播放 | 亚洲无码小格式 | 无码一区国产欧美在线资源 | 97精品在线观看 | 自拍 偷拍 亚洲 经典 | 亚洲 制服 欧美 中文字幕 | 无码不卡中文字幕在线观看 | 亚洲中文字幕一二三四区苍井空 | 韩国羞羞秘密教学子开车漫书 | 亚洲中文字幕乱码熟女在线 | 久久久午夜精品福利内容 | 别插我B嗯啊视频免费 | 妻中蜜在线播放 | 动漫人物差差差30分钟免费看 | 成人综合在线观看 | 国产永不无码精品AV永久 | 精品无码久久久久久久动漫 | 亚洲成a人片777777久久 | 绝色娇嫩美人妻老师 |