本系列文章为《openGauss数据库核心技术》内容摘录与学习笔记,部分内容参照自Gauss松鼠会Gauss松鼠会_CSDN博客-参赛文章展示-第三届openGauss技术文章征集活动,openGauss经验总结,openGauss源码解析领域博主发布的文章,内容与书中内容相对应,清楚详细,可以深入阅读。
本书基于openGauss数据库进行应用开发研制数据库管理系统软件,深入介绍openGauss数据库架构,openGauss SQL引擎各个模块的功能和原理,openGauss执行器技术、存储技术和事务机制等。
本书主要介绍数据库的基础知识和核心技术,以及数据库系统的核心架构,帮助读者更深入地了解数据库的历史、数据库基础知识、数据库技术发展背景和动机、数据库技术的优劣对比、数据库架构的设计和选择、数据库核心技术。
以openGauss为例介绍数据库的基本架构和核心技术,包括分析型和交易型数据库的架构设计、存储引擎的基础知识、数据库事务机制、并发机制、多版本技术、分布式事务机制、执行引擎技术、优化器和SQL引擎技术、数据库安全技术。
从理论到系统再到实践,全方位介绍数据库的核心技术,使读者从中了解数据库设计与实现的核心思想和方法。
GaussDB以云服务形式提供商业版本(社区网址为/zh)
高斯部的数据库产品研发历史按照场景和产品特点可分为三个系列:GMDB(内存数据库)、GaussDB 100 OLTP数据库、GaussDB 200 OLAP数据库。
GMDB V2支持SQL/关系模型和ACID能力的全功能内存数据库。GaussDB 100 早期版本主要是面向华为公司内各产品线在操作管理系统中所使用的OLTP类型磁盘数据库场景。2016年起,华为高斯部启动分布式OLTP数据库的研发工作。2012年,华为高斯部启动了PteroDB(羽龙)项目,孵化面向企业数据仓库场景的MPP架构OLAP数据库。经过工商银行2年孵化,GaussDB 200于2016年开始进入商用。
GaussDB采用了分层解耦、可插拔架构,能够同时支持OLTP、OLAP业务场景。
GaussDB采用分布式关键技术架构,实现一套代码同时支持OLAP和OLTP业务场景。主要特点:
(1)支持SQL优化、执行、存储分层解耦架构(2)基于GTM(Global Transaction Management,全局事务控制器)和高精度时钟的分布式ACID强一致。(3)支持存储技术分离,也支持本地架构(4)支持可插拔存储引擎架构。
OLTP是传统的关系数据库的主要应用,包括基本的增加、删除、修改、查询事务处理。
分布式强一致的架构:GaussDB 100 实现了基于GTM的分布式ACID设计。GTM仅处理全局时间戳请求,CSN(Commit Sequence Number)是一个64位递增无符号数,它的递增,几乎都是CPU++和消息收发操作。
可插拔存储引擎架构:面向OLTP不同的时延要求,需要的存储引擎技术是不同的。GaussDB设计了支持了可插拔存储引擎架构,可以同时支持传统行存储和内存引擎。内存引擎采用记录(record)的组织方式,Masstree无锁化索引设计,提高系统的并发能力和降低了事务的时延。
行存储引擎可以支持不同的MVCC(多版本)实现机制,包括append-only形式的MVCC实现机制和in-place update的MVCC实现机制。整个数据库中存储引擎、SQL引擎都是解耦的,可以快速添加(演进)新的存储引擎和SQL引擎。
OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。GaussDB OLAP 支持了列存储引擎、自适应压缩,大大降低了存储空间,基于share nothing架构,线性扩展,解决了千万亿字节(PB)级数据存储问题。
通过分布式优化器和分布式执行器,构筑了分布式并行技术能力。数据入库采用并行加载技术,大大提高入库效率。
面向数据数据分析的高效存储和计算架构:GaussDB 200 OLAP数据库采用列存储引擎提高存储的压缩比和面向列的存储能力,而向量化执行相对于传统的执行模式改变是对于一次一元组的模型修改为一次一批元组,且按照列运算,这种简单的修改能够带来巨大的性能提升。
分布式并行计算架构:(1)通过分布式优化器,根据代价估算、AI数据分析,产生最优的分布式执行计划。GaussDB 200 OLAP 数据库优化器支持CBO(Cost Based Optimization,基于代价的查询优化)和ABO(基于机器学习的查询优化),根据代价和AI学习,会自动选择SMP(Symmetric Multi-Processing,对称多处理结构)、Join order、group算法、index等。(2)通过LLVM(Low Level Virtual Machine,一个编译器框架)编译执行、SIMD(Single-Instruction,Multiple-Data stream processing,单指令流多数据流)单指令多数据执行、算子并行执行和节点并行执行技术,提高复杂查询的性能。
并行数据加载:通过并行重分布算子技术,让各个DN都参与数据导入,充分利用各个设备的计算能力及网络带宽。(1) GDS:数据源服务进程。(2) 重分布:从GDS读取数据,计算哈希(Hash)重新分发数据。(3) 协调节点:根据数据源和节点个数,产生并行重分布的计划,把数据源和数据节点分配好。
云数据库系统的主要目的是提供数据库系统服务的基础设施,以实现对计算机资源的共享。
公有云数据库系统服务:主要面向中小型企业的数据库需求,大幅降低运营成本,比如构建数据中心或者机房、构建服务器、运维服务器、运维数据库系统的成本等,无需花费太多的经历在基础设施的构建上;私有云数据库系统服务:主要面向大中型企业的数据库服务需求,通过需要在公司内部购买大量的设备,同时构筑相关的PaaS层、Saas层,使得公司内部各个部门的信息新系统可以共享相关资源,同时实现数据共享,并降低整体的维护成本;混合云数据库系统服务:同时包含公有云数据库系统服务和私有云数据库系统服务两类,哪部分选择公有云服务,哪部分选择私有云服务,主要从降低系统的总体拥有成本上考虑,包括构建成本、运维成本、折旧费用等。
从成本、差异化竞争力、数据的隐私度及价值3个层面权衡选择哪种云数据库服务。中小型企业通常在成本、竞争力构筑、数据隐私保护这几方面权衡后,更大概率地选择公有云数据库系统服务,而大中型企业则更大概率地选择私有云数据库系统服务或者混合云数据库系统服务,其中成本因素会占据比较高的比重。GaussDB云数据系统的目标客户主要是大中型企业。
GaussDB云数据库系统提供了更强的存储资源、计算资源之间的组合能力。实现存储资源的独立扩容和缩容能力、计算资源的独立扩容和缩容能力,以及存储资源与计算资源在弹性扩缩容环境下的自由组合能力。GaussDB云数据库系统提供多租户(Multi-tenant)和扩缩容(Elasticity)的组合能力。
多租户存储计算共享架构:单个应用服务独立部署转向共享服务,对企业内部数据库系统的运维产生较大的变革,并有效降低其运维成本。数据库系统从孤立的独立部署转向计算与存储共享的部署形态,在实现计算与存储共享的同时实现存储资源的独立扩缩容,以及计算资源独立的扩缩容。当云部署的数据库系统能够提供独立的存储、计算扩缩容能力后,数据系统需要被迁移的概率将被大幅度降低,由此可以提升数据库系统的业务连续性
三层逻辑架构实现存储、计算独立扩缩容:为了有效实现云数据库系统在存储资源、计算资源的独立扩缩容,需要实现计算与存储的解耦,以及各自的扩缩容能力。为了实现GaussDB云数据库系统在存储和计算方面的弹性,现将整个数据库系统分为3层,分别是弹性存储层、弹性事务处理层及无状态SQL 执行层。GaussDB云数据可以在事务处理层实现横向扩展,以保证满足大中型企业对数据库系统的不同需求。无状态的SQL执行层,可以实现对不同客户端连接请求数进行扩展的能力。这3个层次的组件通常在部署的时候,具有很强的相关性,需要尽可能地联合部署(尽量部署在一台物理机上或一个交换机内),以降低网络时延带来的开销。
云数据库的克隆与复制支持:将企业的数据库系统搬到云系统之上,可以提供更加便利的数据库系统管理功能,以满足企业对业务的测试、新业务的构建等不同需求,加速业务上线的速度。实现对这些数据库高效的复制、克隆等功能,如使用COW机制(对于持久化存储的Copyon-Write机制)可以实现对于数据库数据的快速克隆(仅克隆了元数据,数据库数据并未复制)。通过COW 机制,构建在克隆数据库上的业务可以直接修改克隆的数据库系统中的数据。云数据库系统可以对生产数据库系统进行克隆、复制等操作,对于克隆、复制出来的数据库系统可以用于非生产系统,并用于开发、测试流程或是参与到基准测试中。需要说明的是,用户非生产系统的数据库系统保持了和生产系统当前一致的数据,同时生产系统中更新的一部分数据也可以实时同步到非生产数据库系统中,进而保持这两部分数据之间的一致性。
多模数据库系统主要用于实现对多种模型数据的管理与处理。它包括3个层面的内容:(1)多模数据的存储:一个统一的多模数据库系统需要提供多种数据模型,包括关系、时序、流、图、空间等的存储能力(2)多模数据的处理:一个统一的多模数据库系统需要提供多种数据库模型,包括关系、时序、流、图、空间等的处理能力(3)多模数据之间的相关转换:大多数情况下,客户的数据产生源只有一个,即数据产生源的数据模型是单一的,但是后续处理中可能需要使用多种数据库模型来表征物理世界,进而进行数据处理,或者需要通过多种模型之间相互协作来完成单一任务,因此不同模型之间的数据转换也是极为重要的。
多模数据库系统的设计与实现,主要是为了简化客户对数据管理、数据处理的复杂度,以及降低整体系统运维的复杂度。为此,在数据库系统之上提供统一的多模数据管理、处理能力,以及统一运维能力是多模数据库系统核心设计思想。
引入多模数据库统一框架[Multi-ModelDatabase (MMDB) Uniform Framework],为用户提供关系数据库、图数据库、时序数据库等多模数据库统一数据访问和维护接口,减少运维和应用开发人员的学习和使用成本,提升数据使用安全性(数据无须在多个系统之间进行切换,减少了数据在网络上暴露的时间)。
系统的逻辑框架:
多模数据库统一框架基于GaussDB开发,通过类似领养(Linked)机制,快速扩展图、时序数据库引擎,对外提供统一的DML、DDL、DCL、Utilities、GUI访问接口。运维和应用开发人员可以将扩展的多模数据库与GaussDB无缝衔接起来,当成一套系统,统一管理与运维通过统一接口使用扩展引擎提供的能力,减少对新的数据库引擎的学习和使用成本。除了统一的多模框架外,该系统架构使用了统一的数据存储,即关系型存储。多模数据库系统中多模数据模型的任意组合。为了适应不同用户对不同类型数据处理的需求,GaussDB多模数据库系统提供了多种模型之间的任意组合。在整体架构上,将引擎的元数据独立出来,以实现任意时刻的启动和关闭新的多模引擎。
系统的物理框架:
多模数据库是处理包含图、时序等多种数据模型的统一的数据库。多模数据库提供统一的DDL和DCL管理,用户可以方便地把外部引擎交给多模数据库进行管理。多模数据库DML采用UDF的方式,提供统一的GUI、ODBC、JDBC等外部接口,输入相应的UDF进行对外部数据的查询分析。多模数据库接收到查询请求后,发送给对应的外部引擎执行,并将执行结果返回,借助GaussDB原有的方式呈现给用户。多模数据库在GaussDB基础上进行设计。GaussDB引入多模框架后,需要在GaussDB内部进行扩展,用来适配多模数据的执行和管理流程。
面向极致性能的场景,上述多模数据系统可能无法满足需求。如果需要处理的数据量,或者需要处理的响应时间包含有极致的要求,统一的关系存储可能无法满足要求。在这类业务场景下,通常需要面向特性数据模型的原生数据存取模型,进而加速数据的存取与处理。