Skip to content

GaussDB 逻辑架构

GaussDB 采用分层的逻辑架构设计,将数据库功能划分为多个独立的层次和组件,每个层次负责特定的功能,组件之间通过清晰的接口进行通信。这种分层设计提高了系统的模块化程度、可扩展性和可维护性。

核心架构层次

1. 应用接口层

应用接口层是 GaussDB 与外部应用程序交互的接口,负责接收应用程序的请求并返回处理结果。

主要组件

通信协议处理器
  • 支持多种通信协议,包括 PostgreSQL 协议、MySQL 协议和自定义协议
  • 处理客户端连接请求,建立和管理数据库连接
  • 实现连接池管理,优化连接资源使用
SQL 解析器
  • 接收 SQL 语句,进行词法分析和语法分析
  • 生成抽象语法树(AST)
  • 检查 SQL 语法和语义正确性
结果集格式化器
  • 将查询结果格式化为客户端可识别的格式
  • 支持多种结果集格式,如文本格式、二进制格式、JSON 格式等
  • 实现结果集的分页和流式传输

2. 业务逻辑层

业务逻辑层是 GaussDB 的核心处理层,负责处理 SQL 语句的执行逻辑,包括查询优化、事务管理、权限控制等。

主要组件

查询优化器
  • 基于成本的查询优化(CBO)和基于规则的查询优化(RBO)
  • 生成最优的查询执行计划
  • 支持查询重写和谓词下推
  • 集成机器学习算法,实现智能查询优化
执行引擎
  • 执行查询执行计划
  • 支持多种执行模式,包括行执行、向量执行和编译执行
  • 实现分布式并行执行,将查询分解为多个子任务在不同节点上执行
事务管理器
  • 实现 ACID 事务特性
  • 支持分布式事务处理
  • 实现事务隔离级别控制
  • 管理事务日志和恢复
权限管理器
  • 基于角色的访问控制(RBAC)
  • 支持细粒度权限控制(表级、行级、列级)
  • 实现权限检查和授权
  • 支持多种认证方式

3. 存储引擎层

存储引擎层负责数据的物理存储和管理,包括数据文件、索引、日志等。

主要组件

存储引擎接口
  • 定义统一的存储引擎接口
  • 支持多种存储引擎的插拔
  • 实现存储引擎的动态切换
行存储引擎
  • 优化 OLTP 场景的事务处理
  • 支持行级锁和 MVCC
  • 实现高效的插入、更新和删除操作
列存储引擎
  • 优化 OLAP 场景的分析查询
  • 支持列级压缩和编码
  • 实现高效的列扫描和聚合操作
行列混合存储引擎
  • 结合行存储和列存储的优势
  • 根据数据类型和查询模式自动选择存储方式
  • 支持热点数据识别和动态调整

4. 分布式协调层

分布式协调层负责分布式环境下的协调和管理,包括节点管理、数据分布、一致性维护等。

主要组件

节点管理器
  • 管理集群中的节点状态
  • 实现节点的动态加入和退出
  • 监控节点健康状况
数据分布管理器
  • 管理数据的分片和分布策略
  • 实现数据的自动重分布
  • 支持多种分片算法,如哈希分片、范围分片、列表分片等
一致性协调器
  • 实现分布式一致性协议(Paxos/Raft)
  • 管理多副本数据的同步
  • 处理节点故障和恢复
分布式事务协调器
  • 实现两阶段提交(2PC)协议
  • 管理跨节点事务
  • 处理事务的提交和回滚

5. 系统管理层

系统管理层负责数据库系统的管理和维护,包括配置管理、监控告警、日志管理等。

主要组件

配置管理器
  • 管理数据库配置参数
  • 支持动态参数调整
  • 实现配置的持久化和一致性
监控管理器
  • 收集系统性能指标和状态信息
  • 实现告警规则和通知
  • 支持监控数据的持久化和分析
日志管理器
  • 管理数据库日志,包括事务日志、错误日志、审计日志等
  • 实现日志的归档和清理
  • 支持日志的分布式管理
备份恢复管理器
  • 管理数据库备份和恢复操作
  • 支持全量备份、增量备份和日志备份
  • 实现跨集群备份和恢复

核心组件详解

