GaussDB架构(中)「建议收藏」

GaussDB架构(中)「建议收藏」在GaussDB架构(上)中我们介绍了GaussDB的发展历史和架构概览,本篇主要介绍GaussDB OLTP数据库架构和GaussDB OLAP数据库架构。 GaussDB OLTP数据库架构。 …

GaussDB架构(中)

GaussDB架构(上)中我们介绍了GaussDB的发展历史和架构概览,本篇主要介绍GaussDB OLTP数据库架构和GaussDB OLAP数据库架构。

GaussDB OLTP数据库架构。

OLTP是传统的关系数据库的主要应用,包括基本的增加、删除、修改、查询事务处理,例如银行交易。

1. 设计思想与目标客户

OLTP业务场景主要分为两大类:一类是金融银行业务场景,一类是互联网业务场景。但应用OLTP业务要满足5个重要的需求:

  • 故障业务中断时间,RTO(Recovery Time Objective,恢复时间目标,指业务停止服务的最长时间)尽可能短,最好是RTO=0。
  • 任何故障,数据不错、不丢失,RPO(Recovery Point Objective,数据恢复点目标,指业务系统的数据丢失量)=0。
  • 并发和性能满足业务诉求。
  • 易于运维,最好是自动诊断、自动修复。
  • 易于调优,最好是自调优。

GaussDB OLTP数据库基于这5个关键需求设计,分层解耦:

  • 采用并行恢复和存储层异步回放机制优化RTO,目前支持AZ(AvailabilityZone,可用区域)内RTO<10s; AZ故障,RTO<60s。
  • 采用多副本RAFT(一种分布式一致性协议)复制机制保证数据的可靠性,即RPO=0。
  • 支持线程池和采用高精度时钟去中心化,支持高并发和线性扩展性,满足高并发和性能的诉求。
  • 运维能力上基于统计数据分析、推理,实现自运维能力,降低运维门槛。
  • 采用基于AI的自调优参数和ABO(AI Based Optimization,基于人工智能的查询优化)优化器提供自调优能力,降低调优门槛。

2. 分布式强一致的架构

分布式强一致必须有一个全局的时间戳信息,否则很难保证数据的一致性。GaussDB 实现了基于GTM 的分布式ACID[原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)]设计。

GTM 仅处理全局时间戳请求,CSN(Commit Sequence Number,待提交事务的序列号)是一个64位递增无符号数,它的递增,几乎都是CPU++ 和消息收发操作。

不是每次都写ETCD(Editable Text Configuration Daemon,分布式键值存储系统,用于共享配置、服务注册和查找),而是采用定期持久化到ETCD。每次写ETCD的CSN 要加上一个backup_step(100万),一旦GTM 出现故障,CSN 从ETCD 读取出来的值保证单调递增。当前GTM 只完成CSN++ ,可以支持200MB/s请求。GTM处理获取CSN消息和CSN++的消息,TCP协议栈消耗CPU 会非常严重,采用用户态协议栈提高GTM 单节点的处理能力。GTM 关键数据结构和线程,如下图所示。

在这里插入图片描述

图 GTM 关键数据结构和线程

单节点的事务

单节点事务设计,如下图所示。

在这里插入图片描述

图 单节点事务设计 关键设计如下:

  • GTM 只维护一个CSN++ ,快照(snapshot)只包含CSN。
  • DN(Data Node,数据节点)本地维护事务ID(唯一标识符),维护ID 到CSN的映射(CSN_LOG)。
  • DN本地垃圾回收的过程中回填CSN。
  • 单分片读事务使用本地快照: ① 获取本地最新的CSN 和准备阶段事务号; ② 如果CSN 状态为“提交中”则进行等待; ③ 如果row.CSN< localsnapshot.csn || xid in prepared_xid list可 见,否则不可见。

跨节点事务

跨节点事务设计,如下图所示。

在这里插入图片描述

图 跨节点事务设计

