关系型(MySQL/PostgreSQL)vs 非关系型(Redis/MongoDB)

下面从核心差异 → 各数据库特点 → 选型对照 → 典型组合用法四个层面,系统对比 关系型(MySQL / PostgreSQL)非关系型(Redis / MongoDB)


一、核心差异一览表

维度 关系型(MySQL / PostgreSQL) 非关系型(Redis / MongoDB)
数据模型 表(行 + 列),强 Schema Redis:Key–Value / 数据结构
MongoDB:文档(BSON,弱 Schema)
事务支持 ✅ ACID,强一致 Redis:单命令原子;MongoDB:多文档事务(有限)
整体偏最终一致
关联查询 ✅ JOIN、子查询 ❌ 不支持 JOIN,需冗余或应用层处理
扩展性 垂直扩展为主,水平扩展复杂 ✅ 天生适合水平扩展
查询能力 SQL,功能极强 Redis:简单 KV 查询
MongoDB:类 JSON 查询
一致性 强一致 通常最终一致
延迟 ms 级 Redis:μs~ms 级
典型场景 核心业务数据、账务、订单 缓存、会话、日志、画像、配置

一句话:关系型管“钱和账”,非关系型管“快和大”


二、关系型数据库:MySQL vs PostgreSQL

MySQL

  • 优点
    • 生态成熟、资料极多
    • 易上手,社区版免费
    • InnoDB 稳定可靠
  • 缺点
    • 复杂 SQL / 窗口函数支持一般
    • 扩展性相对弱
  • 适用
    • Web 业务、电商订单、CMS、中小型系统
  • 代表场景
    • 用户表、订单表、支付流水

PostgreSQL

  • 优点
    • “最先进的开源关系型数据库”
    • 完整 SQL 支持(CTE、窗口函数、JSONB)
    • 扩展性强(GIS、全文检索、自定义类型)
  • 缺点
    • 学习成本略高
    • 高并发简单 KV 场景不如 MySQL 轻量
  • 适用
    • 复杂业务逻辑、数据分析、地理信息系统
  • 代表场景
    • 金融系统、ERP、SaaS 平台、GIS 服务

趋势:新项目如果无历史包袱,PostgreSQL 越来越是首选


三、非关系型数据库:Redis vs MongoDB

Redis(内存 KV + 数据结构)

  • 数据模型
    • String / Hash / List / Set / ZSet / Bitmap / HyperLogLog / Stream
  • 优点
    • 极高性能(10万+ QPS)
    • 丰富的数据结构
    • 原子操作,支持 Lua 脚本
  • 缺点
    • 内存成本高
    • 不适合做主存储(除非可丢失或可持久化)
  • 典型用途
    • 缓存
    • 分布式锁
    • 计数器、排行榜
    • 会话存储
    • 消息队列(Stream)

📌 原则:Redis = 加速层,不是“唯一数据源”。


MongoDB(文档数据库)

  • 数据模型
    • BSON 文档(类似 JSON)
  • 优点
    • Schema 灵活,适合快速迭代
    • 天然存对象
    • 分片水平扩展
  • 缺点
    • 事务能力弱于关系型
    • JOIN 支持差
    • 内存占用高
  • 典型用途
    • 日志 / 埋点
    • 用户画像
    • 内容管理(文章、评论)
    • IoT 设备数据

📌 原则:MongoDB = 存“变来变去的大对象”。


四、选型决策表(非常实用)

业务需求 推荐
需要事务、强一致、钱/账 MySQL / PostgreSQL
复杂查询、报表、分析 PostgreSQL
简单 CRUD、高并发读 MySQL + Redis
缓存、热点数据 Redis
会话、购物车 Redis
日志、埋点、监控数据 MongoDB / Elasticsearch
用户画像、标签系统 MongoDB
全文搜索 Elasticsearch(不是 MongoDB)
地理位置 PostGIS / Redis Geo
超高并发计数 / 排行榜 Redis

五、真实系统中的常见组合(重点)

1️⃣ Web 后端经典架构

Client
  ↓
API Server
  ↓
Redis(缓存)
  ↓
MySQL / PostgreSQL(主库)
  • Redis:缓存用户信息、配置、Token
  • MySQL/PG:订单、账户、权限

2️⃣ 读写分离 + 缓存

写请求 → MySQL
读请求 → Redis → MySQL(未命中)

3️⃣ 冷热数据分离

  • MongoDB:存原始日志、历史数据
  • MySQL:存核心业务数据
  • Redis:存当天热点数据

4️⃣ 订单系统示例

数据 存储
订单核心(金额、状态) PostgreSQL
订单详情快照(商品信息) MongoDB
订单缓存 / 幂等 Key Redis

六、常见误区提醒

用 MongoDB 替代 MySQL 做核心账务
→ 事务、一致性风险大

把 Redis 当主数据库
→ 宕机或策略错误可能丢数据

所有数据都扔 MongoDB 图省事
→ 后期查询复杂、性能下降

MySQL 硬抗高并发只读
→ 不加 Redis,成本极高


七、一句话总结

  • MySQL / PostgreSQL
    👉 负责“正确”和“关系”
  • Redis
    👉 负责“快”
  • MongoDB
    👉 负责“灵活”和“量大”

没有谁替代谁,只有是否放对位置。

上一篇
下一篇