开发者学堂课程【数据库开源校企合作“数据库内核从入门到精通 ”系列课:数据库内核教学课程-数据库系统概述】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1239/detail/18418
数据库内核教学课程-数据库系统概述
内容介绍
一、数据库历史演进
二、数据库系统架构
三、系统表
四、存储引擎-概述
五、存储引擎-数据组织
六、SQL引擎-基础
七、SQL引擎-优化器
八、执行引擎
九、事务引擎-分布式事务的两阶段提交
十、事务引擎-分布式事务处理技术
十一、实战优化-资源解耦与池化
十二、实战优化-存储计算分离 ,Log AS DB
十三、实战优化-共享存储系统高可用与延迟优化
十四、实战优化-分布式MVCC事务
十五、实战优化-高可用
今天我给大家带来的是数据库内核教学课程,数据库的第一讲,数据库的系列概述。
今天的这门课程,这个跟之前的我们的PG的内核课程定位有所不同哈。那这之前,主要是做让大家了解这个数据库的,尤其是PG的,它的内核的原理,还有它的一个实现。
而这个课程,主要面向的对象,是高校的学生,希望跟这个武汉大学一些老师一起,还有就是我们阿里云内部的一些讲师一起打造一个国内高校通用的这样的数据库的一个内核课程,那这个内核课程,总共分为两部分,第一部分,就是讲理论,讲理论就是讲,各个部分的它的一些设计的一些原理。
有了原理之后,我们再根据这个,我们自己内部,对于这个pldb的一个改造的过程的一些实践,让大家做一些实践方面的一些学习和训练,就是希望打造一个国内通用的这样的一个课程啊,这个是我们的一个目标。
那今天我讲的,就是数据库,系统概述,就是这个第一节课主要就是给大家这个先整体的去介绍一下这个整个数据库系统的一个概要的一个情况,另外就是分别介绍一下各个模块,分别是要讲哪些内容,去把整个课程啊进行一个概要的一个介绍。
但它有一个基本的概念,后面,就是尤其是举内核部分的就是内核理论的部分,更多的是由这个武汉大学的各位老师来负责讲解,之后是这个内核实践,它里面内部的一些一些讲师会参与进来。
一、 数据库历史演进
出现过四位图灵奖的获得者,就是上面四位,整个数据库的发展和他们四位息息相关,接下来我们介绍四位在数据库发展过程中做出的贡献。
Bachman 在1973年利用网状数据库模型获得了图灵奖,网状数据库现在并不常见了,他的原理和现在的图数据库原理很像,他用的图论的方法,定义了节点的关系,主要用于美国军事领域,关于预测弹道相关的行业。在那个时代,数据库类型还是蛮多的,但还没有形成一统天下的局面。
Codd 提出关系型数据库的模型,对于现代数据库有了一个明确的定义,定义了数据库的表以及行和列之间的关系包括关系代数相关的应用,在当时已经能体现出来了。
在Codd关系模型出来之后IBM在1983年出了 AQL2 ,是 DB2 的前身,SML2定义了SQL的模型,包括他的优化器,包括存储相关的机制,跟现在的机制已经很像了,所以在这几十年变化是很小的,所以后来的云时代才会有这么大对的变化。SML之后IM DB2就产生了,包括Oracle它的产生,80、90年代是数据库的商业起步阶段。
Gray 在98年获得了图灵奖,主要特点在事物方面做了很多的工作,定义了数据库的模型包括日志怎么做和 Buffer各种模块给出了定义。
Stonebraker 提出了颠覆性的感念,他提出的MySQL也是当今经典的模型,他的许多言论至今仍受许多人追捧,是概念模型更加完整。
1990-2000年是分析性数据库,不得不提到我们的数仓之父Bill Inmon,他在93年出了《数据仓库》,之后出了Greenplum这样的系统,这种MPP系统的特点就是它的扩展性会很好,采用了Share Nothing的架构,包括 Teradata 它的很多的硬件包括操作系统都是他自己定义的,所以当时它是一个很封闭的一个系统,但是它的性能得到了很好地保证,近年来,国内对他的替换是很快的,主要是因为它的扩展能力,包括它每次扩容的时候,它的成本会非常高,包括成倍扩,有很多限制,会有一个停机的一个处理。
整个数据库在2000年之前,都是一个很稳定的一个状态,到了2000年即2010年的时候,出现了NoSQL的一些数据库,最典型的就是Hadoop以及谷歌的三驾马车,三驾马车在当时影响非常大。在当时人们都想装一套Hadoop的系统来进行测试,在最早的年代搭建一个环境都非常费劲,需要许多依赖来解决,并且它也不稳定,但是整套系统也得到了极大的的认可,因为确实是一个比较颠覆性的,产生了一个大数据的一个概念,数据量变得非常大。之后SPA Hana做了内存的系统,包括 Ridis内存库,包括Mongo DB 数据库,这个时期数据库百花齐放。
2010-2020年在这个阶段,最早出现颠覆性的就是 Spanner,他是2015年出现的,出来之后,大家都在效仿它的一个技术,之后出了Analytic DB 由此国内发展出来 DBMS 这样的一个系统,另一方面,亚马逊的 AWS Aurora 采用了云上得存储计算分离的架构,之后延伸出Polar DB 这样一套系统,它包含了 PG 版本,跟它都有一个很相似的技术。
之后ADB的数仓,它对标了亚马逊的Red Shift ,这个就是所谓的云延伸的一个引擎,包括分布式,多模就是在原来的 nothing 基础上把各种数据类型持续,比如说搜索、宽表,把这些能力聚合到一起,由上层统一的 SQL 引擎来操纵它,来实现多模的系统,包括 HTAP。
二、数据库系统架构
可以看到最顶层是连接的协议,比方说有 Local 的连接和远程连接的一个协议,之后进入到 SQL 的引擎,他会经过 Paraing,经过一些重写,经过优化器的优化形成一个 Plan Execulor,之后用 Plan 开始执行,这是执行器的一个工作,最后会调用到底层,各种表的提取方法,包括Buffer 的一个管理,包括锁和日志的一个管理,这些模块都会依赖事物模块,Catalog 之类的模块,来做相关的调动。
可以看到查询的编译、执行,之后调动索引和文件的相关接口,包括缓冲区,任务管理器。这里面有它的一个元数据,大家在各个阶段都会用到,大家在事物管理器、日志跟事物有关的在过程中都有涉及到。
三、系统表
每个模块都依赖系统表,我们在做系统设计的时候,最先考虑的就是系统表,如果这个位置出错,那么后面每个模块都需要修改。包括系统表是用户感知的东西,如果你发布出去想变更的话也是非常难的,我们之前也讲过 Catalog,都是存储系统的一些公共信息或者元数据的基本信息的,我们在做 Polar DB-X 设计的时候,我们从单机扩展到分布式的时候,这里面涉及到了很多的节点,包括很多CN、DN节点,GMS、CDC节点,这些节点要在元数据里面管理起来,否则的话,这些节点是怎么存在的呢,所以首先要有一个元数据来进行管理,我们需要创建一些新的系统表,来管理这些节点,包括它的IP地址的一些信息,从数据来说,你要把数据分散到各个节点,去做分片、分部、分区的处理,这样你的分片、分区信息也要在系统表里面管理起来,所以你在系统设计的时候的第一步要做很多这样的设计。
四、存储引擎-概述
引擎就是去读取数据,首先要去读取数据页,数据页是从文件里读取到Buffer Pool里面进行定位配置,看配置里面有哪些数据来进行应用。在存储引擎里面除了Buffer Pool和配置,还有淘汰算法,Interpret都是可以放在存储引擎里面进行一个算法。
五、存储引擎-数据组织
存储引擎运用段页式管理,一个文件里分为很多个 segment, segment里面又分为很多个 extent, extent里面又分为很多个 page,我们每次先扩 page 来使用,使用完再去扩展,它的好处就是文件数量比较少,但其实是多了一层管理,使其复杂程度变高, PG 它的特点就是一个表对应一个或多个文件,每一个表里面又分为一个又一个8K的数据页,数据页里面再去存数据,每个数据页有一个头,里面有很多的 Tuple 用来存数据。
六、SQL引擎-基础
在我们讲到的四位图灵奖获得者里面,斯坦福已经定义了整个表的定义,关于关系代数的一些运算符号以及一些关系。包括交叉并、选择投影这些,这个是关系型数据库的一个基础。SQL 引擎会涉及各种各样的算子,它的入口都是 SELECT、INSERT 之类,之后它会根据不同的表之间的关系,选择不同的 Joins 方式。