在头节点中,有一个位图记录用来描述B−树中节点的使用和空闲情况。如果B−树中的节点太多,位图记录就可能管理不了这么多节点,这时就需要位图节点管理剩下的节点了。

位图节点的地址由头节点描述,在头节点描述符中的参数“第一个位图节点的节点号”就是用来描述位图节点起始地址的。

位图节点的结构很简单,由三部分构成,它们是节点描述符、位图记录、节点记录起始偏移量列表。

(1)位图节点的描述符

位图节点的节点描述符同样占用节点的前14个字节,其结构见表6-24。

表6-24 位图节点描述符的结构

字节偏移(相对偏移) 字段长度(字节) 字段名和定义
0x00~0x03 4 下一个位图节点的节点号,如果没有下一个,则置0
0x04~0x07 4 上一个节点的节点号,位图节点中该值总为0
0x08~0x08 1 节点类型,位图节点中该值为2
0x09~0x09 1 本节点在B−树中的高度
0x0A~0x0B 2 该节点中的记录数,位图节点中该值总为1
0x0C~0x0D 2 保留

(2)位图节点的位图记录

位图记录是位图节点中唯一的一个节点记录,用来描述头节点中的位图记录管理范围之外的数据。该位图记录的大小等于节点大小减去节点描述符占用的14个字节,减去节点记录起始偏移量列表占用的4个字节,再减去2个空闲的字节,也就是节点字节数减去20。这样就使位图记录的字节数为4的倍数,因为位图记录起始于节点的14偏移处,而14并不是4的倍数,就只能通过位图记录的末尾进行调节。

(3)位图节点的节点记录起始偏移量列表

位图节点的节点记录起始偏移量列表包含两个表项,表项0描述位图记录的起始地址,即14偏移处;表项1描述节点记录起始偏移量列表自身的起始地址。