深入理解 RDBMS | 青训营笔记
这是我参与「第五届青训营」笔记创作活动的第14天。
经典案例
过年的时候,各大厂商一般都会在自己的产品中发送红包,发红包中其实就是一个事务操作,要注意满足 ACID 的四个原则,随着现在客户越来越多,也要注意在高并发和高可靠方面的技术支持。
发展历史
在前 DBMS 时代,主要通过人工管理数据,这样的效率过低,而且很容易出现错误,之后人们又开发出来了文件系统,但这样只是把原来人工管理过程中的记录写到电脑文件中而已,并没有很高效的解决数据管理的问题。
在 DBMS 时代,人们先后提出了网状模型 DBMS、层次模型 DBMS、关系模型 DBMS。
人们在之后开发出了 SQL 语言,它的语言风格接近自然语言,高度非过程化,而且非常简单易用。
关键技术
一条 SQL 的一生主要经过了以下的过程:
- 查询解析:SQL 语言接近自然语言,入门容易。但是各种关键字、操作符组合起来,可以表达丰富的语意。因此想要处理SQL命令,首先将文本解析成结构化数据,也就是抽象语法树 (AST)。
- 查询优化:SQL 是一门表意的语言,只是说『要做什么』,而不说『怎么做』。所以需要一些复杂的逻辑选择『如何拿数据』,也就是选择一个好的查询计划。优化器的作用根据AST优化产生最优执行计划(Plan Tree)。
- 查询执行:根据查询计划,完成数据读取、处理、写入等操作。
- 事务引擎:处理事务一致性、并发、读写隔离等
- 存储引擎:内存中的数据缓存区、数据文件、日志文件
SQL引擎的解析器一般可以分为词法分析、语法分析、语义分析的过程。
SQL引擎的优化器可以分为基于规则的优化和基于代价的优化。
SQL引擎的执行器一般可以使用火山模型:
对于火山模型,也可以在向量化和编译执行方面进行进一步的优化。
存储引擎一般会使用缓存池、分页、B+树索引等相关技术。
事务引擎一般会使用日志和锁的相关技术。
企业实践
在真正的企业实战中,因为数据量非常大,甚至达到 PB 的数量级,所以可以使用以下方式进行优化存储:分库分表(解决大流量问题)、扩容,代理连接池(解决流量突增问题)、3AZ高可用,HA管理(解决稳定性和可靠性方面的问题)
3AZ高可用:
HA管理: