GaussDB T 九大关键特性
- Share-nothing 架构
- 数据分布式存储
- 数据分区
- 全并行的数据查询处理
- 高性能事务处理
- 工作负载管理
- 高可靠事务处理
- GS-Paxos 协议一致性说明
- 闪回
特性详情如下:
1. Share-nothing 架构
Share-nothing又称为无共享架构,和其他架构的对比请参见图9-1。
图 9-1 架构对比

Share-nothing架构具备如下优点:
● 最易于扩展的架构。
– 为高并发、大数据量访问提供按需扩展的能力。
– 自动化的并行处理机制。
● 内部处理自动化并行,无需人工分区或优化。
– 数据加载和访问方式与一般数据库相同。
– 数据分布在所有节点上。
– 每个节点只处理节点本身数据。
● 最优化的I/O处理。
– 所有的节点同时进行并行处理。
– 节点之间完全无共享,无I/O冲突。
● 增加节点实现线性扩展。
2. 数据分布式存储
GaussDB T采用水平分表的方式,将业务数据表的数据存储到各个节点内。这样的优势是通过查询条件过滤不必要的数据,快速定位到数据存储位置,极大提升数据库性能。
水平分表方式将一个数据表内的数据,按合适分布策略分散存储在多个节点内,GaussDB T支持如表9-1所示的数据分布策略。用户可在CREATE TABLE时增加DISTRIBUTE BY参数,来对指定的表应用数据分布功能。
表 9-1 水平分表策略
| 策略 | 描述 | 适用场景 | |
|---|---|---|---|
| Hash | 散列 (Hash)方 式 | 根据元组中指定字段的值计算出哈希值,根据节点与哈希值的映 射关系获得该元组的目标存储位置。 | 适用于表数据量较大、需要提升查询性能的场景。 |
| 一致性 Hash (Consisten t Hash)方式 | 根据元组中指定字段的值计算出哈希值,根据哈希值与节点的映 射关系获得该元组的目标存储位 置。其次系统会根据指定的分片 个数在DN上创建一级分区,CN 上的一个分片即对应DN上的一 个分区。在做数据均衡时,会按 照分区来迁移数据。 | 适用于表数据量大,需要扩容的场景。 | |
| Range | 范围(Range)方式 | 根据指定字段的值的范围把数据 行存储到不同节点上 | 适用于表数据量较大、需要提升查询性能的场景。 |
| List | 列表 (List)方 式 | 根据指定字段的值把数据行存储 到不同节点行 | 适用于表数据量较大、需要提升查询性能的场景。 |
| Replication | 复制 (Replication)方式 | 将数据复制到所有节点上。 | 适用于表数据量较小、需要提升并发分析性能的场景。 |
3. 数据分区
GaussDB T数据库支持数据分区功能,数据分区是在节点内部按照用户的策略对数据做水平分表,将表按照指定范围划分为多个互不重叠的部分(Partition)。GaussDB T数据库支持的分区表为范围分区表、间隔分区表、列表分区表和哈希分区表。
● 范围分区表:数据基于范围映射到每一个分区,这个范围由创建分区表时的分区键指定。这种分区方式是最为常用的,分区键经常采用日期,例如将销售数据按照月份进行分区。
● 间隔分区表:是一种特殊的范围分区表。对于普通的范围分区,用户预先创建了多少个分区,如果插入数据不在该分区时,数据库会报错,这种情况下,用户可以手动添加分区,也可以使用间隔分区。比如用户会按照每天一个分区的方式使用范围分区表,在业务部署时会创建一批分区(如3个月)以备后续使用,但是3个
月后需要再次创建,不然后续的业务数据入库会报错。范围分区的这种方式增加了维护成本,需要内核支持分区的自动创建功能。如果使用间隔分区,用户可以不必关心后续分区的创建,减少分区的设计成本和维护成本。
● 列表分区表:在创建表时,使用条件把庞大的表分割成易于管理的小块。
● 哈希分区表:在很多情况下,用户无法预测某个列上的数据变化范围,因而无法创建固定数量的范围分区或列表分区。哈希分区提供了一种在指定数量的分区中均等地划分数据的方法,写入表中的数据均匀地分布在各个分区中,用户无法预测数据将被写入哪个分区中。例如,如果销售城市不是相对固定的,而是遍布全国各地,很难对表进行列表分区,此时可以对该表进行哈希分区。
例如,表9-2描述了基于时间分片的分区带来的收益。
表 9-2 分区场景及收益
| 场景描述 | 收益 |
|---|---|
| 当表中访问率较高的行位于一个单独分区或少数几个分区时。 | 大幅减少搜索空间,从而提升访问性 能。 |
| 当需要查询或更新一个分区的大部分记录时。 | 仅需要连续扫描对应分区,而非扫描整个表,因此可大幅提升性能。 |
| 当需要大量加载或者删除的记录位于一 个单独分区或少数几个分区时。 | 可直接读取或删除对应分区,从而提升 处理性能;同时由于避免大量零散的删 除操作,可减少清理碎片工作量。 |
数据分区带来的好处在于:
● 改善可管理性:利用分区,可以将表和索引划分成更小、更易管理的单元。数据库管理员在进行数据管理时就能采取“分而治之”的方法。 有了分区,维护操作可以专门针对表的特定部分执行。
● 可提升删除操作的性能:删除数据时可以删除整个分区,与分别删除每行相比,这种操作非常高效和快速。删除分区表与删除普通表的语法一致,都是通过DROPTABLE语法进行删除。
● 改善查询性能:通过限制要查询或操作的数据数量,分区可带来性能优势。
– 分区剪枝:分区剪枝(也称为分区消除)是DN可过滤掉不需要扫描的分区,只对相关的分区进行扫描的技术。分区剪枝通常可以将查询性能提高若干数量级。
– 智能化分区联接:通过使用智能化分区联接的技术,可以改善多表连接的性能。当两个表连接在一起,其中一个表使用连接键进行分区时,可以使用智能化分区联接,提升关联查询性能。
4. 全并行的数据查询处理
全并行查询处理是GaussDB T核心技术,可以最大限度的降低查询时节点之间的数据流动,提升查询效率。
GaussDB T为了高性能数据处理,打造了高性能的分布式执行引擎,以SQL引擎生成的执行计划为输入,将数据按执行计划的要求进行加工并将结果返回给客户端。
图 9-2 分布式查询示意图

