赞
踩
第一章 toadb 数据库基础架构
第二章 toadb 词法/语法分析器基础 【保姆级教程】
目录
数据库类型 数据库架构 SQL在数据库内部历程
项目教程
专栏地址:
本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。
本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。
项目代码
gitcode仓库地址 toadbhttps://gitcode.com/toadb/toadb/tree/master
先来说一下概念:数据库,一般也称为数据库管理系统,当然也有认为这两种叫法是有区别的,我们这里说的数据库,就是数据库软件本身,可以输入SQL,输出结果。
它的理论和最早的软件实现已经很早了,数据库的历史在网上已经介绍的很多了,这里不再赘述。为什么需要数据库呢?
因为随着社会发现,产生的信息数据越来越多,用当前的方法管理很困难了,最终采用存储到软件中,让软件进行管理,达到方便存储,简索快速,更新便捷。
当然发展到后来,又赋予数据库很多职能,比如能保持24小时实时都能使用,这就有了高可用的一系列功能和解决方案;还有数据格式要支持多种多样,这就有了关系型数据库,又增加了非关系统的键值对的,文档,还有支持空间数据的。
再后来,随着信息爆炸式增长,全球人口总数的增加,对数据库的性能要求越来越高,不仅数据量要增加,而且查询时间还要降低,这就带来了各种版本数据库的内卷。
有些干脆全内存,如内存数据库,甚至抢了操作系统的活,进行独立内存管理;
还有针对数据特点的列式存储,如监控类数据,可以按某一指标进行按列更新,重构了数据管理方式,存储方式等;
还有为针对数据库的操作系统,在内存管理,IO处理,并发调度方面都进行了针对性重构和改进。
综上所述,各种场景组合下来,诞生了各种各样的数据库种类,有单一类型的,也有几种都有的。介绍一种通用分类方法:
(1)事务型数据库(OLTP OnLine Transaction Processsing 联机事务处理),什么意思呢?
简单理解就是既有查询,又有写入(插入,更新,删除),同时并发访问之间还有数据一致性的冲突。
这种就对数据库综合处理能力要求较高,如事务并发处理,存储(内存和外存)管理访问等各方面性能都有考验。
(2)分析型数据库(OLAP Online Analytical Processing 联机分析处理),这又是什么呢?
也简单理解,就是大多数是查询,写入很少,而且基本都是插入和删除。这种场景的特点就很明显,就是获取数据和加载数据库,并发事务间冲突很少,要求单个并发性能很快。
那这种对数据库要求主要在内存管理,存储管理,比如大量缓存,分级存储,还有列式存储等,减少并发的消耗。
当然了,现在还有一种提法叫HTAP,也就是以上两者都兼顾,也就是在不同场景下使用不同的特性。
这里主要介绍一下通用数据库的核心内容,也就是数据库共性的模块,再此基础上再进行各方向的探索。
数据库主要有几大件,可能有你熟悉的,下面我们一起来看看。
SQL(Structured Query Language 结构化查询语言) 历史也很早,是20世纪70年代出现的,经过很多年发展,已经是ANSI和ISO国际标准化组织在管理了,和所有编程语言一样一直在发布新特性,目前常用的还是SQL92和SQL99标准;
SQL 标准每隔几年就会发布一次,最新的 SQL:2023 已经发布,对 SQL 语言进行增强,新增属性图查询语言等。
因为SQL标准已经被广泛认可和使用,所以数据库都会通过SQL来操作数据库,那么进入数据库的第一步,就是SQL的词法语法解析,将它转换为语法树,才能真正被内部使用。
查询一条数据,可能有很多条路和方法,比如可以到底要选那一条呢?这就是优化器要做的事。
当然,这里会有很多辅助功能来提供支撑。
就是按照优化器优化后的执行路线,进行执行,比如查询,如果不用索引,就到表中顺次从第一条取出,比对是否符合条件,符合就返回给客户端,重复直到最后一条。
事务管理就要复杂很多,它基本穿插在其它模块中,保证事务的四大特性ACID,当然也需要其它模块的支持,如锁管理。
这是数据库理论中的叫法,到实际实现中就各有特色,主要记录数据的索引,统计等,比如表的位置,表名,表对应的物理存储等,表上的索引名等。
这里包括内存和外存,内存包括系统运行时的数据,还有用户表数据,数据字典的缓存,对高频访问的优化,另外就是并发时的控制同步。外储对应就是需要持久化的数据,有顺序写的redo日志,也有随机访问的表文件,另外还有系统状态的持久化。
下图是简化的数据库架构,包括了数据库的基本骨架,当然商业数据库软件还有很多模块,要复杂的多。
从整体来看可以分为三条线:
中间是整个主干流程,是SQL的流动主线,先转变为语法树;
经过优化器后,再转变成确定的执行计划;
执行器涉及到的就非常多,简单来说就是查找数据,进行过滤数据;或者找位置,插入新数据。
事务管理是从SQL到服务端,就开始,直到结果返回给客户端结束,控制整个过程。
当中间执行错误时,会回退所有之前的操作,保证事务的原子性;
在并发事务时,根据事务的隔离级别,控制各事务能看到的数据版本,以及事务的访问竞争。
辅助模块锁管理,主要为并发同步提供支持;
日志管理,有redo日志,运行日志等;
统计信息,主要为优化器输入判断依据,比如基于代价的优化器,会根据扫描表的代价,选择用顺序扫描还是用索引。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。