PostgreSQL存储管理体系结构学习笔记2

devtools/2025/3/14 10:00:47/

1.表和元组的组织方式

在PostgreSQL中,同一个表中的元组按照创建顺序依次插入到表文件中。元组之间不进行关联,这样的表文件称之为堆文件。PostgreSQL系统中包含了四种堆文件:普通堆,临时堆,序列,TOAST表。尽管这几种堆文件功能各异,但在底层的文件结构却是相似的:每个堆文件都是由多个文件块组成,在物理磁盘中的存储形式如下图所示:

其中PageHeaderData是长度为20字节的页头数据,包含文件块的一般信息

Linp是ItemIdData类型的数组,ItemIdData类型由lp_off、lp_flags和lp_len三个属性组成。

Freespace是指未分配的空间。

Special space是特殊空间,用于存放与索引方法相关的特定数据。

2.磁盘管理器

磁盘管理器是SMGR的一种具体实现,它对外提供了管理磁盘介质的接口,其主要实现在文件md.c中。磁盘管理器并非对磁盘上的文件直接进行操作,而是通过VFD机制来进行文件操作。

3.VFD机制

在操作系统中,当一个进程创建或是打开一个文件时,操作系统会为该文件分配一个唯一文件描述符,并通过该文件描述符来唯一标识和操作该文件。由于每个操作系统都对一个进程能打开的文件数加以限制,因此进程能获得的文件描述符是有限的。对于经常需要打开很多文件的数据库进程来说,很容易就会超过操作系统对于文件描述符数量的限制。为了解决这个问题,在PostgreSQL中使用了虚拟文件描述符机制(VFD)。以下为Vfd的数据结构:

typedef struct vfd

{

    int         fd;             /* current FD, or VFD_CLOSED if none */

    unsigned short fdstate;     /* bitflags for VFD's state */

    ResourceOwner resowner;     /* owner, for automatic cleanup */

    File        nextFree;       /* link to next free VFD, if in freelist */

    File        lruMoreRecently;    /* doubly linked recency-of-use list */

    File        lruLessRecently;

    off_t       fileSize;       /* current size of file (0 if not temporary) */

    char       *fileName;       /* name of file, or NULL for unused VFD */

    int         fileFlags;      /* open(2) flags for (re)opening the file */

    mode_t      fileMode;       /* mode to pass to open(2) */

} Vfd;


http://www.ppmy.cn/devtools/166993.html

相关文章

Operator <=> (spaceship operator)

operator <>动机 在C20以前定义比较运算符&#xff1a;其他比较运算符基于<和实现 struct Type {int value;// 相等运算符friend bool operator(const Type& a, const Type& b) {return a.value b.value;}// 不等运算符friend bool operator!(const Type&a…

【H2O2 | 软件开发】Axios发送Http请求

目录 前言 开篇语 准备工作 正文 概念 封装工具包 示例 结束语 前言 开篇语 本系列为短篇&#xff0c;每次讲述少量知识点&#xff0c;无需一次性灌输太多的新知识点。该主题文章主要是围绕前端、全栈开发相关面试常见问题撰写的&#xff0c;希望对诸位有所帮助。 如…

iPaaS集成平台轻量化架构的重要性

在数字化转型的浪潮中&#xff0c;企业对于高效、灵活、可扩展的集成平台的需求日益增长。iPaaS&#xff08;集成平台即服务&#xff09;作为云计算领域的创新解决方案&#xff0c;正逐渐成为企业解决集成难题的首选。而在这其中&#xff0c;轻量化架构成为了iPaaS集成平台的核…

【存储中间件】Redis核心技术与实战(一):Redis入门与应用(常用数据结构:字符串String、哈希Hash、列表List)

文章目录 Redis入门与应用Redis常用数据结构字符串&#xff08;String&#xff09;操作命令set 设置值get 获取值mset 批量设置值mget 批量获取值Incr 数字运算append追加指令strlen 字符串长度getset 设置并返回原值setrange 设置指定位置的字符getrange 截取字符串 命令的时间…

JVM垃圾收集器合集

前言&#xff1a;JVM GC收集器的回顾与比较 JVM&#xff08;Java虚拟机&#xff09;中的垃圾收集器是自动管理内存的重要机制&#xff0c;旨在回收不再使用的对象所占用的内存空间。以下是JVM中几种常见的垃圾收集器的详细介绍&#xff1a; 一、新生代垃圾收集器 1.Serial收集…

【Crypto】CTF 密码学题目解题思路图

CTF密码学题目解题思路图 密码学题目 ├── 1. 编码/转换 │ ├── 1.1 Base64 │ │ └── 步骤&#xff1a;检查填充字符&#xff08;&#xff09;&#xff0c;解码工具&#xff08;CyberChef&#xff09;。 │ ├── 1.2 Hex │ │ └── 步骤&#xff1a…

C++蓝桥杯基础篇(十一)

片头 嗨~小伙伴们&#xff0c;大家好&#xff01;今天我们来学习C蓝桥杯基础篇&#xff08;十一&#xff09;&#xff0c;学习类&#xff0c;结构体&#xff0c;指针相关知识&#xff0c;准备好了吗&#xff1f;咱们开始咯~ 一、类与结构体 类的定义&#xff1a;在C中&#x…

打造流畅的下拉刷新与轮播交互:HarmonyOS手势识别与组件协同实战

打造流畅的下拉刷新与轮播交互&#xff1a;HarmonyOS手势识别与组件协同实战 在现代移动应用开发中&#xff0c;流畅且自然的交互体验是提升用户满意度的关键因素之一。下拉刷新和轮播组件是许多应用中常见的功能&#xff0c;但如何让它们在手势操作中无缝协同工作&#xff0c…