亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQLite > 正文

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

2024-09-07 00:09:55
字體:
來源:轉載
供稿:網友
此分析稱為簡易版,因為后面還計劃分析一個更復雜的數據庫文件,以深入理解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樹組織的好處:查找,刪除,增加的快速!把這個文件變大再分析!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一本色道久久88综合亚洲精品ⅰ| 国产999精品久久久影片官网| 亚洲视频网站在线观看| 亚洲欧美成人在线| 欧美一区深夜视频| 久久99青青精品免费观看| 成人有码在线视频| 久久精品99久久久香蕉| 日韩在线观看你懂的| 久热精品在线视频| 久久久人成影片一区二区三区| 久久久久一本一区二区青青蜜月| 97碰碰碰免费色视频| 2019国产精品自在线拍国产不卡| 国产精品女人网站| 久热在线中文字幕色999舞| 亚洲伊人一本大道中文字幕| 久久99热精品| 中文字幕亚洲情99在线| 亚洲精品一区在线观看香蕉| 欧美激情精品久久久久| 国产精品永久免费观看| 久久亚洲私人国产精品va| 日韩电影大全免费观看2023年上| 精品久久久久久久久久| 在线观看91久久久久久| 欧美激情亚洲一区| 亚洲无亚洲人成网站77777| 97avcom| 日韩欧美大尺度| 亚洲国产精品小视频| 亚洲精品电影网站| 日韩精品www| 亚洲理论电影网| 久久天天躁夜夜躁狠狠躁2022| 日韩精品免费综合视频在线播放| 92版电视剧仙鹤神针在线观看| 日韩精品亚洲元码| 在线精品视频视频中文字幕| 精品国产网站地址| 日韩毛片在线观看| 国产精品第10页| 国产三级精品网站| 69**夜色精品国产69乱| 欧美精品aaa| 91精品视频网站| 亚洲欧洲在线免费| 国产精品中文久久久久久久| 国产精品高潮视频| 国产黑人绿帽在线第一区| 亚洲美女av电影| 国产精品福利在线| 久久99久久亚洲国产| 久久精品国产欧美亚洲人人爽| 久久久久亚洲精品成人网小说| 亚洲激情久久久| 国产欧美日韩亚洲精品| 国产精品日韩欧美综合| 亚洲成人网在线观看| 欧美特黄级在线| 亚州国产精品久久久| 美日韩精品免费观看视频| 一本大道久久加勒比香蕉| 最近2019年手机中文字幕| 岛国精品视频在线播放| 伊人久久免费视频| 亚洲欧美制服中文字幕| 国产色综合天天综合网| 日韩国产激情在线| 亚洲国产古装精品网站| 自拍偷拍亚洲一区| 亚洲小视频在线观看| 91在线免费视频| 欧美激情xxxx性bbbb| 国产一区二区成人| 亚洲第一精品久久忘忧草社区| 久久久久这里只有精品| 亚洲国语精品自产拍在线观看| 久久精品影视伊人网| 国产69精品久久久久久| 久久躁日日躁aaaaxxxx| 91精品国产99久久久久久| 国产日韩欧美在线观看| 亚洲www在线| 欧美性猛交xxxx免费看漫画| 欧美日韩亚洲视频一区| 亚洲一区二区在线播放| 隔壁老王国产在线精品| 黑人巨大精品欧美一区二区一视频| 狠狠久久五月精品中文字幕| 日韩中文字幕在线| 国产亚洲视频中文字幕视频| 欧美人与性动交a欧美精品| 国产不卡视频在线| 国产精品香蕉在线观看| 欧美一级黄色网| 国产精品极品美女在线观看免费| 日韩视频一区在线| 日韩成人激情影院| 欧美wwwwww| 精品国产乱码久久久久酒店| 欧美视频在线观看 亚洲欧| 一区二区三区回区在观看免费视频| 青青a在线精品免费观看| 久久久国产精品亚洲一区| 91在线直播亚洲| 亚洲人成在线观| 国产69久久精品成人看| 欧日韩在线观看| 亚洲第一av在线| 姬川优奈aav一区二区| 久国内精品在线| 91久久精品在线| 欧美诱惑福利视频| 日韩av在线精品| 欧美极品少妇xxxxx| 亚洲免费人成在线视频观看| 91地址最新发布| 久久伊人91精品综合网站| 最新国产精品拍自在线播放| 国产精品直播网红| 国产亚洲精品高潮| 欧美国产日韩中文字幕在线| 欧美视频一区二区三区…| 精品调教chinesegay| 欧美午夜xxx| 欧美黄色性视频| 国外成人免费在线播放| 91香蕉国产在线观看| www.午夜精品| 少妇高潮久久77777| 91免费国产网站| 中文字幕亚洲欧美日韩在线不卡| 国产成人涩涩涩视频在线观看| 国产va免费精品高清在线观看| 久久99热这里只有精品国产| 国产精品久久久久久久久久久新郎| 欧美在线www| 久久久亚洲国产天美传媒修理工| 国产免费亚洲高清| 深夜福利日韩在线看| 午夜伦理精品一区| 亚洲第一黄色网| 色综合91久久精品中文字幕| 亚洲国产精品久久久久秋霞不卡| 国产一区二区精品丝袜| 亚洲人成电影网站| 久久影视免费观看| 成人中文字幕在线观看| 国产成+人+综合+亚洲欧美丁香花| 亚洲aⅴ日韩av电影在线观看| 欧美午夜久久久| 亚洲女同精品视频| 欧美性xxxxx| 日韩中文字幕国产| 777午夜精品福利在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 欧美精品日韩三级| 亚洲高清一区二| 国产精品久久久久久久久久| 亚洲精品丝袜日韩| 亚洲国产精品成人va在线观看| 九九九久久国产免费| 国产精品久久久久77777|