这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
DBMS数据模型
- 网状数据库
- 网状数据库所基于的网状数据模型建立的数据之间的联系,能反映现实世界中信息的关联,是许多空间对象的自然表达形式。 1964年,世界上第一个数据库系统——集成数据存储(Integrated Data Storage,IDS)诞生于通用电气公司。IDS是世界上第一个网状 数据库,奠定了数据库发展的基础,在当时得到了广泛的应用。在1970s网状数据库系统十分流行,在数据库系统产品中占据主导地位。
- 层次数据库
- 1968年,世界上第一个层次数据库——信息管理系统(Information Management System,IMS)诞生于IBM公司,这也是世界上第一个 大型商用的数据库系统。层次数据模型,即使用树形结构来描述实体及其之间关系的数据模型。
- 关系数据库
- 1970年,IBM的研究员E.F.Codd博士发表了一篇名为“A Relational Model of Data for Large Shared Data Banks”的论文,提出了关系模型 的概念,奠定了关系模型的理论基础。1979年Oracle首次将关系型数据库商业化,后续DB2, SAP Sysbase ASE, and Informix等知名数据 库产品也纷纷面世。
SQL语言
1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了 SQL(Structured Query Language)语言。
- 语法风格接近自然语言;
- 高度非过程化;
- 面向集合的操作方式;
- 语言简洁,易学易用。
关键技术
一条SQL的一生
SQL引擎
- Parser
- 解析器(Parser)一般分为词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤
- Optimizer
- 基于规则的优化(RBO Rule Base Optimizer)
- 条件化简
- 表连接优化
- 总是小表先进行连接
- Scan优化
- 唯一索引
- 普通索引
- 全表扫描
- 基于代价的优化(CBO Cost Base Optimizer
- 一个查询有多种执行方案,CBO会选择其中代价最低的方案去真正的执行。
- 基于规则的优化(RBO Rule Base Optimizer)
- Executor
- 火山模型
- 每个Operator调用Next操作,访问下层Operator,获得下层Operator返回的一行数据,经过计算之后,将这行数据返回给上层。
- 优点
- 每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单
- 缺点
- 每计算一条数据有多次函数调用开销,导致CPU效率不高。
- 向量化
- 每个Operator每次操作计算的不再是一行数据,而是一批数据 (Batch N行数据),计算完成后向上层算子返回一个Batch。
- 优点:
- 函数调用次数降低为1/N;
- CPU cache命中率更高;
- 可以利用CPU提供的SIMD(Single Instruction Multi Data)机制。
- 编译执行
- 将所有的操作封装到一个函数里面,函数调用的代价也能大幅度降低。
- LLVM动态编译执行技术
- 火山模型
存储引擎-InnoDB
- Buffer Pool
- HashMap
- LRU
- B+ Tree
事务引擎
- Atomicity 与 Undo Log
- Undo Log是逻辑日志,记录的是数据的 增量变化。利用Undo Log可以进行事务 回滚,从而保证事务的原子性。同时也 实现了多版本并发控制(MVCC),解 决读写冲突和一致性读的问题。
- Isolation 与 MVCC
- 读写互不阻塞;
- 降低死锁概率;
- 实现一致性读
- Durability 与 Redo Log