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 架构配置的建议:

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