这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
本文是对于掘金课程的课程笔记,针对课程内容的一些重难点、本人在学习RDBMS知识时候进行的简单记录。
一、本堂课的重点内容
- 经典案例
- 发展历史
- 关键技术
- 企业实践
二、详细知识点介绍
经典案例
红包雨:
- 从抖音账户扣1个亿
- 给羊老师账户加上1个亿
事务:由一组SQL语句组成的一个程序执行单元,需要满足ACID特性
- A 原子性:要么都发生,要么都不发生
- C 一致性:业务逻辑一致性(银行转账,每个操作必须是合法的)
- I 隔离性:一个事务不影响另一个事务(抢了两个亿,但是两个操作同时进行,最终写成+1个亿)
- D 持久性:修改永远持久在数据库中
- 高并发
- 高可靠
发展历史
- 人工管理
- 文件系统
- DBMS时代(数据库管理系统)
DBMS数据模型:
- 网状模型:优势在于能直接描述现实世界,存取效率高;劣势在于结构复杂,用户不易使用
- 层次模型(与网状模型最大的不同是每一个节点最多有一个父节点):优势在于结构简单,查询效率高;劣势在于无法表示M:N的关系,遍历子节点必须经过父节点
- 关系模型:优势在于可以表示M:N的关系,劣势在于关联查询效率不够高,关系必须规范化
SQL语言:
- 语法风格接近自然语言
- 语言简洁,易学易用
关键技术
一条SQL的一生:
Router->RDBMS->Parser->Optimizer->Executor->Data File+Log File,最后返回RDBMS
Parser:一般分为词法分析(有点类似NLP)、语法分析、语义分析
为什么需要一个优化器(Optimizer)?
选择最好的路径,类似我们使用高德地图导航,有多种路线,选择最优的
Executor:
- 火山模型:每个Operator调用Next操作访问下层Operator,获得下层Operator返回的一行数据,经过计算之后将数据返回给上层。
- 向量化:每个Operator每次操作计算的不再是一行数据,,而是一批数据(Batch N行数据),计算完成后向上层算子返回一个Batch
存储引擎
- InnoDB
- Buffer Pool
- Page
- B+ Tree
事务引擎
- Atomicity与Undo Log
- Isolation与锁
- Isolation与MVCC
- Durability与Redo Log
企业实践
问题与挑战:
- 大流量:Sharding,业务数据进行水平拆分,代理层进行分片路由
- 流量突增:扩容,扩容DB物理节点数量,利用影子表进行压测;代理连接池
- 稳定性&可靠性:3AZ高可用(三机房部署,proxy,监控报警,HA),HA管理
三、课后个人总结
本节课重点讲了关系型数据库管理系统的内容,从内部结构,存储引擎,事务引擎等方面介绍了关系型数据库的各种概念,也让我对关系型数据库的内部原理有了深入的了解。