深入理解RDBMS | 青训营笔记

116 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记

经典案例

抖音红包雨

从一个账号扣除金额,在另一个账号增加金额

sql语句update描述上述两个步骤与自然语言很相似

RDBMS事务ACID

Transaction(事务):是有一组SQL语句组成的一个程序执行单元,需要满足ACID特性。

ACID

原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生

一致性C(Consistency):数据库事务不能破坏关系型数据的完整性以及业务逻辑上的一致性。红包雨中,账户如果金额不足,不应该被扣为负数,非法操作不能被接受。

隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其他事务运行效果

持久性(Durability):在事务完成以后,改事务所对数据库所做的更改应该持久的保存在数据库之中,不会被回滚。

高并发:单位时间处理的请求多

高可靠:服务是可靠的,特别是在一些关键的时间节点上,不能宕机

发展历史

前DBMS时代:

1956年IBM发布了第一个磁盘驱动器--Model 305 RAMAC,数据进入磁盘时代,数据管理直接通过文件系统来实现。

DBMS时代:

1960s,DBMS产生 ,DBMS就是按照某种数据模型来组织、存储和管理数据的仓库,通常按照数据模型的特点将传统数据库系统分为网状数据库、层次数据库和关系数据库三类。

网状数据库以网络的形式组织,层次数据库以树的形式组织

关系模型:

1970年IBM的研究院E.F.Codd博士发表论文,首次提出关系模型的概念。1979年Oracle首次将关系型数据库商业化。

优点:实体和联系都通过二维表结构表示,可以方便的表示M:N关系,数据访问路径对用户透明

缺点:关联查询效率不高,关系必须规范化

SQL语言:

1974年,IBM将关系型数据库的12条准则的数字定义以简单的关键字语法表现出来,提出了SQL语言(Structured Query Language)

Java等编程语言是过程化的语言,需要明确操作流程

SQL特点:

语法风格接近自然语言

非过程化

面向集合的操作方式

语言简洁,易学易用

DB发展历史

关键技术

SQL的一生

用户请求到达RDBMS之后,这条SQL语句首先经过Parser 语法解析器,生成一个语法树(AST)给到优化器(Optimizer),根据语法树生成如何执行的Plan,之后到达执行器,执行器从文件中读取数据,写入数据,写入日志,并将结果返回给用户。

Parser Optimizer Execcutor是SQL引擎,Data File,Log File是存储引擎

Parser

分为词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analysis)

词法分析就是去提取SQL中的一些组成部分,语法分析就是根据组成部分生成语法树,即特定的数据结构,最后进行语义分析,做一些合法性校验。

Optimizer

基于规则的优化(RBO rule base optimizer)

  • 条件化简:

a>5 and a<5 =>false

  • 表连接优化:例如:总是小表先连接
  • Scan优化:

唯一索引、普通索引、全表扫描

基于代价的优化(CBO cost base optimizer)

选择代价最低的方案去执行

Executor

向量化:

编译执行:

动态编译技术:通过解析和优化后得到的执行计划,之后将根据计划树来动态生成执行的代码路径。

存储引擎-InnoDB

Buffer Pool

每个页面64KB 每个chunk128M

Page

Buffer Pool中将内存分为小的64KB的空间,就是一个Page。

B+ Tree

事务引擎

Atomicity被和Undo Log

Undo Log是逻辑日志,记录的是数据的增量变化,利用Undo Log可以进行事务回滚,保证事务的原子性

Isolation与MVCC

Durability 与Redo Log