关键设计如下:

  • 第二阶段事务提交改为异步方式,只同步做两阶段提交的准备阶段。
  • DN 上行级别可见性判断: ① DN 处于准备状态的事务依赖对应CN 上的事务是否提交,如果已经提交,且CSN 比snapshot.CSN 小,就可见。 ② 对DN 上处于准备状态(prepared)的事务,CN 上的事务不处于提交状态,则必须判断是否是残留状态,如果是则进行回滚。
TRY_AGAIN

IF row xact_status is prepared

{

notify clean_pending_prepared_xact

IF CN xact_status is committed && CN xact CSN snapshot CSN

return visible

goto try_again

}

Else

{

if row xact is committed and row CSN snapshot CSN

return visible

Else

return not_visible

}

3.可插拔存储引擎架构

面向OLTP不同的时延要求,需要的存储引擎技术是不同的。例如在银行的风控场景里,对时延的要求是非常苛刻,传统的行存储引擎的时延很难满足业务要求。因此GaussDB设计支持了可插拔存储引擎架构,可以同时支持传统行存储引擎和内存引擎。内存引擎采用记录(record)的组织方式,Masstree无锁化索引设计,提高系统并发能力和降低了事务的时延。行存储引擎可以支持不同的MVCC(多版本)实现机制,包括append-only形式的MVCC实现机制和in-place update的MVCC实现机制。整个数据库中存储引擎、SQL引擎都是解耦的,可以快速添加(演进)新的存储引擎和SQL引擎。

GaussDB OLAP数据库架构

OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

1. 设计思想与目标客户

OLAP数据分析场景有5个关键的需求:

  • 数据量大,从几百万亿字节(TB)到千万亿字节(PB)是很正常的,容量可扩展。
  • 复杂查询多,计算复杂度高,必须分布式并行计算。
  • SQL自动优化能力要强,自动调优诉求强烈。
  • 数据入库速度要快,入库几百兆字节、万亿字节的数据很常见。
  • 故障恢复RTO 尽可能短,数据不丢失,即RPO=0。

银行数据仓库、安全行业的同行同住分析、证券行业的数据挖掘分析都对集群的规模和并行计算能力有很高的要求。GaussDB OLAP针对这几个关键需求设计,支持了列存储引擎、自适应压缩,大大降低了存储空间,基于share nothing架构,线性扩展,解决了千万亿字节(PB)级数据存储问题。

通过分布式优化器和分布式执行器,构筑了分布式并行技术能力。数据入库采用并行加载技术,大大提高入库效率。

2. 面向数据分析的高效存储和计算架构

GaussDB OLAP数据库采用列存储引擎提高存储的压缩比和面向列的计算能力,而向量化执行相对于传统的执行模式改变是对于一次一元组的模型修改为一次一批元组,且按照列运算,这种看似简单的修改却带来巨大的性能提升。

  • 一次一元组模型函数调用次数较大,每一条元组都会根据执行树的形态遍历执行树,面对OLAP场景,一次一元组模型巨量的函数调用次数使开销较大,而一次一批元组的执行模式则大大减小遍历执行节点的开销。
  • 一次一批元组的数据运载方式为某些表达式计算的SIMD(Single-Instruction,Multiple-Data stream processing,单指令流多数据流)化提供了机会,SIMD 化能带来性能的提升。
  • 一次一批元组的数据运载方式天然对接列存储,列存储引擎能够很方便地在底层扫描节点装填向量化的列数据。CPU 的指令缓存(cache)和数据缓存的命中率大大提高。

GaussDB OLAP高效存储和计算架构,如下图所示。

在这里插入图片描述

图 GaussDB OLAP高效存储和计算架构

3. 分布式并行计算架构

分布式并行计算架构核心实现如下:

  • 通过分布式优化器,根据代价估算、AI数据分析,产生最优的分布式执行计划。好的执行计划和差的执行计划在运行性能上可能会有很大的差距。优化器生成执行计划的过程如下图所示。 在这里插入图片描述

图 优化器生成执行计划的过程

GaussDB OLAP数据库优化器支持CBO(Cost Based Optimization,基于代价的查询优化)和ABO(基于机器学习的查询优化),根据代价和AI学习,会自动选择SMP(Symmetric Multi-Processing,对称多处理结构)、Join order、group算法、index等,GaussDB OLAP优化器整体架构如下图所示。

