数据仓库服务 GaussDB(DWS)核心技术

GaussDB(DWS)采用分布式shared-nothing集群架构,支持行列混合存储计算,集成高可用、高可靠、高安全、高可扩展、智能化技术栈。

Shared-nothing架构

      GaussDB(DWS)各个数据库实例(DN)拥有自己的CPU、内存和存储空间,实例之间不共享系统资源。

      基于Shared-nothing/MPP的对等并行计算模型可以充分利用CPU/IO/Mem等资源,获得极致的运算性能和线性的可扩展性,从而支持PB级数据规模。

分布式存储

      GaussDB(DWS)采用水平分表的方式,将数据表格的元组按照一定的分布策略分散存储到多个节点。查询的时候可以通过查询条件过滤不必要的数据,快速定位到数据存储位置,从而极大提升数据库性能。

      在水平分表的基础上,GaussDB(DWS)支持数据分区(Partition),即根据表的一列或者多列,将要插入表的记录分为不重叠的若干个范围,为每个范围创建一个分区,用来存储相应的数据。

      表2-1描述了在不同场景下,基于时间分片的方式分区后带来的收益。

表2-1 分区收益

场景描述
收益

当表中访问率较高的行位于一个单独分区或少数几个分区时。

大幅减少搜索空间,从而提升访问性能。

当需要查询或更新一个分区的大部分记录时。

仅需要连续扫描对应分区,而非扫描整个表,因此可大幅提升性能。

当需要大量加载或者删除的记录位于一个单独分区或少数几个分区时。

可直接读取或删除对应分区,从而提升处理性能;同时由于避免大量零散的删除操作,可减少清理碎片工作量。

数据分区带来的好处如下:

  • 改善可管理性

      利用分区,可以将表和索引划分为一些更小、更易管理的单元。这样,数据库管理员在进行数据管理时就能采取“分而治之”的方法。 有了分区,维护操作可以专门针对表的特定部分执行。

  • 可提升删除操作的性能

      删除数据时可以删除整个分区,与分别删除每行相比,这种操作非常高效和快速。

  • 改善查询性能

      通过限制要检查或操作的数据数量,分区可带来许多性能优势,包括:

      ­-分区剪枝:

      分区剪枝(也称为分区消除)是CN在执行时过滤掉不需要扫描的分区,只对相关的分区进行扫描的技术。分区剪枝通常可以将查询性能提高若干数量级

      ­-智能化分区联接:

      通过使用一种称为智能化分区联接的技术,分区还可以改善多表联接的性能。当将两个表联接在一起,并且至少其中一个表使用联接键进行分区时,可以应用智能化分区联接。智能化分区联接将一个大型联接分为多个较小的联接,这些较小的联接包含与联接的表“相同”的数据集。这里,“相同”定义为恰好包含联接的两端中相同的分区键值集,因此可以确保只有这些“相同”数据集的联接才会有效,而不必考虑其他数据集。

全并行计算

      GaussDB(DWS)GaussDB(DWS)实现了一套高效能的分布式执行引擎,充分利用集群中各节点的资源,发挥并行计算的极致性能。

图2-1 GaussDB(DWS)的全并行计算

如图2-1,GaussDB(DWS)的全并行计算核心技术如下:

  • MPP节点并行

      分布式执行框架,VPP用户态TCP协议,支持>1000服务器,万级CPU核并行计算。

  • SMP(Symmetric Multi-Processing)算子并行

      采用多线程并行算法执行同一个SQL,充分利用多核CPU资源,支持众核(>64 cores),NUMA架构优化。

  • SIMD(Single Instruction Multiple Data)指令级并行

      一个指令执行一批数据的操作,支持X86,ARM指令。

  • LLVM(Low Level Virtual Machine)动态编译

      将热点函数预编译成机器码,减少SQL执行指令数,提升性能。

行列混合存储与向量化执行

      GaussDB(DWS)实现了行存储和列存储两种存储引擎,用户可以根据应用场景在建表时选择合适的存储方式,如图2-2所示。

图 2-2 GaussDB(DWS)行列混合存储引擎

      其中列存储引擎支持数据压缩,对于非活跃的早期数据可以通过压缩来减少空间占用,降低采购和运维成本。压缩方式支持Delta Value Encoding、Dictionary、RLE 、LZ4、ZLIB等压缩算法,且能够根据数据特征自适应的选择压缩算法,平均压缩比7:1。压缩数据可直接访问,对业务透明,极大缩短历史数据访问的准备时间。

      GaussDB(DWS)的向量化执行引擎一次处理一批元组,极大提升处理效率。支持行列存混合处理,当查询数据同时包括行存表和列存表时,支持行列两种引擎的自动转换,达到性能的最优化。

