📄 一句话概括
NoSQL(Not Only SQL)=不用表这一套规矩放数据的数据库——为了【海量数据分散到一堆便宜机器上】而生,用【放松一致性】换【好扩展】。
📝 本节和前面几节的关系
2-4 算清了关系模型的账:正确性满分,但【难分散】。本节的主角 NoSQL 正是冲着这个缺口来的。记住关系是【互补不是取代】:2-6、2-7 认 NoSQL 家族的四张脸。
一、NoSQL 是什么
NoSQL = Not Only SQL(不仅仅是 SQL)。
注意不是【拒绝 SQL】,而是【跳出关系模型那一套表结构】:不强制表、不强制固定字段、不把【强一致性】当最高目标——换来的是灵活的结构和天然的分散能力。
二、它为什么会出现
互联网公司(谷歌、亚马逊这一批)遇到的新场面:
- 数据量大到天文数字——几亿用户、每天几百亿条记录,一台机器装不下
- 写入多、读取多、并发高——关系模型的多表连接和事务协调扛不住
- 数据长得五花八门——聊天记录、点赞、商品描述、好友关系,很多根本没有整齐的【表】结构
对这些场景,2-4 的缺点(连接延迟、难分散)被无限放大;而关系模型的强项(强一致性)反而不是最要命的——点赞数晚一秒对上,天塌不下来。
于是换一套取舍:
| 关系型 | NoSQL | |
|---|---|---|
| 结构 | 严格的表+类型 | 灵活,每条数据可以长得不一样 |
| 一致性 | 强(绝不不一致) | 放松(允许短暂不一致) |
| 扩展 | 难分散(加机器难) | 天生好分散(加机器就扩容) |
| 适合 | 账务、订单、库存 | 社交、缓存、日志、海量简单读写 |
三、放松一致性怎么理解
生活比喻:银行余额(关系型)和微博点赞数(NoSQL)。
- 银行余额绝不能错:你转出 100 元,所有人的账必须同时对上
- 点赞数晚一秒没关系:你点赞后,朋友那边晚 1 秒才多 1,没人在意——这叫最终一致(现在不对,但最终会对)
用【暂时不准】换【扛得住海量】——这就是 NoSQL 的核心取舍。
四、NoSQL 家族预览
按数据组织方式分四大类(2-6 讲前两类,2-7 讲后两类):
| 类型 | 组织方式 | 代表 | 一句话 |
|---|---|---|---|
| 键值型 | 键 → 值 | Redis | 储物柜 |
| 面向列型 | 按列族存 | HBase、Cassandra | 列打包 |
| 面向文档型 | 一条条文档 | MongoDB | JSON 袋子 |
| 图型 | 节点+边 | Neo4j | 关系网 |
五、动手 Demo:给四个场景选模型
只做判断,不装软件。每个场景选【关系型】还是【NoSQL】,说一句理由:
- 银行转账记账 ——?(涉及钱的一致性)
- 微博点赞计数 ——?(海量、可短暂不准)
- 商品搜索的关键词缓存 ——?(读多写多、结构简单)
- 订单和库存管理 ——?(多表关联+事务)
参考答案:关系型 / NoSQL / NoSQL(键值型)/ 关系型。核心不是答案,是每次都从【要不要强一致、要不要连接、量多大】三个维度想。
六、30 秒实验
想想你手机里的两类 App:
- 【银行/支付宝】核心转账——关系型在扛(错的代价太大)
- 【抖音/微博】刷到的点赞、播放数——NoSQL 在扛(量太大)
- 你的手机一天同时用到两者——关系型与 NoSQL 早已共存,没有谁取代谁
七、常见误区
- "NoSQL=不用 SQL 语言的数据库" —— NoSQL 的本意是 Not Only SQL;有些 NoSQL 产品也支持类 SQL 的查询语法。区别在数据模型(不用表),不在【能不能说 SQL】。
- "NoSQL 要取代关系型数据库" —— 互补。银行核心不可能换 NoSQL,微博点赞也没必要用关系型硬扛。
- "放松一致性=数据会乱" —— 放松的是【时刻强一致】这一条,换来扩展能力;设计得当的 NoSQL 系统最终一致,且该强一致的字段照样可以另做安排。
自测三问(点开对答案)
1. NoSQL 的全称和本意? **Not Only SQL——不仅仅是 SQL**;跳出关系模型,不是拒绝 SQL 语言。 2. NoSQL 用什么换什么? **用放松一致性,换灵活结构+天然可分散**。 3. 【最终一致】是什么意思? **允许短暂不一致,但最终会对上**——点赞数晚一秒的那种容忍。- ☐ 下一节(2-6 键值类型、面向列型-NoSQL数据库的种类1-键与值的组合模型)
相关笔记
- 更新成本、延迟、分散-关系模型的优点与缺点 —— 上一节:【难分散】正是 NoSQL 的出生理由
- 🗄️ 数据库基础 · 索引 —— 全课路线图