← 返回文章列表
数据库·1214 次阅读

关系型 vs 非关系型:区别、用途与选型

关系型 vs 非关系型:区别、用途与选型

项目里同时用了 MySQL、Redis,最近又在调研 MongoDB,被问"区别是什么"时总答得零散,系统整理一遍。

关系型数据库(RDBMS)

代表:MySQL、PostgreSQL、Oracle、SQLite。数据存进二维表,行和列结构固定,表与表之间靠外键关联。

CREATE TABLE posts (
  id INTEGER PRIMARY KEY,
  title VARCHAR(200) NOT NULL,
  category_id INTEGER REFERENCES categories(id)
);

特点:

  • 结构化 Schema:字段事先定义,写入要符合规范,改表结构成本高
  • SQL 查询:支持复杂的多表 JOIN、聚合
  • 强事务 ACID:原子性、一致性、隔离性、持久性,转账类场景必备
  • 垂直扩展为主(升级单机配置)

非关系型数据库(NoSQL)

NoSQL 不是一种数据库,而是四类的统称:

类型 代表 数据模型
键值(KV) Redis、Memcached key → value,极快
文档型 MongoDB、CouchDB JSON/BSON 文档,结构灵活
列存储 Cassandra、HBase 按列族存,适合海量分析
图数据库 Neo4j 节点+边,关系网络
// MongoDB:同一集合里两篇文档字段都可以不同
db.posts.insertOne({ title: 'a', tags: ['js'], cover: { url: 'x.jpg' } })
db.posts.insertOne({ title: 'b', summary: '纯文本' })

特点:Schema 灵活、字段可随时变;天然适合水平扩展(分片);多数事务能力弱或只保证单行/单文档原子性。

核心区别对照

维度 关系型 非关系型
数据结构 表,强 Schema 文档/KV/列/图,弱 Schema
查询 SQL,复杂 JOIN 各自 API/查询语言,少 JOIN
事务 完善 ACID 多数较弱,部分支持
扩展 垂直为主 水平分片友好
适合数据 关系明确、结构稳定 结构多变、海量、高并发

怎么选

  • 订单、账户、库存等数据一致性要求高、关系复杂 → 关系型
  • 缓存、会话、排行榜、计数器 → Redis
  • 日志、内容管理、结构频繁变化的业务数据、快速迭代的原型 → MongoDB
  • 真实架构往往是搭配使用:MySQL 存核心数据,Redis 扛读并发,ES/Mongo 处理搜索和多变内容——不是二选一,而是各取所长

看到这里了?如果这篇文章帮到过你

请我喝瓶可乐就好 🥤

收款码

评论0 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4