首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PostgreSQL-MVCC 架构的堆(Heap)存储引擎

PostgreSQL-MVCC 架构的堆(Heap)存储引擎

作者头像
运维小路
发布2026-01-26 12:29:53
发布2026-01-26 12:29:53
1060
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL

PostgreSQL(本章节)

MongoDB

Redis

Etcd

我们在前面介绍MySQL的时候重点介绍过它的2个存储引擎:MyISAM和InnoDB,今天我们来介绍下PostgreSQL的存储引擎。

PostgreSQL与 MySQL 等数据库的一个核心区别在于,它本身就是一个完整的数据库管理系统,而不是一个可以更换存储引擎的数据库服务器。因此,严格来说,PostgreSQL 没有像 MySQL 那样可以插拔的“存储引擎”(Storage Engine)概念

核心架构

  • 堆存储 (Heap Storage):PostgreSQL 使用堆表(Heap-Organized Table)来存储数据。这意味着数据行(Tuples)被无序地插入到数据页中,而不是像某些数据库那样按主键排序。这有利于高并发的插入操作。
  • 多版本并发控制 (MVCC):这是 PostgreSQL 存储的核心。MVCC 允许多个事务同时读写数据而不会相互阻塞。它通过为每个数据行保存多个版本(每个版本有特定的事务可见性信息)来实现。旧版本的行(dead tuples)最终由 VACUUM进程清理。
  • WAL (Write-Ahead Logging):为了保证数据的持久性和崩溃恢复能力,PostgreSQL 采用 WAL。所有对数据文件的修改都必须先记录到 WAL 日志中,然后才能应用到数据文件。这是实现高可靠性和 Point-in-Time Recovery (PITR) 的基础。有点类似我们前面前面介绍的中间件:Zookeeper
  • 数据页 (Data Pages):数据被组织成 8KB 大小的页面。一个表的数据被存储在一系列这样的页面中。页面内包含行数据、页头信息和空闲空间。

表空间 (Tablespaces)

虽然不是存储引擎,但表空间是控制数据物理位置的重要机制。

  • 功能: 允许你将数据库对象(如表、索引)的存储位置从默认的数据目录移动到其他磁盘或分区。
  • 用途: 用于性能优化(例如,将频繁访问的表放在 SSD 上)、存储管理或满足合规性要求。

外部数据包装器 (Foreign Data Wrappers, FDW)

这是最接近“可插拔存储引擎”概念的功能。

  • 功能:FDW 允许 PostgreSQL 查询和操作存储在外部系统中的数据,就像这些数据是本地表一样。
  • 原理:它通过一个“包装器”来连接到外部数据源(如另一个 PostgreSQL 实例、MySQL、MongoDB、Oracle、文件系统、Web 服务等),并将查询翻译成外部系统能理解的命令。
  • 常见 FDW:postgres_fdw: 连接另一个 PostgreSQL 服务器。 mysql_fdw: 连接 MySQL 服务器。 file_fdw: 读取 CSV、文本等文件。 oracle_fdw: 连接 Oracle 数据库。
  • 注意:FDW 主要用于数据访问和联合查询,而不是作为本地表的替代存储引擎。性能通常不如本地存储。

扩展 (Extensions)

PostgreSQL 强大的扩展生态系统可以改变或增强其存储行为。

citus: 将 PostgreSQL 转变为分布式数据库,数据被分片(sharded)存储在多个节点上。这改变了数据的物理分布和存储方式。

timescaledb: 专为时间序列数据优化的扩展。它将大表自动分割成更小的“块”(chunks),并针对时间序列查询进行了优化,提供了类似“特定领域存储引擎”的功能。

zombodb: 将 PostgreSQL 与 Elasticsearch 集成,用于强大的全文搜索。

总结

概念

在 PostgreSQL 中的对应物

说明

存储引擎

核心存储系统 (Heap + MVCC + WAL)

PostgreSQL 没有可替换的存储引擎,其存储逻辑是内置且固定的。

物理位置控制

表空间 (Tablespaces)

可以指定数据库对象存储在哪个磁盘路径。

访问外部数据

外部数据包装器 (FDW)

可以像查询本地表一样查询外部系统,但数据不存储在 PG 内部。

特定场景优化

扩展 (Extensions)

如 Citus (分布式), TimescaleDB (时序) 等,通过扩展实现类似专用存储引擎的功能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB
    • 核心架构
    • 表空间 (Tablespaces)
    • 外部数据包装器 (Foreign Data Wrappers, FDW)
    • 扩展 (Extensions)
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档