DATABASE · 选型对比 / 架构决策

数据库对比速查

从关系型到 NoSQL,从内存缓存到搜索引擎,每种数据库都在特定的场景中闪闪发光。对比 8 种主流数据库的核心理念、性能表现和适用场景,帮助你做出最合适的技术选型。

8种数据库 6个对比维度 6类业务场景 11实战决策项
MySQL PostgreSQL MariaDB SQLite Redis MongoDB Elasticsearch ClickHouse MySQL PostgreSQL MariaDB SQLite Redis MongoDB Elasticsearch ClickHouse

8 大数据库全方位对比

数据库 类型 ACID 查询语言 性能 扩展性 适用场景
MYMySQL
关系型 (RDBMS)
SQL
OLTPWeb 应用电商
PGPostgreSQL
关系型 (ORDBMS)
SQL + JSON/全文搜索
复杂查询地理数据金融
MBMariaDB
关系型 (RDBMS)
SQL
MySQL 替代OLTP开源
SLSQLite
嵌入式关系型
SQL
移动端嵌入式本地存储
ReRedis
内存 KV / 缓存
RESP 协议 + Lua
缓存会话限流
MGMongoDB
文档 NoSQL
MQL (JSON-like)
文档存储大数据IoT
ESElasticsearch
搜索 / 分析
RESTful + Query DSL
全文搜索日志可观测
CHClickHouse
列式 OLAP
SQL 扩展
OLAP实时分析大数据

各数据库深度解析

每张卡片先看类型与 ACID 支持定「能不能用在主库」,再看扩展性与场景定「怎么用」——没有全能选手,只有合适的分工。

MY

MySQL 8.4 LTS

类型关系型 (RDBMS) — 行式存储
ACID完全支持(InnoDB 引擎)
查询语言标准 SQL + 存储过程 + 触发器
扩展性主从复制 / 分片 / Group Replication
最流行的开源关系型数据库。InnoDB 引擎提供完整 ACID 支持和行级锁。8.4 是当前 LTS 版本,窗口函数、CTE、原子 DDL 等能力在 8.0 时代已就绪。广泛用于 Web 应用(LAMP/LEMP 栈)、电商、CMS 系统。

核心特性

  • B+Tree 索引 + 哈希索引
  • MVCC 多版本并发控制
  • 自适应哈希索引
  • 在线 DDL(INSTANT 算法)
  • Data Dictionary 升级
  • Clone Plugin 快速复制
PG

PostgreSQL 16

类型对象关系型 (ORDBMS)
ACID完全支持(完整 ACID / MVCC / 丰富约束能力)
查询语言SQL + JSONB + 全文搜索 + 扩展
扩展性流复制 / 逻辑复制 / Patroni + Citus
功能最丰富的关系型数据库,被誉为「开发者数据库」。原生支持 JSONB、GIS(PostGIS)、数组、范围类型、自定义类型。PG 16 在并行查询、逻辑复制、性能方面大幅提升。适合复杂查询、金融、地理信息等场景。

核心特性

  • MVCC + 快照隔离
  • JSONB 二进制 JSON
  • PostGIS 地理空间扩展
  • BRIN / GiST / GIN 多索引
  • 表继承 + 分区
  • 并行查询 + 聚合下推
MB

MariaDB 11.4

类型关系型 (RDBMS) — MySQL 分支
ACID完全支持(InnoDB/XtraDB)
查询语言SQL 兼容 MySQL + 专属扩展
扩展性Galera 多主 / 主从 / Spider 分片
MySQL 的开源分支,由原始 MySQL 团队维护。完全兼容 MySQL 的同时,加入了更多创新特性:Aria 引擎、ColumnStore 列存、Galera 多主集群。MariaDB 11.4 引入了 Oracle 兼容模式、AES 加密增强等。

核心特性

  • Galera 同步多主复制
  • Aria 非事务引擎
  • ColumnStore 列式分析
  • Hash Join 优化
  • WITH RECURSIVE CTE
  • Oracle PL/SQL 兼容
SL

SQLite 3.46

类型嵌入式关系型(无服务器)
ACID完全支持(单写多读)
查询语言SQL(功能受限)
部署方式单文件嵌入应用进程
世界上部署最广泛的数据库引擎(嵌入式到手机、浏览器中)。零配置、无服务器、整个数据库存储在一个文件中。擅长移动应用(Android/iOS)、本地存储、测试环境。不过不支持并发写入和网络访问。

核心特性

  • 零配置 - 即用即走
  • 单文件数据库
  • WAL 模式提升并发
  • FTS5 全文搜索
  • JSON 函数支持
  • 小于 600KB 代码体积
Re

Redis 7.2

类型内存 KV 缓存 + 数据结构服务器
ACID部分(AOF/RDB 持久化)
查询语言RESP 协议 + Lua 脚本
数据结构String / Hash / List / Set / Sorted Set / Stream
极速的内存数据库,单机 QPS 可达 10 万+。支持丰富的数据结构和原子操作。7.x 版本引入了 Redis Stack(JSON、Search、TimeSeries、Bloom 等模块)。常用于缓存、会话管理、实时排行榜、限流、消息队列。

核心特性

  • 纯内存操作 - 微秒级延迟
  • 多种持久化 (RDB/AOF)
  • 哨兵 + 集群高可用
  • Redis Stack 多模型
  • 发布订阅 + Stream
  • Lua + 函数脚本
MG

MongoDB 7.0

类型文档 NoSQL(BSON 格式)
ACID4.0+ 支持多文档事务
查询语言MQL(JSON 风格聚合管道)
分片原生水平扩展(Auto-Sharding)
最流行的文档型 NoSQL 数据库。BSON 文档模型灵活,天然匹配面向对象数据。聚合管道强大,支持复杂的数据变换和分析。MongoDB 7.0 引入了分片优化、时间序列集合、查询加密等。适合 IoT、内容管理、实时分析。

核心特性

  • 灵活 Schemaless 文档
  • 原生分片 + 复制集
  • 聚合管道 (Aggregation Pipeline)
  • Change Streams
  • TTL / 部分索引
  • Atlas 云托管的 Serverless
ES

Elasticsearch 8.14

类型分布式搜索 + 分析引擎
ACID弱(近实时 NRT)
查询语言RESTful JSON + Query DSL + SQL
底层引擎Lucene 倒排索引
基于 Lucene 的分布式搜索与分析引擎。擅长全文检索、日志分析、APM 可观测性。Elastic Stack(ELK)生态完善:Logstash 采集、Kibana 可视化。8.x 安全性大幅提升(默认 TLS、RBAC)。性能极强,大规模数据下可实现低延迟检索,效果取决于分片和查询模型。

核心特性

  • 倒排索引全文搜索
  • 分布式 + 跨集群搜索
  • 聚合分析 (Metric / Bucket / Pipeline)
  • 向量搜索 (kNN)
  • ILM 索引生命周期管理
  • Elasticsearch SQL
CH

ClickHouse 24.x

类型列式 OLAP 数据库
ACID弱(最终一致性)
查询语言SQL 扩展(列式 + 向量化)
性能单表查询 分析型聚合场景通常显著快于行存数据库,视模型和查询而定
开源列式存储数据库,专为实时分析而生。列式存储 + 向量化执行引擎,在聚合查询上比传统行存快两个数量级。采用 MergeTree 引擎家族,支持物化视图、采样、TTL。适合可观测性、用户行为分析、广告报表等海量数据分析场景。

核心特性

  • 列式存储 + 向量化执行
  • MergeTree 引擎族
  • 实时数据插入 + 异步合并
  • 物化视图 + AggregatingMergeTree
  • 分布式查询 + 分片
  • 支持 SQL + JSON 导入

从业务负载选择数据库

数据库选型首先看负载模型:事务、分析、搜索、缓存、文档、日志与实时看板的需求完全不同。

