`
iihero
  • 浏览: 249557 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQLite指南(0) 表和索引的文件存储结构

阅读更多
SQLite采用的是B+树来存储表中的索引和数据。
B树的键及其值既存储在内部节点上,也存储在叶节点上,所有的叶节点具有相同的深度。
B+树作了些微改变,键和数据会存储到叶节点上,并且按照键值排好序。而内部节点只存储键值。相当于有两条查找路径。

SQLite从根叶开始创建B+树,一般从页1开始。它以独立的页来存储树节点,每页一个节点,这些页要分内部页还是叶子页。对于每个节点,任何项(数据)及其键值组合成一个payload, 每页都会预设一个payload值,当实际的payload超过此值时,超出的字节就会填充到溢出页,多余的payload会依次存储到溢出页形成的链表里。内部页和叶子页都可以有溢出页。

SQLite的页结构:
SQLite数据库文件是由固定大小的页组成的。 也就是说该文件大小肯定是页大小的整数倍。其中的B+树模块管理着所有的页。每一个页,要么是普通页(内部页或者叶子页),要么是溢出页,要么是自由页。

1. 页结构:
主要有4部分, 页头(内部页12字节,叶子页只要8字节), 单元指针数组,单元内容区,未分配空间区
页头构成:
起始地址:
0 (1字节), Flags. 1: intkey, 2: zerodata, 4: leafdata, 8: leaf
1 (2字节), 第一个自由块的起始位移
3 (2字节), 该页的单元数
5 (2字节), 单元内容区的第一个字节的位移
7 (1字节), 自由区的字节数
8 (4字节), 右孩子节点的地址(Ptr(n)), 对叶子节点,该值被忽略

对于第一个字节来说,是一个标志值,如果leaf为true, 表明它是叶子节点。如果zerodata为true,  表明该页只存储key值,不存储数据,如果intkey为true, 表明这里的key是一个整数,会存储到单元的头,而不是放到payload区。

Cell(单元)会存到页里最末尾的高地址区域里,它们会向页的开始方向增长。单元指针数组从页头末尾的第一个字节开始。每个指针是一个2字节的偏移地址(从页头开始)。 这些指针都是按照键值排好序的。

经过随机的insert, delete操作之后,页中的单元和空闲空间会变得分散。在单元内容区里的可用空间会被收集成自由块链表,以地址升序排列。该链表的头指针会从页头, 偏移值为1开始,每个自由块最少4字节大小。头4个字节存储着控制信息。头2个字节指向下一个自由块的偏移(值为0,意味着没有下一个自由块),后两个字节表示本自由块的空间大小。一个页中所有碎片(可用字节)大小,会记录在页头的第7字节处。最大255。任何连续只有3个或更少字节的空间将被忽略。当碎片达到最大值之前,碎片会被合并。
单元内容区的第1个字节会在页头的第5个节处进行记录。该值充当内容区域和未分配空间的边界。

单元:
4字节,  左孩子的页号, 如果leaf flag设置为true,则忽略。
var (1-9), 数据字节数,如果zerodata为true,则忽略。
var (1-9), 键字节数,或者是键本身(如intkey为true)
* payload
4 ,   溢出链的第1页,没有溢出则忽略。

(To be cont...)
2
0
分享到:
评论

相关推荐

    SQLite3源程序分析+文件存储结详细分析.rar

    SQLite3源程序分析+文件存储结详细分析.rar SQLite3源程序分析+文件存储结详细分析.rar SQLite3源程序分析+文件存储结详细分析.rar SQLite3源程序分析+文件存储结详细分析.rar SQLite3源程序分析+文件存储结详细分析...

    sqlite物理文件结构

    sqlite数据库文件的格式和内部结构的分析,对于想深入了解sqlite的很有帮助

    如何在SQLITE中使用时间字段作索引

    详细讲述了在SQLITE中使用时间字段作索引进行SQL插入及查询操作的方法

    sqlite表结构自动更新

    继承自SQLiteOpenHelper 类,当数据库的数据或表结构有变动时,可以自动更新数据库,免去还得卸载程序,或者数据库更名的问题

    SQLite权威指南第二版源代码

    SQLite权威指南第二版源代码。包含书中实例中的数据库和表的导入文件和各个章节的代码实例。

    完整版生成Sqlite表结构.rar

    完整版生成Sqlite表结构.rar

    C# 生成sqlite文件

    C#代码生成sqlite.db文件,可筛选表。

    SQLite权威指南(第2版)

    SQLite权威指南(第2版

    Sqlite权威指南,第二版

    《SQLite权威指南(第二版)》首先从 SQLite 最初起源、特性、设计理念、实际应用讲解开始,逐步深入、全面地介绍了在各个平台如何使用SQLite。接着,介绍SQLite 的一般SQL 和高级功能的SQL,采取举例说明,使得本书...

    易语言模块生成Sqlite表结构.rar

    易语言模块生成Sqlite表结构.rar 易语言模块生成Sqlite表结构.rar 易语言模块生成Sqlite表结构.rar 易语言模块生成Sqlite表结构.rar 易语言模块生成Sqlite表结构.rar 易语言模块生成Sqlite表结构.rar

    SQLite权威指南 第二版 pdf

    《sqlite权威指南(第二版)》首先从 sqlite 最初起源、特性、设计理念、实际应用讲解开始,逐步深入、全面地介绍了在各个平台如何使用sqlite。接着,介绍sqlite 的一般sql 和高级功能的sql,采取举例说明,使得本书...

    sqlite 文件结构

    sqlite 文件结构 感觉非常的不错 ……转载的……

    SQLite 权威指南

    SQLite 权威指南.rar SQLite 权威指南.rar SQLite 权威指南.rar SQLite 权威指南.rar

    sqlite权威指南(第二版)源代码

    The Definitive Guide to SQLite(Second Edition), Grant Allen, Mike Owens sqlite 权威指南(第二版)源代码 包括了书中例子所需的数据库文件,以及所有的代码。

    SQLite权威指南_v100

    SQLite权威指南_v100,SQLite很详细的实例指南

    SQLite.net 开发指南

    SQLite.net 开发指南 不错的指导书

    SQLite数据库 sqlitedll库文件 sqlite驱动JAR包 sqlite工具

    这里的path为指定到SQLite数据库文件的路径,例如: jdbc:sqlite://dirA/dirB/dbfile jdbc:sqlite://DRIVE:/dirA/dirB/dbfile jdbc:sqlite://COMPUTERNAME/shareA/dirB/dbfile 三、下面是使用SQLite的两段代码以...

    SQLite权威指南(英文版)

    接着,介绍SQLite 的一般SQL 和高级功能的SQL,采取举例说明,使得本书内容生动有趣。然后,全面介绍了各种语言如何与SQLite 进行编程交互,重点介绍SQLite 原生语言C 语言中的API,使得使用者可以不管扩展SQLite 的...

    SQLite数据库文件自收缩_sqlite3_

    通过相关配置,删除数据后,实现SQLite3设置数据库文件自动收缩

Global site tag (gtag.js) - Google Analytics