我们正在构建一个多租户 SaaS 产品(B2B 运营平台),当前 MVP 阶段使用单体 PostgreSQL 自建实例。随着以下变化,主数据库选型需要做出正式决策:
我们需要在 PostgreSQL / MongoDB / MySQL 三者中选择一个作为主数据库,并在 2 周 deliberation 内完成决策。
决策理由:
✅ 正面后果
⚠️ 负面后果
⚪ 中性后果
| 维度 | AWS RDS PostgreSQL 16 | 自建 MongoDB 7 (Atlas M30) | 自建 MySQL 8.0 |
|---|---|---|---|
| 查询性能 复杂 JOIN / 子查询 / 聚合 |
★★★★★ 原生优化器,JOIN 效率最高;支持 CTE、窗口函数、部分索引;jsonb GIN 索引兼顾文档查询。 | ★★☆☆☆ 无跨集合 JOIN;$lookup 等同于左外连接但性能远低于 SQL JOIN;聚合管道复杂查询可读性差。 | ★★★★☆ JOIN 性能良好但不支持部分索引、CTE 递归不如 PG;缺少 jsonb 等价类型,JSON 函数较弱。 |
| 年度成本 含运维人力 |
★★★★☆ RDS Multi-AZ ~$5,500/年 + 0.2 FTE 运维 = 总计 ~$8,500/年。性价比最优。 | ★★☆☆☆ Atlas M30 ~$6,800/年 + 学习曲线 6–8 周 (~$15,000 机会成本) + 持续运维 0.3 FTE。首年真实成本 ~$20,000+。 | ★★★☆☆ 自建 EC2 ~$2,000/年 但需 0.5 FTE 运维 ~$25,000/年。总计 ~$27,000/年。无托管服务自动化。 |
| 团队熟悉度 上手速度 & 排障能力 |
★★★★★ 全团队 3+ 年生产经验。所有成员能独立进行 schema 设计、查询优化、备份恢复。 | ★☆☆☆☆ 零运维经验。需要学习 replica set 选举、oplog、sharding key 设计、聚合管道优化。生产事故响应能力不足。 | ★★★☆☆ 2 人有 MySQL 经验但未达专家级。InnoDB 调优、binlog 复制、字符集问题存在知识盲区。 |
| 生态与工具链 扩展/监控/审计/ORM |
★★★★★ pgAudit + pg_stat_statements + PostGIS + pgvector + TimescaleDB + Flyway + Prisma。SOC 2 审计开箱即用。 | ★★★☆☆ Atlas 自带监控但审计需付费企业版。变更流 (Change Streams) 强于 PG 逻辑复制但生态广度不如 PG 扩展。 | ★★★☆☆ Percona Toolkit + pt-query-digest 成熟,但扩展生态不如 PG。审计插件(MariaDB Audit Plugin)需单独配置。 |
| 长期演进 5 年可扩展性 |
★★★★★ Citus 水平分片成熟;CockroachDB 兼容 PG wire protocol 作为逃生舱;AWS RDS 升级路径清晰(PG 16 → 17 → 18)。 | ★★★☆☆ 原生 sharding 优秀但被 MongoDB 官方推荐 Atlas 锁定。自建 sharding 运维复杂度极高。许可证 SSPL 存在合规风险。 | ★★★☆☆ Vitess / TiDB 分片方案成熟但需要额外学习。MySQL 8.0 被 Oracle 掌控路线,社区 fork(MariaDB)存在分裂风险。 |
MongoDB 未被选择的原因:
MySQL 未被选择的原因: