目录
3. 存储机制:B+ 树、LSM-Tree、跳表与哈希的交响
1.基因与定位:SQL、NoSQL、Cache 的三国杀
维度 | MySQL | MongoDB | Redis |
---|---|---|---|
类型 | 关系型(SQL) | 文档型 NoSQL | 内存键值型 Cache |
定位 | 系统记录、交易 | 内容、日志、实时分析 | 缓存、队列、计数器 |
CAP 倾向 | CP(InnoDB) | AP(可调成 CP) | CP(单线程) / AP(Cluster) |
语言 | SQL | JSON-like | 命令行 / Lua |
最大卖点 | 事务、JOIN、稳定性 | 灵活、横向扩展 | 亚毫秒延迟、丰富结构 |
2. 数据模型与 Schema 哲学
2.1 MySQL
• 行列二维表,严格类型,范式与反范式之争。
• 改动列需 DDL,8.0 秒级 Online DDL。
2.2 MongoDB
• BSON 文档,最大 16 MB;字段可嵌套数组、GeoJSON。
• Schema Validation:validator 规则平衡灵活与规范。
2.3 Redis
• Key-Value,Value 支持 10 种数据结构。
• Key 命名设计:business:object:id:field
,避免大 Key 热 Key。
3. 存储机制:B+ 树、LSM-Tree、跳表与哈希的交响
3.1 MySQL
• InnoDB 聚簇 B+ 树,页 16 KB,Buffer Pool 缓存。
• redo log WAL + undo log MVCC。
3.2 MongoDB
• WiredTiger:LSM-Tree(实际为 B+ 树 + checkpoint),压缩 snappy/zstd,cacheSizeGB 60%。
• Journal (WAL) 100 ms 刷盘。
3.3 Redis
• 跳表+dict(ZSet)、ziplist/quicklist(List)、intset(Set)。
• RDB 快照 + AOF 命令追加;6.0 多线程 IO。
4. 事务与一致性:ACID、BASE、最终一致
维度 | MySQL | MongoDB | Redis |
---|---|---|---|
事务粒度 | 行级、MVCC | 文档级、4.0 多文档 | 单命令、MULTI/Lua |
隔离级别 | RR/RC/Serializable | 快照隔离(RR) | 无隔离(单线程) |
分布式事务 | XA、TCC、2PC | 支持分片事务 | RedLock、Lua 脚本 |
一致性策略 | 强一致 | 可调:majority / local | 主从异步 / wait aof |
5. 高可用与分布式
5.1 MySQL
• 主从 + GTID + MGR(Paxos)。
• 分库分表:ShardingSphere、Vitess。
5.2 MongoDB
• 复制集:Primary + Secondaries,自动故障转移 5–12 s。
• 分片:Zone Sharding、全球集群。
5.3 Redis
• Sentinel:三节点投票,30 s 内切换。
• Cluster:16384 槽位,在线迁移;6.2 支持 TLS + ACL。
6. 性能画像
指标 | MySQL | MongoDB | Redis |
---|---|---|---|
延迟 | 1–10 ms | 1–5 ms | 0.1–0.5 ms |
吞吐 | 10 k–100 k QPS | 100 k–1 M QPS | 1 M–2 M QPS |
瓶颈 | 磁盘 IO、锁冲突 | CPU、网络、分片热点 | 内存、网络、fork |
水平扩展 | 分片复杂 | 原生分片 | Cluster 16384 槽 |
7. 索引全景
类型 | MySQL | MongoDB | Redis |
---|---|---|---|
聚簇 | 主键 | _id | 无 |
二级 | 普通/唯一 | 单字段、复合、TTL | 无(键就是索引) |
地理 | 5.7+ InnoDB | 2dsphere、2d | GEOADD、GEORADIUS |
全文 | FULLTEXT | text index | RediSearch 模块 |
位图 | 无 | 无 | SETBIT、BITCOUNT |
8. 安全与合规
• 传输:MySQL TLS1.3、MongoDB TLS1.3、Redis 6.0 TLS1.3。
• 认证:MySQL SHA-256、MongoDB SCRAM-SHA-256、Redis ACL。
• 审计:MySQL Audit Plugin、MongoDB Atlas Audit、Redis ACL LOG。
• 加密:MySQL TDE、MongoDB Encrypted Storage Engine、Redis Enterprise TEE。
9. 典型场景分工与融合架构
9.1 电商秒杀
• MySQL:订单、库存、支付(强一致)。
• MongoDB:商品详情、用户行为日志(灵活)。
• Redis:库存扣减、分布式锁、排行榜(缓存+原子计数)。
9.2 实时推荐
• MongoDB:用户画像、标签。
• Redis:实时特征缓存、BloomFilter 去重。
• MySQL:推荐结果持久化、报表。
9.3 物联网
• MongoDB Time Series:海量传感器数据。
• Redis Stream:边缘网关消息队列。
• MySQL:设备元数据、账单。
10. 选型 5W2H 框架
问题 | 思考维度 | 结论示例 |
---|---|---|
What 数据 | 结构化交易 | MySQL |
半结构化内容 | MongoDB | |
高频缓存 | Redis | |
Who 用户 | 开发团队熟悉 SQL | MySQL |
Where 部署 | 云托管还是自建 | Atlas / RDS / Redis Cloud |
When 规模 | TB 级、并发 1 M | MongoDB 分片 + Redis Cluster |
Why 需求 | 强事务 vs 最终一致 | MySQL vs MongoDB |
How 成本 | 内存贵 vs 磁盘便宜 | Redis 64 GB 以内,MySQL 大容量 |
11. 2025 最新功能雷达
• MySQL:HeatWave Lakehouse、AI Vector、InnoDB 并行 DDL。
• MongoDB:Atlas Vector Search、Queryable Encryption、Time Series Window Functions。
• Redis:Redis 7.2 Functions、ACL LOG、Sharded Pub/Sub、RedisRaft(强一致)。
12. 常见误区与踩坑实录
12.1 MySQL
• 误用 ENUM 存大量值 → 转 TINYINT+字典表。
• VARCHAR(255) 过度 → 行溢出,影响 Buffer Pool。
12.2 MongoDB
• 文档 16 MB 放图片 → 转 GridFS 或对象存储。
• 片键单调递增 ObjectId → 热 Shard。
12.3 Redis
• KEYS * 线上阻塞 → 用 SCAN。
• 大 Key 100 MB → 拆 Hash 分片或使用 Redis Modules。
13. 未来趋势
• NewSQL:TiDB、CockroachDB 融合 MySQL 协议与分布式。
• Serverless:MongoDB Atlas Serverless、Redis 7.2 Functions 无服务器。
• AI-Native:向量数据库(Milvus、Pinecone)与 Redis Vector、MySQL HeatWave AutoML。
• 多模融合:RedisJSON、MongoDB Relational Migrator、MySQL Document Store。
14. 总结
MySQL 把数据“存得稳”,MongoDB 把数据“放得活”,Redis 把数据“用得爽”。
三者不是替代,而是协同——让稳定的数据稳如磐石,灵活的数据随需而变,热点的数据快到极致。
掌握它们,就掌握了现代后端架构的“黄金三角”。