主备从HA技术

      传统的两副本策略(一主一备)的容错能力较差,节点发生故障后,为了服务可用性,一般都会选择让正常节点继续提供服务,在故障节点恢复前数据只有单副本运行。一旦正常主机再次发生故障,将造成数据丢失的严重后果。三副本策略可以避免这一问题,但带来了更多的存储成本开销。GaussDB(DWS)采用主备从高可用技术,使得集群在任意单点故障时仍保持两副本可用,相比传统三副本节约了三分之一的存储空间,但数据可靠性基本持平。

图2-3主备从复制原理示意图

      如图2-3所示,GaussDB(DWS)引入备机和从备的概念,正常情况下主机和备机通过日志流复制和数据页流复制进行强同步,主机与从备仅保持连接并不发送日志和数据,因此从备不占用额外存储资源。当备机发生故障时,主机自动感知,将未完成同步的日志和数据发送给从备,并保持主从强同步。主备同步向主从同步的切换在内核底层HA实现,事务层并不感知,因此不会造成任何报错和不一致。

      同理,当主机发生故障时,由集群管理感知并仲裁备机升主,升主后的备机连接从备进行主从强同步。因此,在一组DN内发生单点故障后,不会影响服务可用性,同时数据仍然有两份副本的可靠性保障。

在线扩容

      GaussDB(DWS)提供最多达2048节点的扩展能力,通过加入新的节点,集群的存储容量和运算能力能够得到线性提升。

      GaussDB(DWS)采用Node Group技术,支持多表并行扩容,扩容速度高达400G/小时/新增节点。其扩容过程如图2-4所示。

图2-4 扩容过程

GaussDB(DWS)在线扩容具有如下特点:

  • 扩容不中断业务。

      扩容过程中支持数据持续入库、查询业务不中断。

  • 一致性Hash技术和多表并行扩容等技术,助力扩容性能提升。

      采用一致性Hash技术使得重分布过程中需要迁移的数据量最小。

      重分布过程中支持多表并行及用户自主选择表的重分布顺序。

      支持扩容进度查询,实时监控扩容进度。

  • 随着节点数增加,集群性能线性增长。

      在全并行分布式架构下,随着节点数的增加,集群的数据加载性能、业务处理性能和容量可线性扩展。

透明安全技术

      GaussDB(DWS)支持对数据进行透明加密,加密解密的过程用户无感知。每个集群有一个CEK(集群秘钥),每个数据库采用单独配置的DEK(数据库加密密钥)加密保护,DEK使用CEK加密保护,保证秘钥安全。密钥通过Kerbores服务申请和加解密,加密算法通过配置项统一配置。目前支持AES、SM4算法,其中SM4算法在hi 1620以上版本芯片中支持硬件加速。

      大数据中蕴藏巨大价值的同时,也带来了隐私信息保护方面的问题。GaussDB(DWS)支持客户以表的列为单元创建脱敏策略,客户可针对业务中的敏感数据进行策略创建,敏感数据的界定由客户结合自身业务场景识别。制定脱敏策略后,只有管理员和表对象的owner才能访问原始数据。同时,脱敏的数据可以参与实际运算及使用,仅在数据库服务最终返回结果时脱敏。

      以图2-5为例,用户数据中每个人员的工资、email和手机号码均为敏感数据,包含了用户的隐私信息,如果明文显示,将会暴露用户的隐私,带来一系列问题。经过透明脱敏处理后,普通用户查看到的数据均被掩码显示,从而保护了用户的隐私。

图2-5 数据脱敏效果

数据脱敏的关键技术如下:

  • 策略可配置

      客户可结合自身业务场景识别敏感数据并使用DDL在表的指定列创建脱敏策略。

  • 策略可扩展

      内置数值、字符、时间类型脱敏函数,支持用户自定义脱敏函数。

  • 访问控制

      制定脱敏策略后,只有管理员和表对象的owner才能访问原始数据。

  • 数据可用性

      脱敏数据可以参与实际运算及使用,仅在最终返回结果时脱敏。

SQL自诊断

      传统的SQL优化需要较多的前期工作收集信息,对优化人员的要求较高,尤其是分布式数据库,需要丰富的经验和深厚的知识才能够定位出问题SQL。如图2-6所示,GaussDB(DWS)在执行SQL的过程中能够智能化地分析发生的性能问题,以通俗易懂的方式记录和呈现给用户,实现自动化地诊断,帮助用户快速地识别和定位问题,方便性能调优。

图2-6 SQL自诊断技术原理