查询处理流程

  1. SQL 解析:应用接口层接收 SQL 语句,进行词法分析和语法分析,生成抽象语法树(AST)。

  2. 查询优化:查询优化器根据 AST 生成多个可能的执行计划,通过成本估算选择最优的执行计划。

  3. 执行计划生成:将最优执行计划转换为可执行的物理执行计划。

  4. 执行调度:执行引擎将执行计划分解为多个子任务,根据节点资源情况进行调度。

  5. 并行执行:在分布式环境下,子任务在多个节点上并行执行。

  6. 结果汇总:收集各个节点的执行结果,进行汇总和格式化。

  7. 结果返回:将最终结果返回给客户端。

事务处理机制

GaussDB 实现了完整的 ACID 事务特性:

  • 原子性(Atomicity):事务要么全部执行成功,要么全部失败回滚。
  • 一致性(Consistency):事务执行前后,数据库状态保持一致。
  • 隔离性(Isolation):多个事务并发执行时,相互之间不影响。
  • 持久性(Durability):事务提交后,数据修改永久保存。

分布式事务处理

GaussDB 采用两阶段提交(2PC)协议实现分布式事务:

  1. 准备阶段:协调者向所有参与者发送准备请求,参与者执行事务操作但不提交。
  2. 提交阶段:如果所有参与者都准备成功,协调者发送提交请求,参与者提交事务;否则,协调者发送回滚请求,参与者回滚事务。

存储管理机制

数据组织

GaussDB 采用页式存储管理,数据以页为单位存储在磁盘上。每个页的大小默认为 8KB,可配置。

主要数据结构

  • 表空间(Tablespace):逻辑存储容器,对应一个或多个物理目录。
  • 数据库(Database):包含多个模式。
  • 模式(Schema):包含多个数据库对象(表、视图、索引等)。
  • 表(Table):由多个数据页组成。
  • 索引(Index):加速数据查询,支持多种索引类型。

索引管理

GaussDB 支持多种索引类型:

  • B-tree 索引:适用于等值查询和范围查询
  • Hash 索引:适用于等值查询
  • GIN 索引:适用于全文搜索和数组查询
  • GiST 索引:适用于空间数据和自定义数据类型
  • SP-GiST 索引:适用于非平衡数据结构
  • BRIN 索引:适用于大型表和顺序数据

分布式架构组件

节点角色

GaussDB 集群中的节点具有不同的角色:

  • 主节点(Master Node):负责集群管理、元数据管理和查询协调。
  • 计算节点(Compute Node):负责数据计算和查询执行。
  • 存储节点(Storage Node):负责数据存储和管理。
  • 协调节点(Coordinator Node):负责分布式事务协调和一致性维护。

数据分布策略

GaussDB 支持多种数据分布策略:

  • 哈希分布:根据指定列的哈希值分布数据
  • 范围分布:根据指定列的范围分布数据
  • 列表分布:根据指定列的离散值分布数据
  • 复制分布:将数据复制到多个节点
  • 本地分布:将数据存储在本地节点

架构优势

模块化设计

GaussDB 采用模块化的架构设计,各个组件之间通过清晰的接口通信,便于系统的扩展和维护。

分布式扩展性

分布式架构设计支持水平扩展,能够根据业务需求灵活添加或移除节点,应对数据量和并发量的增长。

多模数据支持

支持多种数据模型和存储引擎,能够处理结构化数据、非结构化数据和时空数据等多种数据类型。

高性能计算

分布式并行计算框架和多种执行模式(行执行、向量执行、编译执行)确保了系统的高性能。

高可用性

多副本同步机制和自动故障切换确保了系统的高可用性和可靠性。

AI 原生能力

集成了 AI 技术,实现了智能查询优化、自动参数调优和异常检测等功能。

架构演进

从集中式到分布式

GaussDB 从基于 PostgreSQL 的集中式架构演进到分布式架构,支持大规模数据存储和高并发处理。

从单一存储引擎到多存储引擎

从单一的行存储引擎,演进到支持行存储、列存储和行列混合存储的多存储引擎架构。

从传统优化到 AI 优化

从基于规则和成本的传统查询优化,演进到集成机器学习算法的智能查询优化。

从单机事务到分布式事务

从单机事务处理,演进到支持分布式事务的处理能力。

架构配置与优化

