当前位置:   article > 正文

toadb 数据库基础架构

toadb 数据库基础架构

系列文章目录

第一章 toadb 数据库基础架构 

第二章 toadb 词法/语法分析器基础 【保姆级教程】​​​​​​​


目录

系列文章目录

关键词

概述

概念

作用

分类

介绍

SQL解析

优化器

执行器

事务管理

数据字典

存储管理

简化内核架构

主干流程

整体控制

辅助模块


关键词

数据库类型  数据库架构  SQL在数据库内部历程

项目教程

专栏地址:

手写开源数据库toadb-初级版

本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。

本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。

项目代码

gitcode仓库地址 toadbicon-default.png?t=N7T8https://gitcode.com/toadb/toadb/tree/master


概述

概念

先来说一下概念:数据库,一般也称为数据库管理系统,当然也有认为这两种叫法是有区别的,我们这里说的数据库,就是数据库软件本身,可以输入SQL,输出结果。

作用

它的理论和最早的软件实现已经很早了,数据库的历史在网上已经介绍的很多了,这里不再赘述。为什么需要数据库呢?

因为随着社会发现,产生的信息数据越来越多,用当前的方法管理很困难了,最终采用存储到软件中,让软件进行管理,达到方便存储,简索快速,更新便捷。

分类

当然发展到后来,又赋予数据库很多职能,比如能保持24小时实时都能使用,这就有了高可用的一系列功能和解决方案;还有数据格式要支持多种多样,这就有了关系型数据库,又增加了非关系统的键值对的,文档,还有支持空间数据的。

再后来,随着信息爆炸式增长,全球人口总数的增加,对数据库的性能要求越来越高,不仅数据量要增加,而且查询时间还要降低,这就带来了各种版本数据库的内卷。

有些干脆全内存,如内存数据库,甚至抢了操作系统的活,进行独立内存管理;

还有针对数据特点的列式存储,如监控类数据,可以按某一指标进行按列更新,重构了数据管理方式,存储方式等;

还有为针对数据库的操作系统,在内存管理,IO处理,并发调度方面都进行了针对性重构和改进。

综上所述,各种场景组合下来,诞生了各种各样的数据库种类,有单一类型的,也有几种都有的。介绍一种通用分类方法:

(1)事务型数据库(OLTP OnLine Transaction Processsing 联机事务处理),什么意思呢?

简单理解就是既有查询,又有写入(插入,更新,删除),同时并发访问之间还有数据一致性的冲突。

这种就对数据库综合处理能力要求较高,如事务并发处理,存储(内存和外存)管理访问等各方面性能都有考验。

(2)分析型数据库(OLAP Online Analytical Processing 联机分析处理),这又是什么呢?

也简单理解,就是大多数是查询,写入很少,而且基本都是插入和删除。这种场景的特点就很明显,就是获取数据和加载数据库,并发事务间冲突很少,要求单个并发性能很快。

那这种对数据库要求主要在内存管理,存储管理,比如大量缓存,分级存储,还有列式存储等,减少并发的消耗。

当然了,现在还有一种提法叫HTAP,也就是以上两者都兼顾,也就是在不同场景下使用不同的特性。

介绍

这里主要介绍一下通用数据库的核心内容,也就是数据库共性的模块,再此基础上再进行各方向的探索。

数据库主要有几大件,可能有你熟悉的,下面我们一起来看看。

SQL解析

SQL(Structured Query Language 结构化查询语言) 历史也很早,是20世纪70年代出现的,经过很多年发展,已经是ANSI和ISO国际标准化组织在管理了,和所有编程语言一样一直在发布新特性,目前常用的还是SQL92和SQL99标准;

SQL 标准每隔几年就会发布一次,最新的 SQL:2023 已经发布,对 SQL 语言进行增强,新增属性图查询语言等。

因为SQL标准已经被广泛认可和使用,所以数据库都会通过SQL来操作数据库,那么进入数据库的第一步,就是SQL的词法语法解析,将它转换为语法树,才能真正被内部使用。

优化器

查询一条数据,可能有很多条路和方法,比如可以到底要选那一条呢?这就是优化器要做的事。

当然,这里会有很多辅助功能来提供支撑。

执行器

就是按照优化器优化后的执行路线,进行执行,比如查询,如果不用索引,就到表中顺次从第一条取出,比对是否符合条件,符合就返回给客户端,重复直到最后一条。

事务管理

事务管理就要复杂很多,它基本穿插在其它模块中,保证事务的四大特性ACID,当然也需要其它模块的支持,如锁管理。

数据字典

这是数据库理论中的叫法,到实际实现中就各有特色,主要记录数据的索引,统计等,比如表的位置,表名,表对应的物理存储等,表上的索引名等。

存储管理

这里包括内存和外存,内存包括系统运行时的数据,还有用户表数据,数据字典的缓存,对高频访问的优化,另外就是并发时的控制同步。外储对应就是需要持久化的数据,有顺序写的redo日志,也有随机访问的表文件,另外还有系统状态的持久化。

简化内核架构

下图是简化的数据库架构,包括了数据库的基本骨架,当然商业数据库软件还有很多模块,要复杂的多。

471d3531ad6847cba7854219314aa7fb.png

 从整体来看可以分为三条线:

主干流程

中间是整个主干流程,是SQL的流动主线,先转变为语法树;

经过优化器后,再转变成确定的执行计划;

执行器涉及到的就非常多,简单来说就是查找数据,进行过滤数据;或者找位置,插入新数据。

整体控制

事务管理是从SQL到服务端,就开始,直到结果返回给客户端结束,控制整个过程。

当中间执行错误时,会回退所有之前的操作,保证事务的原子性;

在并发事务时,根据事务的隔离级别,控制各事务能看到的数据版本,以及事务的访问竞争。

辅助模块

辅助模块锁管理,主要为并发同步提供支持;

日志管理,有redo日志,运行日志等;

统计信息,主要为优化器输入判断依据,比如基于代价的优化器,会根据扫描表的代价,选择用顺序扫描还是用索引。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/258122
推荐阅读
相关标签
  

闽ICP备14008679号