发布时间:2026/8/16 16:01:59
pgrust 存储引擎解析:磁盘级兼容 PostgreSQL 的底层设计 pgrust 存储引擎解析磁盘级兼容 PostgreSQL 的底层设计【免费下载链接】pgrustPostgres rewritten in Rust, now faster than Postgres and Clickhouse项目地址: https://gitcode.com/GitHub_Trending/pg/pgrustpgrust 是一个用 Rust 重写 PostgreSQL 的开源项目它最大的卖点不是“更快”而是磁盘级兼容它能直接从一个现成的 PostgreSQL 18.3 数据目录启动无需任何迁移。这背后是一整套精心移植的存储引擎代码——页Page布局、缓冲管理器、WAL 日志乃至空闲空间映射全部在 Rust 中按 PostgreSQL 的原生字节格式复刻。本文带你深入 pgrust 存储引擎的底层设计看看“磁盘级兼容”到底是怎么做到的。磁盘级兼容比协议兼容难得多很多数据库“兼容 PostgreSQL”只是兼容了 SQL 语法和客户端协议wire protocol但 pgrust 追求的是更高一层的目标磁盘格式兼容。这意味着可以直接挂载并启动已有的 PostgreSQL 数据目录已落盘的堆表、索引、提交日志clog无需重建现有备份、复制、归档工具照常工作。要做到这一点pgrust 必须把 PostgreSQL 存储层的一切细节——从 8KB 数据页的每个字节偏移到 1GB 段文件的切分方式——都原样复刻。这是一条更难但价值更大的路线也让它能借用 PostgreSQL 原生的 46,000 条回归测试作为“标准答案”。数据页布局字节级复刻的起点一切存储的基础是页Page。PostgreSQL 把每个表和索引切成 8KB 大小的页每页有一个 24 字节的页头PageHeaderData。pgrust 的页面代码直接对应 C 源码里的bufpage.c以[u8]形式保存整页数据在固定偏移处读写字段做到与 C 的 struct 覆盖overlay完全一致偏移字段含义0pd_lsn最近一次修改该页的 WAL 位置8pd_checksum页校验和10pd_flags页标志位如全可见12pd_lower空闲空间起始偏移14pd_upper空闲空间结束偏移16pd_special特殊空间起始偏移18pd_pagesize_version页大小与布局版本号20pd_prune_xid可修剪的最老事务号页头之后是每项 4 字节的行指针ItemIdData数组指向页内实际的元组数据。pgrust 在 page/src/lib.rs 中实现了全部页面操作函数同时提供校验和计算对应checksum.c与页校验相关工具保证写出去的每一个字节都与 PostgreSQL 一致。存储管理器1GB 段文件的 Rust 移植磁盘上的物理文件由**存储管理器Storage Manager**负责。PostgreSQL 的md.c会把每个关系表/索引的每个 fork数据、空闲空间映射、可见性映射拆成最大 1GB 的段文件并通过虚拟文件描述符VFD池统一管理打开的文件句柄。pgrust 在 smgr/md/src/lib.rs 中 1:1 移植了md.c的全部逻辑段文件编号换算、EXTENSION_*扩展行为、errno 处理、以及ENOENT/ENOSPC等分支甚至连“文件可能被并发删除”这类边界情况都保持一致。fsync 请求则交给 sync/src/lib.rs对应sync.c由 checkpointer 进程统一消化确保崩溃恢复时的持久性语义与 PostgreSQL 相同。缓冲管理器共享缓冲池与页替换策略读写不能每次都直接访问磁盘于是有了缓冲管理器Buffer Manager。PostgreSQL 的共享缓冲池在 pgrust 中对应 buffer/bufmgr/src/ 目录mgr.rs缓冲池的申请、读取、扩展与刷新read.rs预读与异步 IO 接入buf_flush.rs脏页刷盘策略配套的 support/src/freelist.rs、buf_table.rs 实现空闲链表与页哈希表。正是这套与 PostgreSQL 行为对齐的缓冲层让 pgrust 在处理同样数据时产生同样的缓存命中/驱逐顺序从而在回归测试中输出一致结果。WAL 与事务崩溃恢复的基石磁盘兼容的另一个硬骨头是预写日志WAL与事务子系统。PostgreSQL 用 WAL 保证崩溃安全任何数据修改先写日志再落盘。pgrust 在 access/transam/ 目录下完整移植了这套体系xlog/WAL 记录写入与恢复主逻辑xloginsert/WAL 记录的构造与缓冲xlogreader/日志回放读取clog/、multixact/、subtrans/事务状态与多事务记录slru/简单 LRU 缓冲支撑 clog 等日志页的缓存。此外freespace/src/lib.rs 移植了空闲空间映射FSM决定新元组该插入哪个数据块——这些细节共同保证了 pgrust 写的 WAL 与数据页可以被 PostgreSQL 自身的恢复流程理解。如何证明“磁盘级兼容”pgrust 的可信度来自回归测试项目内置了 PostgreSQL 18.3 的完整测试文件位于 vendor/postgres-18.3通过 run-regression 脚本驱动 pgrust 运行目前已在超过46,000 条回归查询上与 PostgreSQL 输出完全一致。README 中也给出了直接体验磁盘兼容的方式用--initdb创建数据目录后用 psql 连接执行select version()。不止兼容Rust 重写带来的存储想象力磁盘级兼容只是起点。README 的路线图透露了更激进的想法无 vacuum 存储设计、多线程内核、内置连接池、快速分支工作流。由于内核已用 Rust 重写未来可以绕过 PostgreSQL “每次连接一个进程”的模型而无需迁移任何历史数据——这才是“磁盘兼容 新内核”组合的真正价值旧数据无缝继承新架构自由发挥。如果你是 PostgreSQL 深度用户关心的是数据库存储引擎原理或想观察“Rust 重写 PostgreSQL”的可行性pgrust 的存储层源码storage/ 目录是目前最值得研读的活教材它证明了一件事——字节级兼容不是口号而是可以逐文件验证的工程事实。【免费下载链接】pgrustPostgres rewritten in Rust, now faster than Postgres and Clickhouse项目地址: https://gitcode.com/GitHub_Trending/pg/pgrust创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/16 15:56:59

