YashanDB通过提供逻辑存储结构,使数据库存储空间管理更加灵活快捷。与物理存储结构不同,逻辑存储结构对操作系统是透明的,所有的访问都需要通过数据库提供的接口。
段页式存储结构
YashanDB段页式存储主要包括:
- 块(Block):数据存储的最小逻辑单元,例如数据块、索引块、undo块等。
- 区(Extent):由一组物理上连续的数据块组成,可以提高空间管理的效率。
- 段(Segment):每个数据库对象至少包含一个数据段。空间上由若干数据区组成。包含表段、索引段、 回滚段等不同类型的段。
- 表空间(Tablespace):数据库划分的逻辑单元,包含若干数据库对象,例如表、索引、视图等。
段页式存储结构不同部分之间的关系如下图所示,其中Data Block与物理存储结构中数据文件的物理数据库一一对应。
块
数据块是YashanDB最小的逻辑存储单元,也是I/O的最小单位,数据块大小由参数DB_BLOCK_SIZE决定。YashanDB支持8K、16K、32K三种不同大小的数据块。
块类型
YashanDB包含不同用途、不同类别的块,常见的块类型包括:
-
HEAP Block:用于存储heap表数据的块。
-
BTree Block:用于存储btree索引数据的块。
-
undo Block:用于存储历史版本数据的块。
-
Space Head Block:表空间头的块。
-
LOB Block:用于存储大对象类型的块。
-
Xact Block:用于存储事务信息的块。
块格式
以HEAP数据块为例, 一个数据块包含以下几部分:
-
块头:数据块的物理位置信息,块类型等信息。
-
HEAP块头:数据块上的行数,事务条目数,空闲空间信息。
-
行数据:以行为单位组织的数据。
-
空闲空间:页面上可以用来写入数据的连续空间。
-
行目录:描述每个行在数据块上的位置。
-
事务:描述更新数据块的事务信息。