在这里插入图片描述

图 GaussDB OLAP优化器架构

  • 通过LLVM(Low Level Virtual Machine,一个编译器框架)编译执行、SIMD单指令多数据执行、算子并行执行和节点并行执行技术,提高复杂查询的性能。

复杂查询性能提升方式如下图所示。

在这里插入图片描述

图 复杂查询性能提升方式

4. 并行数据加载

通过并行重分布(Redistribute Streaming)算子技术,让各个DN 都参与数据导入,充分利用各个设备的计算能力及网络带宽。并行数据加载的关键技术如下:

  • GDS: 数据源服务进程。
  • 重分布: 从GDS读取数据,计算哈希(Hash)重新分发数据。
  • 协调节点: 根据数据源和数据节点个数,产生并行重分布的计划,把数据源和数据节点分配好。

并行数据加载方式,如下图所示。

在这里插入图片描述

图 并行数据加载

GaussDB架构(中)「建议收藏」

Gauss松鼠会是汇集数据库爱好者和关注者的大本营, 大家共同学习、探索、分享数据库前沿知识和技术, 互助解决问题,共建数据库技术交流圈。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6309.html

(0)
上一篇 2023-04-13
下一篇 2023-04-13

相关推荐

  • mysql索引解析「终于解决」

    mysql索引解析「终于解决」1、基本概念 数据读写性能主要是IO次数,单次从磁盘读取单位是页,即便只读取一行记录,从磁盘中也是会读取一页的()单页读取代价高,一般都会进行预读) (1)扇区是磁盘的最小存储单元 (2)块是文件系统

    2023-02-28
    147
  • oracle去除重复数据并保留一条命令_oracle 删除重复记录只保留一条

    oracle去除重复数据并保留一条命令_oracle 删除重复记录只保留一条删除重复数据的一种高效的方法: 表demo是重复拷贝自dba_objects,有88万左右,不重复的是27323,没有索引 方法一:delete from demo a where a.rowid …

    2023-02-24
    156
  • JAVA中的事务是什么?事务模块总结[通俗易懂]

    JAVA中的事务是什么?事务模块总结[通俗易懂]大家好,这是一个为了梦想而保持学习的博客。这是第二篇文章,分享一下我对【事务】的理解。文章的风格会一直保持问答的方式讲述,这是我个人喜欢的一种风格,也是相当于模拟面试。 什么是事务? 简单的来说,一…

    2023-02-01
    148
  • MySQL创建主键[通俗易懂]

    MySQL创建主键[通俗易懂]MySQL InnoDB 存储引擎是必须要有一个主键的,主键可以是一个字段或者多个字段,通常建议:主键就一个、主键字段和业务无关、主键字段最好是自增且字段较小(原因:索引原理)。 创建主键的三种方式…

    2023-03-04
    147
  • mysql8授权root用户远程登陆[通俗易懂]

    mysql8授权root用户远程登陆[通俗易懂]网上找了一大堆资料,看了半天都不行。 正确的方式是这种 update user set host='%' where user='root'; flush p…

    2023-03-10
    141
  • Python升级包

    Python升级包Python是一种广泛使用的解释型高级编程语言,其简单易学、功能强大、易于扩展的特点,使得它已成为数据科学、人工智能等领域的热门开发语言。而Python的不断更新和升级也让它能够更好地适应新的应用场景和技术趋势。

    2024-06-10
    55
  • MySQL学习笔记(15):SQL Mode

    MySQL学习笔记(15):SQL Mode本文更新于2019-06-29,使用MySQL 5.7,操作系统为Deepin 15.4。 与其他数据库不同,MySQL可以运行在不同的SQL Mode(SQL模式)下。 可通过变量@@sql_mod

    2023-03-19
    146
  • MySQL是如何实现事务隔离?

    MySQL是如何实现事务隔离?前言 众所周知,MySQL的在RR隔离级别下查询数据,是可以保证数据不受其它事物影响,而在RC隔离级别下只要其它事物commit后,数据都会读到commit之后的数据,那么事物隔离的原理是什么?是通过

    2023-04-16
    166

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注