场景优先选择常见组合关键指标避坑
订单/支付/库存MySQL / PostgreSQL主库 + Redis 缓存事务、锁、主从延迟、恢复时间不要用 Redis/ES 承担强事务主库
报表分析 / OLAPClickHouseKafka + ClickHouse列存压缩、写入吞吐、聚合延迟不适合频繁小事务更新
全文搜索ElasticsearchPostgreSQL/MySQL + ES召回率、索引刷新、分片大小ES 不是事务数据库
热点缓存RedisDB + Redis + MQ命中率、内存、淘汰策略、雪崩保护持久化不等于强一致
灵活文档MongoDBMongoDB + Redis文档模型、索引、聚合管道Schema-free 不等于无规范
嵌入式/本地存储SQLiteApp + SQLite文件锁、备份、迁移脚本不适合多写高并发服务端

OLTP

强调事务一致性、低延迟点查、索引命中和锁控制,适合业务主库。

OLAP

强调批量写入、列式压缩、复杂聚合和扫描吞吐,适合报表分析。

Cache

用内存换延迟,关注过期策略、击穿/穿透/雪崩和热点 Key。

Search

强调分词、相关性排序、倒排索引和近实时检索,不适合强事务。

Document

适合对象结构变化快、嵌套数据多的业务,但仍需字段规范与索引设计。

运维维度对比

备份恢复主库要验证恢复流程;Redis/ES/ClickHouse 也要有快照和重建方案。
高可用关注自动故障转移、脑裂保护、复制延迟和客户端重连。
索引维护慢查询、低选择性索引、过多复合索引都会拖慢写入。
监控指标QPS、P95、连接数、锁等待、Buffer 命中率、磁盘 IO、复制延迟。

常见组合架构与误区

MySQL + Redis

典型交易系统:MySQL 负责事务,Redis 缓存热点。注意缓存一致性与失效策略。

PostgreSQL + Elasticsearch

结构化数据在 PG,复杂全文检索同步到 ES。注意 ES 索引重建和最终一致性。

Kafka + ClickHouse

日志/行为实时分析常用组合。注意批量写入、分区设计和冷热数据管理。

选型误区

不要把 Redis 当唯一主库;不要用 ES 做资金流水;不要让 SQLite 承担多写服务端并发。

🧭 场景选型推荐

六大典型数据场景的首选与备选。时序与图属于本页 8 款之外的延伸选型,列出供组合架构参考。

场景首选备选选择理由
缓存 / 会话RedisMemcached、KeyDB数据结构丰富、微秒级延迟、客户端生态最广
文档存储MongoDBPostgreSQL JSONB、Couchbase文档模型灵活、分片开箱即用;字段能规范时 JSONB 更省一套运维
关系 / 事务MySQL 或 PostgreSQLMariaDB、TiDB(超大规模)事务与生态最成熟;PG 约束与查询能力更强,MySQL 人才储备更充足
全文搜索ElasticsearchOpenSearch、Meilisearch(轻量)倒排索引 + 分词相关性排序成熟;轻量场景可用嵌入式方案
时序数据ClickHouse / TDengineInfluxDB、Prometheus(监控指标)列存压缩比高、写入吞吐大;监控指标场景 Prometheus 生态更贴合
图关系Neo4jNebulaGraph、JanusGraphCypher 查询直观、多跳性能好;超大规模分布式可选 NebulaGraph
数据库选型决策
按数据形态选型:先问结构与一致性要求,再问查询方式,最后才是引擎名字

💰 成本与运维维度对比

选型不只看功能匹配,还要评估团队要为它付出多少学习与运维成本。

数据库学习成本运维复杂度云托管成熟度社区活跃度
MySQL低(SQL 标准入门)中(主从 / 分库分表需经验)高(各大云均有成熟 RDS)很高,资料最全
PostgreSQL中(功能面广)高(主流云 + 专项托管)很高,版本迭代快
MariaDB低(MySQL 迁移友好)中(部分云支持)中,社区规模小于 MySQL
SQLite极低极低(零配置)—(嵌入应用内,无需托管)高,文档质量极佳
Redis低(命令简单)中(持久化 / 集群 / 大 Key 治理)很高(云厂商标配)很高
MongoDB中(聚合管道需练习)中高(分片集群调优)很高(Atlas 官方托管)
Elasticsearch高(DSL 与分片模型)高(JVM 调优、分片规划)高(Elastic Cloud 等)高,许可变更需关注
ClickHouse中高(引擎族概念多)中高(合并 / 分片 / 副本运维)中(可选云服务较少)高,演进非常快