涉及多个执行算子的复杂查询过程如下:
-
CN接收到查询任务,对SQL语句进行语法解析并分解出基础的查询和数据处理执行算子,比DataScan、Sort、Aggregation以及Join。
-
随后CN会生成最优的基础任务执行序列,并将这些基础任务部署到各个节点上去执行。
-
各个DN完成数据处理后,会将结果汇总到CN上并输出到客户端。
5. 高性能事务处理
GaussDB T通过高效的多级读写锁实现、MVCC机制(Multi-Version Concurrency Control)、事务隔离级别支持等一系列并发控制机制,保证在数据一致性前提下实现高并发访问。
技术特点:
● 事务隐式启动,可执行SQL(除登录语句外)隐含事务的开始。
● 默认非自动提交,用户通过Commit显式提交事务,或Rollback显式回滚事务。支持事务中设置保存点,实现事务在执行中回滚到保存点,从而避免了整个事务的回滚。
● DDL在独立事务内运行,遇到DDL语句数据库会自动提交前面事务,开始一个新的事务执行DDL语句。
● 支持表级、行级以及关键字级的锁,以控制不同粒度的数据对象的并发访问控制。
● 支持基于时间戳和回滚段的行级MVCC,实现数据查询和修改互不阻塞,极大提升并发查询和修改的性能。
● 支持设置隔离级别,提供Read Committed、Serializable和Current Committed三种事务隔离级别。
6. 工作负载管理
负载均衡
负载均衡包括两种方式,一种方式是通过F5硬负载均衡,第二种方式是通过GaussDB驱动(JDBC、GSC、ODBC等)软负载均衡;负载均衡作为所有集群服务器的统一入口,客户端先连接负载均衡服务器的IP地址和端口号,负载均衡服务器通过相应的算法选择集群中某一个服务器来接受该客户端的请求,实现了集群的工作负载管理,使每个服务器资源可以得到充分的利用。
GaussDB T集群提供两种载均衡方案:
● 第一种方式:使用F5

