🗄️ 第二章 数据的存储方式-关系型数据库的特征
📄 一句话概括

NoSQL(Not Only SQL)=不用表这一套规矩放数据的数据库——为了【海量数据分散到一堆便宜机器上】而生,用【放松一致性】换【好扩展】。

📝 本节和前面几节的关系

2-4 算清了关系模型的账:正确性满分,但【难分散】。本节的主角 NoSQL 正是冲着这个缺口来的。记住关系是【互补不是取代】:2-6、2-7 认 NoSQL 家族的四张脸。

一、NoSQL 是什么

NoSQL = Not Only SQL(不仅仅是 SQL)。

注意不是【拒绝 SQL】,而是【跳出关系模型那一套表结构】:不强制表、不强制固定字段、不把【强一致性】当最高目标——换来的是灵活的结构和天然的分散能力。

二、它为什么会出现

互联网公司(谷歌、亚马逊这一批)遇到的新场面:

  1. 数据量大到天文数字——几亿用户、每天几百亿条记录,一台机器装不下
  2. 写入多、读取多、并发高——关系模型的多表连接和事务协调扛不住
  3. 数据长得五花八门——聊天记录、点赞、商品描述、好友关系,很多根本没有整齐的【表】结构

对这些场景,2-4 的缺点(连接延迟、难分散)被无限放大;而关系模型的强项(强一致性)反而不是最要命的——点赞数晚一秒对上,天塌不下来。

于是换一套取舍:

关系型 NoSQL
结构 严格的表+类型 灵活,每条数据可以长得不一样
一致性 强(绝不不一致) 放松(允许短暂不一致)
扩展 难分散(加机器难) 天生好分散(加机器就扩容)
适合 账务、订单、库存 社交、缓存、日志、海量简单读写

三、放松一致性怎么理解

生活比喻:银行余额(关系型)和微博点赞数(NoSQL)。

用【暂时不准】换【扛得住海量】——这就是 NoSQL 的核心取舍。

四、NoSQL 家族预览

按数据组织方式分四大类(2-6 讲前两类,2-7 讲后两类):

类型 组织方式 代表 一句话
键值型 键 → 值 Redis 储物柜
面向列型 按列族存 HBase、Cassandra 列打包
面向文档型 一条条文档 MongoDB JSON 袋子
图型 节点+边 Neo4j 关系网

五、动手 Demo:给四个场景选模型

只做判断,不装软件。每个场景选【关系型】还是【NoSQL】,说一句理由:

  1. 银行转账记账 ——?(涉及钱的一致性)
  2. 微博点赞计数 ——?(海量、可短暂不准)
  3. 商品搜索的关键词缓存 ——?(读多写多、结构简单)
  4. 订单和库存管理 ——?(多表关联+事务)

参考答案:关系型 / NoSQL / NoSQL(键值型)/ 关系型。核心不是答案,是每次都从【要不要强一致、要不要连接、量多大】三个维度想。

六、30 秒实验

想想你手机里的两类 App:

七、常见误区

  1. "NoSQL=不用 SQL 语言的数据库" —— NoSQL 的本意是 Not Only SQL;有些 NoSQL 产品也支持类 SQL 的查询语法。区别在数据模型(不用表),不在【能不能说 SQL】。
  2. "NoSQL 要取代关系型数据库" —— 互补。银行核心不可能换 NoSQL,微博点赞也没必要用关系型硬扛。
  3. "放松一致性=数据会乱" —— 放松的是【时刻强一致】这一条,换来扩展能力;设计得当的 NoSQL 系统最终一致,且该强一致的字段照样可以另做安排。
自测三问(点开对答案) 1. NoSQL 的全称和本意? **Not Only SQL——不仅仅是 SQL**;跳出关系模型,不是拒绝 SQL 语言。 2. NoSQL 用什么换什么? **用放松一致性,换灵活结构+天然可分散**。 3. 【最终一致】是什么意思? **允许短暂不一致,但最终会对上**——点赞数晚一秒的那种容忍。

相关笔记