Egres:从零重写 Postgres,多租户性能突破还是又一次数据库革命?
原创Egres:从零重写 Postgres,多租户性能突破还是又一次数据库革命?
为什么重写 Postgres?30 年旧设计之痛
我喜欢 Postgres。它确实是个了不起的数据库。但它的设计也真的 30 年了,生产环境里让人头疼的大部分问题,VACUUM、事务 ID 回卷、膨胀、每连接一个进程、MVCC,追根溯源都来自很久以前做下的决定。来源:BPPA 我忍不住反复问自己:如果今天从头设计 Postgres,它会是什么样子?
这个念头在脑子里转了很久,直到一年前,我决定不再空想,开始动手。Manish R Jain 用一年时间安静地回答了这个问题,现在他把成果公布出来,取名 Egres。来源:BPPA
这里要说清楚一件事:Egres 不是 Postgres 的分叉,也不是移植版本。它是一个从第一性原理出发设计的新数据库,只是会说 Postgres 的语言。除了 libpg_query 之外,它不使用任何 Postgres 代码。Egres 以 Apache 2.0 协议开源,代码放在 GitHub 上。来源:BPPA
Egres 的核心技术:协程计量、LSM 森林与 Raft 复制
Egres 完整支持 Postgres 协议,psql、各种驱动和 ORM 都能不改一行代码直接连上。这意味着你现有的工具链不需要任何迁移成本。来源:BPPA
更关键的是它的运行模型:单进程可以跑数千个租户,每个查询跑在自定义的协程系统上,CPU 时间片、内存和磁盘 IOPS 都按查询和租户精确计量。这跟 Postgres 每连接一个进程的老路数完全不同,资源隔离和配额控制变得简单直接。来源:BPPA
存储层是 Egres 的另一大块。新存储引擎 zdb 采用 LSM 森林,就是树形排列的 LSM 树,带有块压缩、校验和、MVCC 和垃圾回收。它可以跑在本地磁盘上,也可以直接用对象存储。如果用 S3,服务器本身无状态,可以随意扩缩,可选本地 NVMe 磁盘做缓存。Raft 复制提供跨副本的读己之写保证,数据库和表的分支是瞬时的,零拷贝,不做写时复制。来源:BPPA
当前版本的取舍与反直觉判断:单节点先行
这一版发布只支持单节点运行。多节点代码已经写好了,但没有启用,要等下一版才放出来。作者把大部分精力花在存储、复制、资源计量和基于 fiber 的查询执行上,查询功能还比较基础,只有等值查询,没有 join,后续版本会逐步补齐。来源:BPPA
Manish 的判断是:Postgres 那套 30 年的设计,正是生产环境各种痛苦的根源。主流思路是在 Postgres 上打补丁,缝缝补补,而 Egres 选择绕开整个旧框架重来。这个方向和主流做法正好相反,属于反直觉的发现。来源:BPPA
有趣的是,这篇宣布文章在 Hacker News 上目前只有 1 分、0 条评论。来源:HH 作者那边兴奋地宣布,社区这边冷冷清清。我不知道这是大家还没看到,还是真的不看好这种从头再来的路子。但至少目前,我不认为 1 分 0 评论能说明技术本身有问题,它更像是在等一个愿意仔细读完全文的人。来源:BPPA
原文:
Egres: A Postgres-compatible database for heavy, multi-tenant workloads · 来源:Hacker News
作者:itfan123 值班编辑 · 发布于 2026年11月2日
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123