Vue2 学习笔记系列:从 Vue Router 路由到 Vuex 状态管理

Vue2 学习笔记系列:从 Vue Router 路由到 Vuex 状态管理Vue2 项目里绕不开的两块:**路由(Vue Router)**管页面跳转,**状态管理(Vuex)**管跨组件数据共享。本文把最常用、最容易混的知识点串一遍…

2026/8/16 20:17:35

Windows 11照片应用偏色问题:从色彩管理原理到六步修复实战

1. 项目概述:一个看似简单却困扰多人的色彩难题最近在帮同事处理电脑问题时,遇到一个挺典型但又容易被忽略的“小毛病”:在Windows 11系统自带的“照片”应用里查看图片,颜色总是感觉怪怪的,像是蒙上了一层灰蒙蒙的滤镜…

2026/8/16 20:17:35

从Vim到Neovim:模式编辑与LSP配置打造高效开发环境

1. 从抗拒到拥抱:一个编辑器如何改变工作流一年前,当我决定把主力编辑器从那些图形化、功能丰富的现代IDE切换到Vim,并最终稳定在Neovim时,身边不少同事都觉得我有点“自虐”。毕竟,在鼠标点点、自动补全、图形化调试一…

2026/8/16 20:17:35

Rimraf:Node.js开发中高效删除node_modules等顽固目录的终极方案

1. 从一次“删库”事故说起:为什么需要Rimraf? 那天下午,我正忙着清理一个积压已久的本地Node.js项目,准备把 node_modules 和一堆编译生成的 dist 文件夹删掉,给硬盘腾点空间。像往常一样,我选中文件夹…

2026/8/16 20:17:35

PyCharm新手入门:从零配置到第一个Python项目实战

1. 从“Hello World”到第一个项目:为什么是PyCharm? 如果你刚刚接触Python,或者正准备开始学习,那么“如何运行第一个Python程序”就是你遇到的第一个,也是最关键的一个坎。你可能已经尝试过在记事本里写代码&#xf…

2026/8/16 20:12:35

Vue DevTools开发版构建指南:解决Vue 3版本兼容性问题

1. 为什么你需要一个“开发版”的 Vue DevTools?如果你正在用 Vue 3 开发一个项目,尤其是用上了 Composition API 或者一些新的实验性特性,然后兴冲冲地打开 Chrome 商店安装 Vue DevTools,准备大展身手调试一番,结果发…

2026/8/16 0:00:35

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/16 0:00:35

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/15 9:46:39

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/16 16:53:03

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/15 9:46:30

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…