本章要回答的三个问题:NoSQL 内部有哪些流派,划分依据是什么?每一派的代表产品各自为什么而生?面对一个具体需求,第一直觉应该把哪个门派请进候选名单?
第 1 章把 NoSQL 当作一个整体与关系型对比,但真实世界没有"一个 NoSQL",只有五种数据模型哲学、几十个具体产品。不先建立门派版图就直接跳进 MongoDB 或 Redis 的命令手册,学到的知识会是散点:你知道怎么用,但不知道为什么用它,更不知道什么时候不该用它。
本章采用巡礼的方式组织:把 NoSQL 世界按数据模型划成五大门派——键值、文档、列族、图,外加由时序、搜索、向量构成的新兴门派。每一节登门拜访一派,按同样的四段结构展开:历史动因(它为什么在那个年代出现)、数据模型(数据以什么形状存放)、代表产品(市面上选谁)、实战取舍(什么场景请它,什么场景别请)。四段结构在五节间保持一致,方便你横向比较。
读完本章,你应当能够:拿到一个存储需求,先问三个问题(访问模式是什么、查询模式是否稳定、规模量级多大),然后独立给出候选门派与两个备选;能说出每个门派至少一个代表产品的定位与一例典型误用;并且理解本章的速写如何被第 3 章的通用内功与第 4、5 章的深访所承接。
| 节号 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 2.1 | 键值门派凭什么立足 | 字典哲学 + 三大代表产品对比 |
| 2.2 | 文档门派适合什么 | 文档模型 + 嵌入与引用的抉择 |
| 2.3 | 列族门派为谁而生 | 宽表模型 + 查询优先建模 |
| 2.4 | 图门派何时不可替代 | 关系遍历 + 无索引邻接 |
| 2.5 | 新兴门派解决什么 | 时序、搜索、向量各自的本命场景 |
各节按"模型由简到繁"排列:键值最简,文档在其上加了内部结构,列族把维度铺开,图彻底改变数据的组织方式,新兴门派则按数据的时间或语义维度特化。这个顺序也是选型时的思考顺序——从最简单的模型试起,复杂度只在必要时引入。
读完第 1 章即可。特别需要带着 1.3 节的六维对比表和 1.4 节的"特点 × 代价"框架进入本章——每个门派的取舍分析都会调用它们。
把五派并排放在一起,是建立地图最快的方式。下表按"你要解决的问题"反向索引门派,查表比背概念管用。
| 门派 | 数据模型 | 代表产品 | 擅长 | 不擅长 | 何时选它 |
|---|---|---|---|---|---|
| 键值 | 键 → 不透明值 | Redis、Memcached、etcd | 按主键极速读写、计数器、会话 | 按内容查询、复杂统计 | 缓存、限流、分布式锁、会话 |
| 文档 | 结构化文档(JSON/BSON) | MongoDB、Couchbase | 结构常变、聚合体一次读完 | 多跳关联、跨文档强一致 | 内容、目录、设备档案、订单聚合 |
| 列族 | 行键 → 列族 → 列 | Cassandra、HBase、Bigtable | 海量写入、按行键范围扫描 | 即席查询、二级索引能力弱 | 消息、日志、物联网写入、宽表 |
| 图 | 点 + 边 + 属性 | Neo4j、NebulaGraph、JanusGraph | 多跳关系遍历、路径与社群 | 批量扫描、账务事务 | 社交、风控团伙、知识图谱、拓扑 |
| 时序/搜索/向量 | 时间序 / 倒排 / 高维向量 | 见 2.5 | 单一负载做到极致 | 通用能力 | 监控指标、全文检索、语义相似检索 |
不要试图一次记住所有细节。 这一章的目标是建立坐标感——知道每派解决什么问题、边界在哪。真正的机制细节在第 4、5 章以 MongoDB 与 Redis 为样本展开,届时回头对照 2.1 与 2.2 的速写,理解会深一层。
特别留意"不擅长"这一列。 选型失败的绝大多数案例,不是因为不了解产品的优点,而是因为没认真读过它的缺点。评审会上花在"它不擅长什么"上的时间,应该不少于花在"它能做什么"上的时间。
记住一条通用规律:越是针对性优化的产品,通用能力越弱;越是通用的产品,单一负载下的效率越低。选型就是在这个光谱上找位置,没有两头都占的便宜。
本章的速写刻意保持在一万英尺高度,具体产品的命令与机制全部留给后面:文档门派将在第 4 章以 MongoDB 为样本深访八节,键值门派将在第 5 章以 Redis 为样本深访八节,列族与图门派的通用内功(一致性、建模、扩展)则在第 3 章统一修炼。读本章时不必死记命令,记住每派"为什么长成那样"即可。