何时选哪种库
决策树与反模式。
30 分钟
何时选哪种库
Specialty 库再多,落地靠 决策树 + 反模式清单。本课把 sdb-intro 至 sdb-cap 收成 可复述的选型流程,并与 orm-essentials、mongodb-essentials 等主 track 对齐。
学习目标
- 按数据形状与访问模式走一遍选型决策树
- 识别「一种库包打天下」等常见反模式
- 能为小场景写出「主库 + 辅助库」组合及理由
决策树(简版)
需要 ACID 多表事务?
是 → PostgreSQL / MySQL(orm + postgresql)
否 ↓
数据主要是文档、嵌套、schema 多变?
是 → MongoDB;AWS 无运维 → DynamoDB
否 ↓
读写模式是否固定分区键 + 超高写入?
是 → Cassandra / ScyllaDB / DynamoDB
否 ↓
核心是关系遍历(几度路径、推荐环)?
是 → Neo4j / DGraph
否 ↓
需要全文/联想/日志检索?
是 → Elasticsearch(Solr 存量除外)
否 ↓
亿级行聚合、BI、留存漏斗?
是 → ClickHouse(ETL 自 OLTP)
否 ↓
移动端直连、快速 MVP?
是 → Firebase Firestore + Rules
否 → 回到关系库或 Redis 缓存(scaling-essentials)
每一步都问:团队能否运维?账单能否承受?有无合规约束?
反模式
| 反模式 | 为何危险 | 更好做法 |
|---|---|---|
| 用 ES 当主库 | 无事务、丢数据难追 | PG 权威 + ES 索引 |
| Mongo 存一切 | 报表 JOIN 痛苦 | 核心实体 orm-er 规范化 |
| 图库存宽表属性 | 存储与查询浪费 | 图存关系,属性放 PG |
| 跳过 CAP 讨论 | 分区时行为未知 | 写进设计 doc,对齐 sdb-cap |
| 双主乱写 | 冲突不可解 | 单写主 + 读副本 scale-replication |
组合示例:内容平台
PostgreSQL → 用户、课程元数据(cf_track)
MongoDB → 评论、UGC 草稿
Elasticsearch → 站内搜索、标签联想
ClickHouse → 学习行为分析
Redis → 热门列表缓存
各库 边界清晰,CDC/队列同步,避免应用层双写地狱。
练习
- 为你熟悉的一个系统填决策树路径(至少 4 个节点)
- 写出一个反模式实例及改正方案
- 交叉阅读 mongo-vs-sql 与 ddb-intro
小结
决策树 + 反模式 + 多库分工——选型是可文档化的工程判断。 下一课运维:多库环境如何监控与迁移。