深入理解RDBMS| 青训营笔记

54 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天 

本文是对于掘金课程的课程笔记,针对课程内容的一些重难点、本人在学习RDBMS知识时候进行的简单记录。

一、本堂课的重点内容

  1. 经典案例
  2. 发展历史
  3. 关键技术
  4. 企业实践

二、详细知识点介绍

经典案例

红包雨:

  • 从抖音账户扣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管理

三、课后个人总结

本节课重点讲了关系型数据库管理系统的内容,从内部结构,存储引擎,事务引擎等方面介绍了关系型数据库的各种概念,也让我对关系型数据库的内部原理有了深入的了解。