openGauss 数据库核心技术
openGauss:The Core Technologies
华为公司从开始自研数据库至今曾经有近 20 年历史,在去年 6 月 30 日,华为正式发表开源数据库能力,凋谢 openGauss 数据库源代码,并成立 openGauss 开源社区,社区官网同步上线。从开源至今的短短不到一年半的工夫,openGauss 的版本在一直的进行迭代降级,现在已更新至 2.1.0 版本。
据上半年统计报告显示,openGauss 社区官方网站访问量 78 万 +;官方网站访客人数 7 万 +;官方网站安装包下载量 16 万 +,下载遍布寰球 49 个国家 328 个城市;社区开发者人数 1200+;社区累计需要代码 PR 提交数达到 2600+,累计 Commit 数达到 4500+。
越来越多的企业签订社区 CLA,参加社区代码奉献。并且,其中有 6 家合作伙伴公布基于 openGauss 的商业发行版,例如云和恩墨基于 openGauss 商业发行版“MogDB”就曾经落地邮储银行、民生银行。
此外,openGauss 的热度也在一直地攀升,在短短一年半的工夫内,一跃国产数据库排行榜前三的席位,倍受大家的关注。
在关注度一直回升的状况下,为了让大家能更好的把握 openGauss 相干常识,即日起,咱们将连载《openGauss 数据库核心技术》系列文章,与大家一起学习 openGauss 数据库的核心技术,咱们将从以下几大方面进行更新:
openGauss 数据库 SQL 引擎
openGauss 数据库执行器技术
openGauss 存储技术
openGauss 事务机制
openGauss 数据库安全
openGauss 数据库 SQL 引擎
数据库的 SQL 引擎是数据库重要的子系统之一,它对上负责承接应用程序发送过去的 SQL 语句,对下则负责指挥执行器运行执行打算。其中优化器作为 SQL 引擎中最重要、最简单的模块,被称为数据库的“大脑”,优化器产生的执行打算的优劣间接决定数据库的性能。
SQL 引擎概览
SQL 引擎是数据库系统重要组成部分,它的主要职责是负责将应用程序输出的 SQL 在以后负载场景下生成高效的执行打算,在 SQL 的高效执行上表演重要角色。SQL 在 SQL 引擎里执行过程,如图 7 - 1 所示。
图 1 SQL 执行流程
从图 7 - 1 中能够看出,应用程序的 SQL 须要通过 SQL 解析生成逻辑执行打算、通过查问优化生成物理执行打算,而后将物理执行打算转交给查问执行引擎做物理算子的执行操作。
SQL 解析通常蕴含词法剖析、语法分析、语义剖析几个子模块。SQL 语言是介于关系演算和关系代数之间一种描述性语言,它汲取了关系代数中一部分逻辑算子的形容,而放弃了关系代数中“过程化”的局部,SQL 解析次要的作用就是将一个 SQL 语句编译成为一个由关系算子组成的逻辑执行打算。
描述语言的特点是规定了须要获取的“WHAT”,而不关怀“HOW”,也就是只关注后果而不关注过程,因而 SQL 语言描述性的特点导致查问优化在数据库管理系统中具备十分重要的作用。
查问重写则是在逻辑执行打算的根底上进行等价的关系代数变换,这种优化也能够称为代数优化,尽管两个关系代数式取得的后果完全相同,然而它们的执行代价却可能有很大的差别,这就形成了查问重写优化的根底。
在晚期的数据库管理系统中,通常采纳基于启发式规定的办法来生成最优的物理执行打算,然而这种基于规定的优化的灵便度不够,经常导致产生一些次优的执行打算,而代价估算的引入,则从根本上解决了基于规定优化的有余。
基于代价的优化器一方面生成“候选”的物理执行门路,另一方面对这些执行门路计算它们的执行代价,这样就建设了执行门路的筛选规范,从而可能通过比拟代价而取得最优的物理执行打算。
SQL 解析
SQL 语句在数据库管理系统中的编译过程合乎编译器实现的惯例过程,须要进行词法剖析、语法分析和语义剖析。
§ 词法剖析:从查问语句中辨认出零碎反对的关键字、标识符、操作符、终结符等,每个词确定本人固有的词性。
§ 语法分析:依据 SQL 语言的规范定义语法规定,应用词法剖析中产生的词去匹配语法规定,如果一个 SQL 语句可能匹配一个语法规定,则生成对应的形象语法树(Abstract Syntax Tree,AST)。
§ 语义剖析:对语法树(AST)进行有效性查看,查看语法树中对应的表、列、函数、表达式是否有对应的元数据,将形象语法树转换为逻辑执行打算(关系代数表达式)。
在 SQL 语言规范中,确定了 SQL 语言的关键字以及语法规定信息,SQL 解析器在做词法剖析的过程中会将一个 SQL 语句依据关键字信息以及距离信息划分为独立的原子单位,每个单位以一个词的形式展示,例如有 SQL 语句:
SELECT w_name FROM warehouse WHERE w_no = 1;
能够划分的关键字、标识符、操作符、常量等原子单位,如表 7 - 1 所示。
词性 内容
关键字 SELECT、FROM、WHERE
标识符 w_name、warehouse、w_no
操作符 =
常量 1
表 1 词法剖析的特色
语法分析会依据词法剖析取得的词来匹配语法规定,最终生成一个形象语法树(AST),每个词作为语法树的叶子结点呈现,如图 7 - 2 所示。
图 2 形象语法树
形象语法树表白的语义还仅仅限度在可能保障利用的 SQL 语句合乎 SQL 规范的标准,然而对于 SQL 语句的外在含意还须要做有效性的查看。
§ 查看关系的应用:FROM 子句中呈现的关系必须是该查问对应模式中的关系或视图。
§ 查看与解析属性的应用:在 SELECT 句中或者 WHERE 子句中呈现的各个属性必须是 FROM 子句中某个关系或视图的属性。
§ 查看数据类型:所有属性的数据类型必须是匹配的。
在有效性查看的同时,语义剖析的过程还是有效性语义绑定(Bind)的过程,通过语义剖析的查看,形象语法树就转换成一个逻辑执行打算,逻辑执行打算能够通过关系代数表达式的模式来体现,如图 7 - 3 所示。
图 3 关系代数表达式
未完待续 ……