在头节点中,有一个位图记录用来描述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描述节点记录起始偏移量列表自身的起始地址。