本摘要概述了基于 Hironobu Suzuki 文档的 PostgreSQL 内部机制研究要点。 **逻辑与物理结构** PostgreSQL 集群是管理多个数据库的单一实例,每个数据库均由 OID 标识。在内部,数据库、表和索引作为文件存储在数据目录(`$PGDATA`)中。尽管对象由 OID 标识,但其物理存储位置是通过 `relfilenode` 进行管理的。当表被重写(例如通过 `VACUUM FULL`)时,其 `relfilenode` 会发生变化,但 OID 保持不变。PostgreSQL 还支持**表空间(Tablespaces)**,允许通过符号链接将数据存储在特定的外部目录中。 **存储与数据访问** PostgreSQL 将数据组织为 8KB 的页面。每个页面包含一个页头、指向元组的行指针以及实际的堆数据。 * **TOAST(超大属性存储技术):** 当数值超过 2KB 时,PostgreSQL 会自动将其移动到独立的“TOAST”表中,仅在主行中保留一个指针。 * **读/写操作:** 写入操作将数据追加到页面中,指针从前向后增长,而元组则从后向前排列。读取操作通过顺序扫描(Sequential Scans)执行,或利用 B 树索引通过其 `ctid`(页面号与偏移量)定位特定的元组。
受 Jeff Geerling 的 10 英寸迷你机架系列启发,作者使用 20 毫米铝型材定制了一个机架,用于收纳六台 1L 虚拟化主机。为了寻找比预制套件更具性价比、比 3D 打印支架更耐用的方案,作者选择了定制切割的铝板。
该机架采用开放式设计以利于通风,通过 USB 转风扇接头适配器进行散热管理,并结合了铝材和木质面板。网络方面由两台交换机负责,其中包括一台 26 年历史的复古 3Com 设备,并支持用于虚拟机迁移的 2.5GbE 后端网络。
尽管该项目成功整理了作者的书桌,但也面临了一些挑战:笨重的电源适配器管理、狭小的布线空间以及有限的端口访问权限。最终造价约为 313 欧元(不含风扇)。虽然与市售方案相比,该项目在资金上并未显著节省,但它提供了一个功能齐全、自给自足且令人满意的虚拟化实验室。作者通过 Zigbee 电源适配器和网络唤醒(Wake-on-LAN)来管理机架约 90W 的待机功耗。尽管布线复杂,但从功能实现的角度来看,该项目取得了成功。