Skip to content

数据库选型

PostgreSQL vs MySQL 对比为核心,Redis/MongoDB/ES 的定位与组合架构。

Updated View as Markdown
For humans

数据库选型

选型的核心不是比谁强,而是匹配数据形态。本篇以 PostgreSQL vs MySQL 的对比为核心,因为这是后端面试最常见的选型题。

PostgreSQL vs MySQL

维度 PostgreSQL MySQL
存储模型 堆表 + CTID 聚簇索引组织表
MVCC 版本留在堆里,VACUUM 清理 undo log,purge 清理
默认隔离级别 读已提交 可重复读
RR 防幻读 不防(无间隙锁),可串行化用 SSI 防(临键锁)
日志体系 一套 WAL redo + undo + binlog,两阶段提交
索引类型 B-tree/GiST/GIN/BRIN/Hash B+树/哈希/全文
扩展生态 PostGIS/pgvector/FDW/分区 分区弱,扩展少
复制 流复制 + 逻辑复制 + Patroni 主从 binlog + 半同步
高可用 Patroni(成熟事实标准) MHA/Orchestrator 等,生态成熟
运维 VACUUM 是必修课 相对简单
并发模型 多进程,连接开销大要连接池 线程模型,连接轻量

怎么选:

  • 数据完整性和复杂查询优先(金融、GIS、JSON 灵活查询、分析)→ PostgreSQL
  • 团队 MySQL 经验深厚、生态工具成熟、读多写少的互联网业务 → MySQL
  • 需要全文、空间、向量多种能力 → PostgreSQL(一个库顶三个)
  • 需要 VACUUM 和长事务治理经验,运维投入不足 → MySQL 更省心

一个务实结论:两者都是优秀的关系库,选型的决定因素通常是团队熟悉度和业务特性,而不是纸面对比。新项目功能需求多(JSONB、分区、扩展)选 PG 的趋势明显。

其他存储的定位

存储 定位 典型场景
Redis 缓存层,不是主存储 热点缓存、计数器、分布式锁
MongoDB 灵活 Schema 文档库 内容、快速迭代,事务能力弱于关系库
Elasticsearch 检索和分析引擎 全文搜索、日志
向量库 RAG 场景 向量检索,pgvector 是轻量入口

组合是常态

生产架构几乎都是组合:MySQL 或 PG 做主库,Redis 做缓存,ES 做检索,pgvector 或专用向量库做 RAG。同步链路(binlog/WAL 监听、双写、MQ)是面试加分点。

面试追问

  1. PG 和 MySQL 最本质的区别? 存储模型和 MVCC 机制:堆表加 VACUUM 对比聚簇索引加 undo log。其余差异(隔离级别、索引、日志)都从这发散
  2. 为什么 PG 默认 RC 而 MySQL 默认 RR? 设计取舍不同:PG 没有间隙锁,RC 更简单并发更好,强一致用 SSI;MySQL 的 RR 靠临键锁防幻读
  3. 什么时候选 PG? 复杂查询、数据完整性、GIS/JSON/向量多能力需求。一个 PG 顶 MySQL 加 ES 加向量库的部分工作
  4. 什么时候选 MySQL? 团队生态成熟、运维简单、读多写少标准业务
  5. RAG 场景怎么选? 千万级以内用 pgvector(同库事务原生),更大规模或极低延迟用专用向量库
Navigation

Type to search…

↑↓ navigate↵ selectEsc close