在后端开发与数据架构设计中,数据库选型往往决定了系统的性能上限、扩展能力以及后期复杂度

很多同学会问:

  • MySQL 和 PostgreSQL 到底谁更强?

  • Doris 为什么适合做分析?

  • 分区、分桶、分片到底有什么区别?

👉 本文从特性 → 原理 → 场景 → 架构设计,一次性讲清楚。


一、三大数据库核心定位

数据库 类型 核心定位
MySQL OLTP 高并发事务处理
PostgreSQL 增强型 OLTP 复杂查询 + 扩展能力
Apache Doris OLAP 大规模数据分析

👉 一句话总结:

  • MySQL:业务数据库之王

  • PostgreSQL:功能最强关系数据库

  • Doris:实时分析利器


二、MySQL 深度解析(OLTP代表)

1️⃣ 核心特性

  • InnoDB 存储引擎(默认)

  • 聚簇索引(主键即数据)

  • MVCC(多版本并发控制)

  • 行级锁(高并发关键)


2️⃣ 索引机制(性能核心)

  • B+Tree 索引

  • 覆盖索引(避免回表)

  • 联合索引(最左匹配)

👉 MySQL 性能优化本质:

就是在优化索引


3️⃣ 优势

✅ 高并发写入能力强
✅ 成熟生态(ORM、工具链)
✅ 上手简单


4️⃣ 局限

❌ 不擅长复杂查询(多表 join)
❌ 聚合性能差(group by / count)
❌ 分布式能力弱(依赖分库分表)


5️⃣ 分区机制(Partition)

PARTITION BY RANGE (YEAR(create_time))

👉 本质:

  • 单机内部优化

  • 减少扫描范围

❗ 不能提升计算能力


6️⃣ 分片(Sharding)

👉 真正扩展方式:

  • 分库分表(user_0 / user_1)

  • 中间件:ShardingSphere


👉 核心问题:

  • 跨库 join 困难

  • 分布式事务复杂


三、PostgreSQL 深度解析(进阶关系数据库)

1️⃣ 强大的 SQL 能力

支持:

  • Window Function(窗口函数)

  • CTE(WITH)

  • 复杂子查询优化


2️⃣ 数据类型优势

  • JSON / JSONB(非常强)

  • ARRAY(数组)

  • UUID

  • 自定义类型

👉 PostgreSQL = SQL + NoSQL


3️⃣ 扩展能力(最大优势)

插件生态:

  • PostGIS(GIS)

  • TimescaleDB(时序)

  • pgvector(AI)


4️⃣ 并发机制

  • MVCC 更严格

  • 支持 Parallel Query(并行查询)


5️⃣ 分区机制(更先进)

PARTITION BY RANGE (create_time)

👉 特点:

  • 自动路由

  • 查询裁剪

  • 支持并行扫描


6️⃣ 分布式扩展(Citus)

👉 PostgreSQL 可升级为分布式数据库:

  • 分布式表

  • 分布式 join

  • 横向扩展


四、Apache Doris 深度解析(重点)


1️⃣ 架构(MPP)

  • FE:解析 SQL

  • BE:执行计算

👉 多节点并行计算


2️⃣ 列式存储

  • 按列存储

  • 高压缩率

  • 减少 IO


3️⃣ 分区(Partition)

PARTITION BY RANGE(dt)

👉 作用:

  • 管理数据

  • 查询裁剪(减少扫描)


4️⃣ 分桶(Bucket / Distribution)

DISTRIBUTED BY HASH(user_id) BUCKETS 16;

👉 作用:

  • 数据分布到不同节点

  • 提高并行计算能力


5️⃣ 分区 vs 分桶

维度 分区 分桶
作用 降低扫描 提高并行
粒度

6️⃣ 数据模型(核心)

  • Duplicate Key(明细)

  • Aggregate Key(聚合)

  • Unique Key(去重)


7️⃣ 为什么 Doris 查询快?

👉 本质:

  • 列式存储

  • 分布式计算

  • 向量化执行


五、分区 / 分桶 / 分片机制对比(核心)


1️⃣ 三种机制本质

机制 本质 作用
分区 逻辑切分 少扫描
分桶 数据打散 并行计算
分片 跨库拆分 扩容

2️⃣ 三者能力对比

能力 MySQL PostgreSQL Doris
分区 ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
分桶 ⭐⭐⭐⭐⭐
分布式 插件 原生
并行计算 有限

3️⃣ Doris 分桶设计(重点)

👉 核心原则:

✔ 选择高基数字段

  • user_id

  • order_id


✔ 选择 join key

避免数据 shuffle


✔ Bucket 数量

👉 建议:

  • BE节点 × 2~4


4️⃣ 常见踩坑(面试高频)

❌ 用低基数字段分桶(性别)
❌ Bucket 过多/过少
❌ 分区字段不参与查询


六、场景选型(实战)


🎯 场景 1:电商系统

👉 特点:

  • 高并发写入

  • 强事务

👉 选型:

✅ MySQL


🎯 场景 2:金融系统

👉 特点:

  • 强一致性

  • 复杂逻辑

👉 选型:

✅ PostgreSQL


🎯 场景 3:日志分析

👉 特点:

  • TB级数据

  • 聚合查询

👉 选型:

✅ Doris


🎯 场景 4:BI 报表

👉 特点:

  • 多维分析

  • 秒级响应

👉 选型:

✅ Doris


🎯 场景 5:实时数仓

架构:

MySQL → Kafka → Flink → Doris


🎯 场景 6:混合架构(推荐)

👉 企业最佳实践:

  • MySQL → 业务数据

  • PostgreSQL → 复杂逻辑

  • Doris → 分析系统


七、架构设计总结(核心价值)

👉 不同数据库解决不同问题:

数据库
OLTP MySQL
复杂计算 PostgreSQL
OLAP Doris

👉 最佳实践:

分层设计,而不是单库通吃


八、终极总结(面试可用)

👉 一句话记住:

  • MySQL:解决“写得快”

  • PostgreSQL:解决“逻辑复杂”

  • Doris:解决“算得快”


👉 更深一层:

数据库的本质不是存数据,而是如何高效地“拆数据 + 算数据”


如果这篇文章对你有帮助,欢迎点赞 👍 + 收藏 ⭐

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