架构配置选项

节点数量配置

  • 根据业务需求和数据规模,配置合适的节点数量
  • 主节点、计算节点和存储节点可以分离部署,也可以混合部署
  • 建议根据数据量和并发量,逐步扩展节点数量

存储引擎选择

  • 根据业务场景选择合适的存储引擎
  • OLTP 场景建议使用行存储引擎
  • OLAP 场景建议使用列存储引擎
  • 混合负载场景建议使用行列混合存储引擎

数据分布策略选择

  • 根据数据特性和查询模式选择合适的数据分布策略
  • 均匀分布的数据建议使用哈希分布
  • 范围查询频繁的数据建议使用范围分布
  • 离散值数据建议使用列表分布

架构优化建议

查询性能优化

  • 合理设计数据分布策略,减少数据倾斜
  • 优化查询语句,避免全表扫描
  • 合理创建索引,加速查询
  • 利用查询优化器的智能优化功能

高可用性优化

  • 配置合理的副本数量(建议 3 副本)
  • 启用自动故障切换
  • 配置多可用区部署
  • 定期进行故障演练

存储优化

  • 合理设计表结构和索引
  • 启用数据压缩
  • 定期进行数据清理和维护
  • 监控存储使用率,及时扩容

常见问题(FAQ)

Q1: GaussDB 逻辑架构分为哪些主要层次?

A1: GaussDB 逻辑架构分为五个主要层次:

  • 应用接口层:处理客户端连接和 SQL 解析
  • 业务逻辑层:负责查询优化、事务管理、权限控制等
  • 存储引擎层:负责数据的物理存储和管理
  • 分布式协调层:负责分布式环境下的协调和管理
  • 系统管理层:负责系统的管理和维护

Q2: GaussDB 支持哪些存储引擎?

A2: GaussDB 支持多种存储引擎:

  • 行存储引擎:优化 OLTP 场景
  • 列存储引擎:优化 OLAP 场景
  • 行列混合存储引擎:平衡 OLTP 和 OLAP 场景

Q3: GaussDB 如何实现分布式事务?

A3: GaussDB 采用两阶段提交(2PC)协议实现分布式事务,确保跨节点事务的 ACID 特性。

Q4: GaussDB 支持哪些数据分布策略?

A4: GaussDB 支持多种数据分布策略:

  • 哈希分布:根据哈希值分布数据
  • 范围分布:根据范围分布数据
  • 列表分布:根据离散值分布数据
  • 复制分布:将数据复制到多个节点
  • 本地分布:将数据存储在本地节点

Q5: GaussDB 如何实现高可用性?

A5: GaussDB 通过以下方式实现高可用性:

  • 多副本同步机制,确保数据可靠性
  • 自动故障检测和故障切换
  • 支持多可用区部署
  • 同城灾备和异地灾备方案

Q6: GaussDB 如何优化查询性能?

A6: GaussDB 通过多种方式优化查询性能:

  • 基于成本和规则的查询优化
  • 分布式并行执行
  • 多种执行模式(行执行、向量执行、编译执行)
  • 智能查询优化(集成机器学习算法)

Q7: GaussDB 逻辑架构的模块化设计有什么优势?

A7: 模块化设计的优势包括:

  • 便于系统扩展和维护
  • 支持组件的独立升级和替换
  • 提高系统的可靠性和可用性
  • 便于支持多种应用场景

Q8: GaussDB 如何支持 AI 原生能力?

A8: GaussDB 通过集成机器学习算法,实现了:

  • 智能查询优化
  • 自动参数调优
  • 异常检测和预测
  • 智能索引推荐

Q9: GaussDB 架构如何支持多模数据处理?

A9: GaussDB 通过以下方式支持多模数据处理:

  • 支持多种数据模型(关系型、非关系型、时空数据)
  • 多种存储引擎支持不同类型的数据存储
  • 统一的查询语言和接口
  • 支持数据之间的关联查询

Q10: 如何选择 GaussDB 的架构配置?

A10: 选择 GaussDB 架构配置的建议:

  • 根据业务场景选择合适的存储引擎
  • 根据数据特性选择合适的数据分布策略
  • 根据数据规模和并发量配置节点数量
  • 考虑系统的高可用性和扩展性要求
  • 定期监控和优化系统架构