`
iihero
  • 浏览: 257707 次
  • 性别: 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
分享到:
评论

相关推荐

    SQLite权威指南(第2版)

    创建和管理数据库文件,定义表结构,以及操作数据的基本SQL语句(如CREATE、INSERT、SELECT、UPDATE、DELETE)是SQLite入门的基础。 2. **事务处理**:SQLite支持ACID(原子性、一致性、隔离性和持久性)事务,确保...

    SQLite权威指南第二版源代码

    1. **SQLite 数据库结构**:SQLite数据库由一个或多个以`.db`为扩展名的文件组成,这些文件包含了表、索引、触发器、视图等数据库对象。 2. **SQL 语法**:源代码中会展示如何使用SQL语句创建、查询、更新和删除...

    SQLite权威指南第二版

    4. **存储引擎与文件格式**:深入解析SQLite的数据存储方式,包括数据库文件结构、wal模式和journal模式,使读者理解SQLite内部的工作机制。 5. **扩展功能与编程接口API**:介绍如何通过SQLite的C语言API与其他...

    sqlite指南的翻译版本讲解

    本翻译版的"SQLite指南"旨在帮助读者深入理解SQLite的工作原理和使用方法,涵盖的内容包括但不限于以下几点: 1. 数据库基础:首先,我们需要了解关系型数据库的基本概念,如表、字段、记录和索引。SQLite支持SQL...

    SQLite 权威指南

    《SQLite 权威指南》是一本深入探讨SQLite数据库系统的专业书籍。SQLite是一个开源、轻量级的嵌入式关系...通过阅读本书,你将能够充分利用SQLite这一强大的数据库工具,为你的应用程序提供可靠的数据存储和管理支持。

    SQLite编程详细指南

    SQLite允许用户编写自定义的VFS(虚拟文件系统)和函数,以适应特定的存储需求或功能扩展。 通过学习这份"SQLite编程详细指南",你可以掌握SQLite的使用技巧,无论是在开发移动应用还是嵌入式系统,都能游刃有余地...

    SQLite权威指南中文版pdf.rar

    在性能优化方面,《SQLite权威指南》会深入探讨索引的使用,包括唯一索引、复合索引和覆盖索引,以及如何通过EXPLAIN命令分析查询计划,提升查询速度。同时,也会讲解如何设计合理的数据结构,以达到最佳的性能表现...

    SQLite权威指南 chm

    3. **SQL语法**:SQLite支持标准的SQL语言,本章将详细介绍SQL语句的使用,包括数据查询(SELECT)、数据插入(INSERT)、数据更新(UPDATE)和数据删除(DELETE)等操作,以及视图、索引、触发器和存储过程等高级...

    SQLite权威指南(第二版)

    接着,书中详细阐述了SQLite的架构和设计原则,使读者能够理解其工作原理,包括事务处理、存储结构以及查询优化。 SQLite的关键特性包括: 1. **嵌入式**:无需独立服务器进程,可以直接在应用程序中运行,减少了...

    SQLite权威指南.rar

    这使得SQLite能处理复杂的数据结构,如表格、索引和视图,支持多种关系操作,如联接、子查询等。 3. 跨平台兼容性:SQLite可以在各种操作系统上运行,包括Windows、Linux、Mac OS X以及各种嵌入式操作系统。它的可...

    SQLite权威指南(第2版).

    SQLite是一款开源、轻量级的关系型数据库管理...通过阅读《SQLite权威指南(第2版)》,读者不仅可以掌握SQLite的核心概念和技术,还能获得实际开发中的实用技巧和经验,从而更加高效地利用SQLite进行数据存储和管理。

    SQLite权威指南 pdf,已排版

    SQLite的架构师和主要代码编写者Richard Hipp强调了SQLite的自由和无限制的使用方式,并承诺保持公共API和文件格式的向上兼容性,确保用户可以无缝迁移到新版本,而无需大量代码修改或额外的调试工作。 SQLite的...

    SQLite权威中文指南书籍 sqlite强大可视化方便工具

    SQLite是一款轻量级的、开源的、自包含的数据库引擎,它无需单独的服务器进程,可以直接嵌入到各种应用软件中。...通过深入学习和实践,你将能够充分利用SQLite的潜力,解决各种数据存储和管理问题。

    sqlite+帮助文件

    `SQLite学习手册_中文全本.pdf` 是一本全面介绍SQLite的中文教程,涵盖了从基础概念如表的创建、数据类型、SQL语法,到高级特性如事务处理、索引、视图、触发器,以及存储过程等内容。通过阅读这本书,读者可以系统...

    SQLite软件及使用指南

    SQLite3的使用涵盖了许多方面,包括但不限于创建数据库、创建表、插入数据、查询数据、更新和删除数据、事务处理、索引和视图的使用、存储过程的编写等。它的API简洁而强大,使得开发者能方便地在各种应用中集成...

    sqlite程序和Windows二进制文件操作文档.zip

    6. **sqldiff.exe**:这是一个比较SQLite数据库结构的工具,可以用来找出两个数据库之间的差异,包括表、索引、触发器等对象的差异。这对于版本控制、数据库升级或者同步不同环境的数据库非常有帮助。 在Windows上...

    SQLite指南.zip

    通过“SQLite指南.rar”这个压缩包,你可能获得的资源可能包括SQLite的官方文档、教程、示例代码、数据库管理工具,甚至是进阶主题如性能优化、事务处理策略和错误排查等内容。这些资源将帮助你更深入地理解和掌握...

Global site tag (gtag.js) - Google Analytics