没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
14页
Btree是为磁盘存储而优化了的一种树结构,其一般性说明可参考各类《数据结构》教材。根据实现方法的不同,Btree又分为很多类型。在SQLite中,存储表数据用的是B+tree,存储表索引用的是B-tree。由于历史原因,SQLite在3.0版以前只使用B-tree,从3.0版开始,才对表数据使用了B+tree。因此,在SQLite的官方文档中,有时B-tree表示存储表索引的B-tree,有时又是两种Btree的统称
资源推荐
资源详情
资源评论
Contents
1 概念介绍..........................................................................................................................................1
1.1 Btree、B-tree 和 B+tree:...................................................................................................1
1.2 auto-vacuum 数据库:.........................................................................................................3
1.3 数据库映像、数据库文件和日志文件:..........................................................................3
2 数据库存储结构..............................................................................................................................3
2.1、数据库头结构....................................................................................................................3
2.2 、sqlite_master 表.................................................................................................................4
2.3、页结构................................................................................................................................5
2.3.1.页结构总体概述........................................................................................................5
2.3.2.页头结构分析............................................................................................................6
2.3.3 表数据存储格式(B+Tree)....................................................................................7
2.3.3.1 B+tree 格式介绍.............................................................................................7
2.3.3.2 B+tree 内部页格式分析.................................................................................7
2.3.3.3 B+ tree 叶子页格式分析................................................................................9
2.3.4 索引数据存储格式(B-Tree)..............................................................................12
2.3.4.1 索引内部页...................................................................................................12
2.3.4.2 索引叶子页...................................................................................................13
3 附录................................................................................................................................................13
3.1 可变长整数.........................................................................................................................13
3.2 字段的数据类型和宽度说明.............................................................................................14
3.3 参考资料.............................................................................................................................14
1 概念介绍
1.1 Btree、B-tree 和 B+tree:
Btree 是为磁盘存储而优化了的一种树结构,其一般性说明可参考各类《数据结构》教材。
根据实现方法的不同,Btree 又分为很多类型。在 SQLite 中,存储表数据用的是 B+tree,
存储表索引用的是 B-tree。由于历史原因,SQLite 在 3.0 版以前只使用 B-tree,从 3.0 版开
始,才对表数据使用了 B+tree。因此,在 SQLite 的官方文档中,有时 B-tree 表示存储表索
引的 B-tree,有时又是两种 Btree 的统称
1
B-树
B+树
2
1.2 auto-vacuum 数据库:
一般情况下,当一个事务从数据库中删除了数据并提交后,数据库文件的大小保持不变。
即使整页的数据都被删除,该页也会变成“空闲页”等待再次被使用,而不会实际地被从数
据库文件中删除。执行 vacuum 操作,可以通过重建数据库文件来清除数据库内所有的未
用空间,使数据库文件变小。但是,如果一个数据库在创建时被指定为 auto_vacuum 数据
库,当删除事务提交时,数据库文件会自动缩小。使用 auto_vacuum 数据库可以节省空间,
但却会增加数据库操作的时间,有利有弊。Auto_vacuum 数据库需要使用附加的格式,如
指针图页,本文重点讨论非 auto_vacuum 数据库。
1.3 数据库映像、数据库文件和日志文件:
“数据库映像”是 SQLite 数据库的磁盘映像。SQLite 数据库存储在单一的“数据库文件”中。
一般情况下,数据库映像和数据库文件是一致的,可以理解为数据库映像就是数据库文件
的内容,但有例外。如果事务对数据库进行了修改,这些修改会暂存在“日志文件”中,此
时可以认为数据库映像分布在数据库文件和日志文件两个文件中。日志文件有自己的格式
本文第 3 章专门介绍。
从逻辑上来说,一个 SQLite 数据库文件由多个多重 Btree 构成。每个 Btree 存储一个表的数
据或一个表的索引,索引采用 B-tree,而表数据采用 B+tree,每个 Btree 占用至少一个完整
的页,每个页是 Btree 的一个结点。每个表或索引的第 1 个页称为根页,所有表或索引的根
页编号都存储在系统表 sqlite_master 中,表 sqlite_master 的根页为 page 1
2 数据库存储结构
2.1、数据库头结构
数据库中第一个页(page 1)永远是 Btree 页。Page 1 的前 100 个字节是一个对数据库文件进
行描述的“文件头”。它包括数据库的版本、格式的版本、页大小、编码等所有创建数据库
时设置的永久性参数。关于这个特殊文件头的文档在 btreeInt.h 中,具体格式如下:
偏移量 大小 说明
0 16 头字符串,如果不改源程序,此字符串永远是"SQLite format 3"。
16 2 页大小(以字节为单位)。
18 1 文件格式版本(写)。对于 SQLite 的当前版本,此值为 1。如果该值大
于 1,表示文件为只读。SQLite 将来版本对此域的规定可能改变。
3
剩余13页未读,继续阅读
whln669
- 粉丝: 1
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- caesium-image-compressor-2.7.1-win-portable.zip
- mybatis详细介绍,特点,特性,用途,使用方法,学习方法文档
- 3GPP Release-06 description
- 计算机网络综合实训范例及要求1.docx
- matplotlib-3.9.0-pp39-pypy39-pp73-macosx-11-0-arm64.whl
- 光刻详细介绍,特点,特性,用途,使用方法,学习方法文档
- MyBatis的插件机制简介.pdf
- vue考试33333333333
- 3GPP Release-05 description
- 2024全新Thinkphp聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能/全开源运营版本
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页