● 第二种方式:使用GaussDB驱动(JDBC、GSC、ODBC等)软负载均衡。

7. 高可靠事务处理
GaussDB T提供集群事务管理功能,此功能是集群故障切换的基础,负责保证集群所有节点间事务的ACID特性,保证故障可恢复,并负责节点的并发控制。
为了在集群出现故障时尽可能地不中断服务,GaussDB T提供了高可靠机制。把因为硬件、软件造成的故障对业务的影响程度降到最低,以保证业务的持续性。
故障恢复
支持节点故障可恢复及恢复后满足ACID特性。
事务管理:
● 分布式事务支持完整ACID特性。
● 支持分布式死锁预防,保证死锁时自动解锁或者预防死锁。
8. GS-Paxos 协议一致性说明
基于raft实现的协同复制框架构建数据强一致性分布式数据库。
华为GaussDB T的GS-Paxos协议基于raft协议设计实现,故障场景与raft协议一致。对于raft协议,满足多数派达成一致就可容忍少数派故障的场景,容忍N个节点故障需要的节点总数是2N+1。
GS-Paxos协议介绍如下:
-
当前GaussDB T数据库,通过GS-Paxos日志复制模块来实现多节点的数据库强一致高可用。
-
GS-Paxos复制模块是基于raft协议实现,负责REDO的一致性复制,确保REDO在多个节点的数据一致性,该模块通过动态库的方式集成到当前GaussDB T中。
-
事务在提交前会通过GS-Paxos模块将REDO日志发送给备机,并且判断在多数节点已经成功持久化,返回信息给主节点,主节点才能提交完成,以此保障发生故障后备节点数据和主节点数据是同步的。

以上图例介绍GS-Paxos模块与数据库交互过程:
- 事务提交、checkpoint或者后台log线程刷盘时调用ÃѪȎflñä¯接口写redo log,并同步触发GS-Paxos复制。
- 把REDO日志做合并压缩等处理后发送给GS-Paxos模块。
- GS-Paxos模块将raft日志写入本地存储。
- GS-Paxos模块发送一致性消息。
- GS-Paxos模块发送RPC(remote process call)请求到其他备节点。
- GS-Paxos模块的通信层上报RPC消息到GS-Paxos模块的协议层。
- GS-Paxos模块将日志写入备节点本地存储。
- GS-Paxos模块备机返回并达成一致。
- GS-Paxos主机Commit,多数派已经达成一致。
- 通过回调函数,通知DB达成一致,事务提交。
- 异步把redo log写到redo fiÃ中。
- 日志达成一致,GS-Paxos备节点Commit。
- 通过回调函数调用数据库REDO日志处理模块。
- 日志异步写到redo fiÃ中。
- 恢复线程获得REDO记录进行apply。
9. 闪回
通常在表数据被错误的UPDATE、DELETE、TRUNCATE和DROP时数据难以恢复,即便恢复也仅能通过PITR(Point-In-Time Recovery,基于时间点恢复)的方式恢复到错误操作前的时刻。这种修复方式会导致整个数据库不可用,并且一些用户不希望“撤销”的表操作也同样会被“撤销”。
GaussDB T对闪回以及回收站的支持,使用户可以通过指定时间戳进行闪回查询,或者指定时间戳对表进行闪回,获取到错误DELETE、UPDATE前的历史数据。通过从回收站中闪回TRUNCATE、以及DROP的表对象,用户可以将表数据恢复到错误操作前,大大提高了用户数据的可靠性。




