页是SinoDB的最小I/O单元,他的布局结构包含:页眉、数据、槽表、时间戳。具体布局请见下图:
- 页眉(Page header)
页眉占据页面上的前24个字节。它包含页面的位置、类型和当前容量等信息。SinoDB页眉结构由9个元素组成,如下图:
元素 | 字节 | 描述 |
---|---|---|
pg_offset | 4 | 页在块(chunk)中的偏移位置 |
pg_chunk | 2 | 块(chunk)编号 |
pg_cksum | 2 | 用于检查页的一致性 |
pg_nslots | 2 | 槽表的最大活动数 |
pg_flags | 2 | 页标识 |
pg_frptr | 2 | 指向页上最后一个槽的槽尾 |
pg_frcnt | 2 | 页的可用字节数 |
pg_next | 4 | 对于索引页,指向同一级别的下一个节点 |
pg_prev | 4 | 对于索引页,指向同一级别的下一个节点 |
-
槽表(Slot table)
槽表用于使数据库服务器能够快速查找页上的数据。它是一系列的4字节条目,从时间戳的起始位置开始,逐渐向页头的方向增长。在页上的每个槽表是描述表的一个条目,该槽表可以包含数据行或其他结构。每个槽表由两部分组成:槽的第一个字节的位置和槽的长度。槽表条目充当一种指针,允许直接、随机访问页面上的槽。 -
时间戳
页尾的时间戳用于与其他页进行比较,以验证页一致性。每次修改页内容时,都会在页尾放置一个时间戳。然后可以使用时间戳与其他面进行比较,以确定哪个页是最近更新的。