皇家塔楼防御战斗
35.56M · 2026-02-13
最近刷到一篇关于OpenTeleDB 的文章,称Xstore是惊喜,我心里直犯嘀咕:真有那么神?毕竟在 OLTP 场景中,数据库的高并发表现和长期稳定性才是硬指标,噱头再足也得经得住实测考验。于是我直接撸起袖子上手测试,把高并发、高频更新、混合负载全拉满,非要看看 XStore 在真实业务场景下,到底是 “稳如老狗” 的实力派,还是徒有其表的 “昙花一现”。
我按照官方教程,用CentOS安装了OpenTeleDB,整个安装过程出乎意料地顺利,从下载源码到编译安装,全程只用了15分钟。启动命令也很简单:
${pg_install_dir}/bin/pg_ctl -D ${pg_data_dir} start
我顺手把端口改成了 15432(避免和本地 PG 冲突),然后用 ps -ef | grep postgres 看了眼进程:
上半部分是标准 PostgreSQL 17,下半部分是 OpenTeleDB,乍看差别不大,但内核早已不同——通过 Python 连接确认,它确实是 基于 PostgreSQL 17 开发,兼容性毫无问题:
接下来就是重头戏:多维度性能与稳定性对比。
首先用 INSERT INTO test_benchmark SELECT n, md5(random()::text) FROM generate_series({start_id}, {end_id - 1}) AS n 命令测试纯插入场景(20 线程并发,插入 100 万行数据):
插入性能结果如下:
| 数据库 | 耗时 (s) | 吞吐 (rows/s) |
|---|---|---|
| OpenTeleDB (XStore) | 7.23 | 138,368 |
| PostgreSQL (Native) | 4.80 | 208,425 |
结果不出所料:原生 PG 依然快。毕竟 XStore 要额外写 Undo Log,相当于“双写”,性能损耗在所难免,但请注意——13.8 万行/秒是什么概念?这意味着每秒处理近 14 万条订单、日志或用户行为记录,对绝大多数业务来说已经绰绰有余,更何况,快≠好,我们还得看“代价”。
接着用命令 UPDATE test_benchmark SET info = md5(random()::text) WHERE id = {target_id}; 测试 20 线程并发、持续 60 秒的随机 UPDATE:
性能对比结果如下:
| 数据库 | 总事务数 | 平均 TPS |
|---|---|---|
| OpenTeleDB (XStore) | 60,991 | 1,011.56 |
| PostgreSQL (Native) | 80,565 | 1,331.82 |
表面上看,PG 的 TPS 高出约 32%。但别急着下结论——高性能的背后,是空间膨胀的隐形税。
这才是最震撼的部分!我在同样 20 线程、60 秒高频混合负载(INSERT + UPDATE + DELETE)下,观察表的实际磁盘增长:
测试结果如下:
| 数据库 | 初始大小 | 最终大小 | 膨胀量 |
|---|---|---|---|
| OpenTeleDB (XStore) | 106.33 MB | 106.33 MB | 0.00 MB (0%) |
| PostgreSQL (Native) | 86.60 MB | 282.45 MB | +195.84 MB (+226%) |
PG 在 1 分钟内膨胀了 3 倍! 这意味着什么?
而 XStore 表大小纹丝不动。这不仅仅是“优化”,这是架构级的胜利,它用原位更新 + Undo Log 的方式,彻底绕开了 MVCC 的膨胀陷阱,这种“稳态性能”——即长时间高负载下仍能保持一致响应与资源消耗才是生产环境真正需要的。
最后,我用命令 UPDATE test_benchmark SET info = md5(random()::text) WHERE id <= {update_rows}; 人为制造 20% 脏数据,然后执行 VACUUM:
Vacuum 耗时对比如下:
| 数据库 | Vacuum 耗时 (s) |
|---|---|
| OpenTeleDB (XStore) | 0.88s |
| PostgreSQL (Native) | 1.14s |
XStore 快了约 23%。原因很简单:主表里几乎没有垃圾,大部分版本管理交给 Undo Log 处理,VACUUM 只需轻量清理元数据即可,而 PG 还得一页一页扫描、标记、跳过 dead tuple,效率自然低。
OpenTeleDB 的 XStore 并不是要“打败” PostgreSQL,而是提供另一种选择:
更重要的是,它以插件形式存在,不 fork 内核,能紧跟 PG 主线。这意味着你既能享受新存储引擎的红利,又不会被锁死在某个分支上。
当然,XStore 也有代价:写入略慢、RTO 可能略长(因需回放 Undo)、工具链尚在完善,但正如老话“鱼与熊掌不可兼得” ,关键在于你是否愿意为长期稳定性,牺牲一点点峰值性能?
对我而言,答案是肯定的。