深入理解 RDBMS | 青训营笔记

85 阅读3分钟

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

深入理解 RDBMS

经典案例

  • 红包雨:

    • 事务 -> 由一组SQL组成的一个程序执行单元, 满足 ACID
    • ACID -> 原子性,一致性,隔离性,持久性
    • A -> 不可分割,要么全做,要么不做
    • C -> 数据的完整一致性,操作逻辑的合法性
    • I -> 事务之间隔离,互不影响
    • D -> 对数据的更新永久化,不会丢失

发展历史

前 DBMS 时代

  • 人工管理 结绳、记账、打孔机(1890)
  • 文件系统 1950 -> 磁盘时代

DBMS 时代

1960 -> 数据库管理系统(DBMS)

DBMS -> 按照某种数据模型来组织、存储和管理数据的仓库

数据模型 -> 网状模型、层次模型、关系模型

网状模型 -> 1964,第一个数据库系统,通用电气 IDS 诞生,1970年代流行,占主导地位,网状结构

层次模型 -> 1968 IBM,第一个大型商用数据库,树形结构

关系模型 -> 1970 IBM,E.F.Codd 博士提出。1979 Oracle开始将关系型数据库商业化

网状模型层次模型关系模型
优势方便直接描述关系结构简单将实体以及之间关系通过二维表结构表示
劣势结构复杂,难用无法表示多对多关系关联查询效率低,规范化

SQL 语言

1974 IBM,将 Codd 关系数据库的 12 条准则的数学定义以简单的关键字语法表现出来,提出 SQL。

  • 语法接近自然语言
  • 高度非过程化
  • 面向集合的操作方式
  • 语言简洁,易学易用

过程化的语言就是说我告诉计算机该怎么做,用编程语言,一步一步的操作都写明,然后执行。 而非过程化的语言就是说相对简要的告诉计算机|软件我想要什么,让部分操作通过计算机|软件自己内部去解决

关键技术

一条 SQL 的一生

SQL -> RDBMS -> Parser -> Optimizer -> Executor -> Data File -> Result

SQL 引擎

  • Parser 解析器,做词法、语法、语义等分析

    • 保留字、表名、常量、运算符、结束符
    • 语法分析,生成语法树
    • 语义分析,校验合法性
  • Optimizer 优化器

    • 基于规则的优化

      • 条件化简

        将条件(a = 5 and b > a) 化简为 (a = 5 and b > 5)

      • 表连接优化

        优先小表进行连接

      • Scan 优化

        数据库通过索引协助快速查询和更新数据,主要是通过 B+ 树的结构

        优先级:唯一索引 > 普通索引 > 全表扫描

    • 基于代价的优化

      • 时间、资源(IO、CPU、NET、MEM)
  • Executor 执行器

    • 火山模型:每个操作独立出来执行,层层递归

      每个算子独立,没有耦合,结构清晰,但是多次递归调用,CPU效率低

    • 向量化模型:使用批处理,相同操作一批一批执行

      CPU cache 命中率高,函数调用次数减少,可利用CPU 的 SIMD 机制

    • 编译执行:把所有操作写到一个执行函数中

      通过动态编译技术 LLVM ,动态生成 SQL 的执行代码