跳转至

2.2 记录页面的设计模式-定长记录

记录存储格式

对于定长记录来说,记录的各列属性具有固定的长度,我们提供一种 (NULL位图, 各列数据) 的方式进行储存。以0.2提到的course表为例:

NULL位图 (1B) id (4B) name (32B) credit (4B)

NULL位图长度为 ⌈列数/8⌉ 字节,即每列一位储存该列是否为空。在解读时,记录的列数以及各列长度属于表的元数据。

页面布局

可以将页 (如:4KB) 划分为页头 (如:64B) 和数据两部分,后者可以按照记录长度划分为一个个槽,并在页头使用位图储存每个槽是否空闲。在插入记录寻找空闲槽时,只需要对位图进行处理;在删除记录时要对位图进行维护。在根据槽号访问记录时还需要记录的长度,该信息可以存储在页头,也可以由表的各列长度计算得到。

空闲空间管理

由于记录长度固定,所以只需要区分页面是否有空闲槽即可。可以维护两个链表分别由空闲页和满页组成,邻居页号可以在页头中存储,链表头页号可以作为表的元数据存储。

Authors: Congyuan Rao (6.25%), Zhaoyan Sun (93.75%)