🔀 混合架构实践

真实系统几乎都是多库组合:让每种数据库只做它最擅长的事,再用同步机制把它们串起来。

典型组合:MySQL + Redis + ES 的分工

MySQL — 事实之源

唯一写入权威,承载事务与强一致数据,所有变更先落主库。

Redis — 加速层

缓存热点读结果、会话与计数器;失效策略与缓存一致性是核心课题。

Elasticsearch — 检索层

承接复杂条件搜索与日志分析,数据由主库异步同步,允许秒级延迟。

组合纪律

只有 MySQL 可作为强一致写入源;Redis / ES 上的数据必须可随时重建。

CDC 同步

基于 binlog / WAL 订阅变更(Debezium / Canal),对业务代码零侵入,是首选方案。

双写

代码同时写两个库,实现简单但要面对不一致窗口,必须配合对账补偿。

EL / 定时抽取

批量抽取-转换-加载,适合报表与离线分析,容忍小时级延迟。

选型一句话

低延迟选 CDC、可容忍偏差选双写、离线分析选 EL;无论哪种都要有对账任务兜底。

📊 容量与成本速算

容量评估和成本测算不必精确到个位,但要有量级感:这张表帮你快速校准经验值,避开「2000 万行必须分表」这类机械结论。

对照项经验值 / 量级结论与反驳
单表 2000 万行经验值的来源:按行较大 + B+ 树 3 层高度的早期估算不要机械套用——行窄、内存充足时 5000 万~1 亿照样能跑;真正的红线是 B+ 树层数涨到 4 层、缓冲池命中率下滑
内存能装下热数据吗InnoDB 缓冲池命中率 > 99% 为健康线热数据小于 buffer pool 时性能最好;命中率跌破 95% 说明内存不够或索引设计差,加内存比加机器更先见效
SSD 与内存价格每 GB 内存约为 NVMe SSD 的 10~30 倍结论:用 SSD 扩容量、用内存保热数据;随机读密集场景优先砸内存,顺序扫描 / 冷数据放 SSD 足够
云托管 vs 自建云托管总价常为自建云盘成本的 1.5~3 倍成本项逐项比:实例 + 存储 + 备份 + 流量 + 高可用 + DBA 人力;团队无专职运维时云托管隐性更省,规模化后自建或混部更划算
备份存储倍数备份存储常达数据量的 2~5 倍全量 + 增量 + 多版本保留 + 异地容灾逐层翻倍;预算容量时先算保留期与副本数,再谈去重压缩能省多少

🚚 迁移决策清单

换库、上云、分库分表都算迁移:开工前先过一遍这 6 项,任何一项答不上来都说明方案还没准备好。

决策项判断标准应对方案
数据量与迁移窗口全量导出导入耗时估算 + 业务可接受的中断时长TB 级用物理复制 / 快照克隆而非逻辑导出;数据量大到窗口装不下,就走「全量同步 + 增量追平」不停机方案
停机窗口能否接受分钟级只读或停写能接受则「停写 → 追平 → 切读」最简单;不能接受则必须 CDC 双跑 + 原子切换域名 / 配置,演练两次再上线
双写风险双写期间任一侧失败都会产生不一致以旧库为准、新库异步补写;写失败要落补偿队列重试;绝不让双写变成「两侧都成功才算成功」的分布式事务
回滚方案切换后多久内还能一键回退反向同步先行:新库写回旧库的链路要先验证;回滚窗口期内旧库保持可写,过期后回滚成本陡增,要把窗口写进预案
一致性校验工具行数、抽样、全量 checksum 三级校验MySQL 用 pt-table-checksum / pt-table-sync,跨异构库写对账任务按主键分块比对;校验通过才能切流
灰度切流按比例、按租户 / 用户维度逐步放量1% → 10% → 50% → 100%,每档观察错误率与延迟;读先切、写后切,出问题只回滚受影响的那部分流量