海山数据库(He3DB)源码详解:海山PG 表和元组的组织方式(1)
一、概述
PostgreSQL是一种开源的关系型数据库管理系统,具有强大的功能和可靠性。在PostgreSQL数据库中,表和元组是数据组织的基础单元。其中,表是PG数据库中存储数据的逻辑结构,由多个列(Column)和行(Row)组成。列代表了数据字段,而行则代表了一条条的数据记录。每个表都有其独特的属性,如主键(Primary Key)、外键(Foreign Key)、索引(Index)等。主键用于唯一标识表中的一条记录,外键用于建立表与表之间的关联,索引则用于提高查询效率。在PostgreSQL中,元组通常指的是表中的一行数据,即一条记录。元组包含了该记录在表中所有字段的值,这些字段值对应于表中的列。每个字段值都有其特定的数据类型,如整数、浮点数、字符串等。在物理存储上,元组被存储在表文件的页(Page)中。每个页包含了多个元组,并且这些元组按照创建顺序或特定的存储策略被组织在一起。
在PostgreSQL中,一个表中的元组按照创建顺序依次插入到表文件中。这样的表文件即堆文件,按照功能可分为四类。而其中的元组数据信息主要通过设计的元组头部信息来进行多版本并发控制、数据可见性判断等操作。
二、表和元组的组织方式
PostgreSQL中的表和元组通过特定的组织方式来提高存储效率和查询性能。

1、堆文件组织:
PostgreSQL使用堆文件(Heap File)来存储表数据。堆文件是一种无序的数据存储结构,其中的元组按照创建顺序或VACUUM操作后的空闲空间顺序被插入。- 堆文件由多个页组成,每个页包含了多个元组。页的大小通常是固定的(如8KB),并且页内元组的存储顺序是连续的。
为了管理页内的空闲空间,PostgreSQL为每个页维护了一个页头(Page Header),其中包含了关于页的一般信息,如空闲空间指针、特殊空间指针等。
2、行指针和索引:
- 在堆文件中,每个元组都通过行指针(
Item Pointer)来定位。行指针包含了元组在页内的偏移量和长度信息,使得系统能够快速找到并访问元组。 - 为了提高查询效率,
PostgreSQL还支持索引机制。索引是一种特殊的数据结构,用于存储表中元组的键值对,并允许系统根据键值快速定位元组。
3、存储管理:
- PostgreSQL的存储管理由SMGR(
Storage Manager)提供统一接口。SMGR负责处理表的物理存储,包括文件的创建、读取、写入和删除等操作。 - 为了优化存储性能,
PostgreSQL还采用了空闲空间映射表(FSM)和可见性文件映射表(VM)等机制来管理页内的空闲空间和元组的可见性。
4、特殊堆文件:
- 除了普通的堆文件外,
PostgreSQL还支持其他类型的堆文件,如临时堆、序列堆和TOAST表等。这些特殊堆文件在功能和用途上有所不同,但底层文件结构却与普通堆文件相似。
三、数据结构设计
1、页面头部——HeapTupleHeaderData
Page头定义在PageHe

最低0.47元/天 解锁文章
737

被折叠的 条评论
为什么被折叠?



