📄 一句话概括
NoSQL 后两族:面向文档型=一条数据一个袋子,袋子里的字段可以随手长(MongoDB);图型=节点加边专治复杂关系(Neo4j)——一个治【结构不齐】,一个治【关系太密】。
📝 本节和前面几节的关系
2-6 看了键值型(快)和面向列型(省);本节收掉家族后两族,并把全章串起来——图型正是 2-1 里【网状模型】思想的现代复活,本章就此闭环。
一、面向文档型:袋子模型
面向文档型(Document-Oriented):每条数据是一个文档——通常长成 JSON 的样子:
{
"id": 1001,
"name": "张三",
"tags": ["VIP", "宜昌"],
"address": { "city": "宜昌", "street": "西陵一路" }
}
看三个特点:
- 一个文档一个袋子:这位顾客的全部信息装在一个文档里,取的时候整袋拿走——不像关系型要把【用户表】【地址表】拆开再连接
- 袋子里的字段随手长:张三有
tags字段,李四可以没有;今天想加【会员等级】字段,新文档直接写,老文档不用动 - 嵌套:字段里还能再套结构(
address里套城市和街道)——1-1 那种【树】装在了一个文档里
生活原型:档案袋——每个人一个袋子,袋里装什么、装几页,各人各不一样;办事时整袋调出,不用跑三个科室各抄一张表。
代表产品:MongoDB——NoSQL 里知名度最高的一个,Web 后端大量使用。
二、文档型强在哪、弱在哪
强:结构灵活、读写顺手。
- 字段不齐、频繁变化的数据(商品描述、用户资料、内容采集)不用为【表结构怎么定】发愁
- 读一条完整对象一次拿全,不用连接
弱:跨文档的复杂关联弱。
- 【所有买过台灯的宜昌 VIP 顾客】这种多条件交叉查询,比关系型费劲;袋子里各管各,连接那一套(2-3)它没有
三、图型:节点加边
图型(Graph):数据 = 节点(Vertex)+ 边(Edge)+ 属性。
(张三)──朋友──(李四)
│ │
关注 点赞
│ │
(王五)──同事──(赵六)
- 节点=实体(人、商品、地点)
- 边=关系(朋友、买了、住在)——边可以带方向、带属性(【朋友】还是【同事】、认识多久)
生活原型:地铁线路图——站是节点、线路是边;【两站之间怎么换乘最少】这种问题,天然要在图上找路径。
代表产品:Neo4j——社交网络、推荐系统、风控(【你的好友的好友骗过人】)的主力。
四、图型强在哪、弱在哪
强:关系查询一步到位。
- 【张三的朋友的朋友里有谁姓李】——关系型要先自连接好几轮(表自己连自己,越连越慢),图上就是顺着边走两步的事
- 关系层数越深,图的优势越大
弱:批量统计不是它的菜。
- 【全表求和】【按月出报表】这类活,还是关系型和面向列型的地盘
首尾呼应:2-1 里网状模型的死穴是【线乱难维护】;图型数据库用专门的存储和查询引擎把【线】管好了——网状思想没有死,换了个地方活得很好。
五、NoSQL 四族总表(本节收拢全家族)
| 类型 | 组织方式 | 代表 | 最强场景 | 生活原型 |
|---|---|---|---|---|
| 键值型 | 键 → 值 | Redis | 缓存、计数 | 储物柜 |
| 面向列型 | 按列打包 | HBase | 海量批量分析 | 图书馆按类分区 |
| 面向文档型 | JSON 文档 | MongoDB | 结构灵活的对象 | 档案袋 |
| 图型 | 节点+边 | Neo4j | 深层关系 | 地铁线路图 |
选型口诀:键值求快、列存求省、文档求灵活、图求关系。
六、动手 Demo:给四个数据挑模型
数据:① 用户登录状态(几分钟就过期)② 全网商品描述(字段五花八门还常变)③ 全城公交线网【任意两站换乘方案】④ 十亿条阅读记录的月度统计。
- ① → 键值型(Redis):按键(用户ID)取状态,快、过期自动删
- ② → 面向文档型(MongoDB):字段不齐、常变,袋子最合适
- ③ → 图型(Neo4j):站点+线路就是节点+边,路径是图的本行
- ④ → 面向列型(HBase/Cassandra):海量聚合,只扫需要的列
看到什么算成功:四个选择都能用【选型口诀】各说回一句理由。
七、30 秒实验
打开微信 →【看一看】或任何【猜你喜欢】:
- 推荐系统背后就有图数据库在算【你 → 你点过赞的人 → 他们还赞过什么】——顺着边走两三步,就凑出一份推荐
- 同时你的登录态多半躺在某个键值型缓存里——你刷一次手机,NoSQL 四族可能全在岗
八、常见误区
- "文档型里的文档=Word 文档" —— 不是。这里是结构化数据记录(JSON 那种),【文档】指【一条自带结构的完整数据】。
- "图型数据库是画图的工具" —— 与画图无关:【图】是数学里的 graph(节点+边),管的是关系的存储与查询。
- "MongoDB 没有【表】所以更先进" —— 没有强制表结构是取舍不是先进:结构松了,强一致和复杂连接就弱了(2-5 的账在这里同样成立)。
自测三问(点开对答案)
1. 文档型的数据长什么样?三个特点? **JSON 式文档;一对象一袋整存、字段可各不相同、支持嵌套**。 2. 图型的两个基本零件是什么?最强的查询是什么? **节点+边;顺边走的多层关系查询(朋友的朋友)**。 3. 四族选型口诀? **键值求快、列存求省、文档求灵活、图求关系**。- ☑ 第三章 操作数据库-SQL的使用方法 —— 已完结:外连接、LEFT JOIN、RIGHT JOIN-获取标准记录及与之匹配的记录(22 条 SQL 命令:建库建表 → 增删改查 → 函数分组 → JOIN 三族)
相关笔记
- 键值类型、面向列型-NoSQL数据库的种类1-键与值的组合模型 —— 上一节:家族前两族,本节收完后两族
- SQL命令-操作数据库的准备工作 —— 下一章起点:训练场与贯穿示例表
- 外连接、LEFT JOIN、RIGHT JOIN-获取标准记录及与之匹配的记录 —— 下一章知识地图:JOIN 收官
- 数据模型、层次模型、网状模型、关系模型-不同的数据存储方式 —— 首尾呼应:图型=网状思想的现代复活
- 🗄️ 数据库基础 · 索引 —— 全课路线图