数据页的空间划分

每个数据页共16KB的大小,划分为如下7个部分
image.png
以下为各空间的用途

名称 中文含义 大小 描述
File Header 文件头 38B 页的通用信息
Page Header 页面头 56B 数据页的专有信息
Infimum+Supermum 最小记录和最大记录 26B 两个虚拟的行记录
User Records 用户记录 不确定 实际已用的空间
Free Space 空闲空间 不确定 页中未使用的空间
Page Directory 页面目录 不确定 页中某些记录的相对位置
File Trailer 文件尾部 8B 校验页是否完整

行记录的结构

User Records中的每个行记录包含以下部分的信息
image.png

而其中的记录头信息又包含如下内容,但具体每个位置表示什么可以不需要了解这么清楚
image.png

行记录之间的关系

在User Records中,一个数据页的多个行记录是由单向链表进行关联的,可以简单理解为每行按照主键值从小到大用单向链表连接

其中的最小记录和最大记录是由页构造的用于作为单向链表头尾的节点,分别指向/被指向最小/最大记录行
Infimum+Supermum和User Records中数据行的关系图
image.png

行记录与数据页的关系

Page Directory相当于跳表,记录某些的偏移量(通常是1~8条),用于避免数据较多时需要沿链表一直寻找行记录。而槽位就相当于跳表中的目录索引
image.png

数据页与数据页的关系

数据页的File Header会存储上一个页和下一个页的引用,所以多个数据页是通过双向列表来连接的
image.png

File Trailer

数据页内存中被修改后,会同步到磁盘,但如果中间发生中断,会造成数据不一致。为了解决这个问题,File HeaderFile Trailer都有一个校验值,当修改内容校验值会改变。如果发现校验值不一致,则说明同步发生了错误。