RDBMS | 青训营笔记

99 阅读2分钟

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

发展历史

  从远古时代的结绳计数到近代的账本、打孔机等,人们管理数据的方式始终为手动管理,效率低、错误率高。

  电子计算机出现后,用于计算机的存储设备(如软盘、硬盘等)也出现了,人们采用文件系统来管理数据。

  随着数据的增多,传统文件系统已经难以满足人们的需要,此时产生了数据库管理系统(DataBase Manage System,DBMS),数据库根据数据组织形式分为网状数据库、层次数据库和关系型数据库。

  • 网状数据库:实体的属性分散开来,使用图来描述属性间的联系
  • 层次数据库:根据数据类型进行分层,采用树描述数据之间的联系,一个子节点只能有一个父节点
  • 关系型数据库:实体和实体间的关系都使用二维表来表示

  1974 年 IBM 将 Codd 数据库的12条准则的数学定义以简单的关键字语法表述出来,提出了 SQL(Structured Query Language, 结构化查询语言)

关键技术

一条 SQL 的一生

  后端根据需求产生 SQL 语句并发送给 SQL 服务器后,首先使用解析器(Parser)对 SQL 语句进行解析,得到语法树(AST),AST 经优化器(Optimizer)后得到 Plan。最后由执行器(Executor)进行执行。

  Phaser可分为词法分析(Lexical analysis)、语法分析(Syntax analysis)和语义分析(Semantic analysis)等步骤。

  Optimizer 的作用是寻找可实现 AST 功能但获取更佳性能的执行方案,如对连表顺序进行优化、减少不必要的筛选条件等。优化器分为基于规则的优化器(Ruse Base Optimizer,RBO)和基于待嫁的优化器(Cost Base Optimizer,CBO)

  执行 Plan 时,可以按照算子分开,递归地执行整个 Plan,但效率较低;也可以对 Plan 进行分组,这样可提高执行效率,但千变万化的 SQL 难以做好分组,此时参考的就是动态编译执行(LLVM)技术。

存储引擎

  不同数据库系统实现了不同的存储引擎,如今广泛使用的是 MySQL 的 InnoDB 引擎。

本文若有不足之处,欢迎纠正(≧^.^≦)喵~

我的其他笔记,可在掘金或 Github( github.com/DoudiNCer/I… )阅读