openGauss 核心体系架构深度解析

openGauss 核心体系架构深度解析

openGauss 是一款高性能、高安全、高可靠的企业级开源关系型数据库。要掌握它的运维与调优,必须深入理解其底层的体系结构。本文将从配置文件、逻辑架构、内存结构和存储结构四个维度进行详细剖析。

在这里插入图片描述

一、关键配置文件

在启动数据库之前,我们首先要关注两个决定数据库行为的核心文件,它们通常位于数据目录下。

在这里插入图片描述

1. 核心参数配置

这是数据库的总控文件,相当于人的心脏

作用:决定了数据库的内存分配如 shared_buffers、连接限制如 max_connections、日志记录以及端口监听等全局行为

生效机制:修改此文件中的大部分参数(尤其是涉及内存和端口的)需要重启数据库才能生效,部分参数可通过 reload 在线生效

2. 客户端认证策略

这是数据库的门卫文件,全称为 Host-Based Authentication

作用:它严格定义了允许哪些客户端 IP、通过什么认证方式如 md5, sha256, trust、访问哪个数据库以及使用哪个用户名

重要性:配置错误会导致拒绝连接或产生严重的安全漏洞

二、逻辑架构与进程结构

openGauss 的逻辑架构设计非常清晰,各组件分工明确,共同支撑起庞大的数据处理请求。

在这里插入图片描述

1. OM

角色:大管家

功能:提供数据库日常运维和配置管理的接口与工具

场景:我们日常使用的 gs_om 命令就是该模块的体现,用于执行集群的启动、停止、状态查询等操作

2. Client Driver

角色:联络员

功能:负责接收来自应用层的访问请求,并向应用返回执行结果

机制:它负责与 openGauss 实例建立通信链路,发送 SQL 命令。常见的驱动包括 JDBC、ODBC 和 Python 驱动

3. Datanode

角色:核心工兵

功能:负责存储业务数据、执行数据查询任务

高可用架构:实例包含主Primary、备 Standby两种类型

部署建议:为了实现高可用,建议将主、备实例分散部署在不同的物理节点中,防止单点故障。

4. Storage

角色:仓库

功能:指服务器的本地存储资源(即物理磁盘),用于持久化存储数据。


三、内存结构:速度的桥梁

内存是数据库性能的关键瓶颈所在,它充当了慢速磁盘与快速 CPU之间的桥梁。

在这里插入图片描述

1. Shared Buffer

定义:数据库服务器的共享内存缓冲区

核心机制:数据库中的读写操作都是针对内存中的数据。磁盘中的数据必须在处理前加载到此缓冲区中

适用场景:它是加速 I/O 访问速度的核心组件,主要服务于传统的行存储表(OLTP 场景)

2. Cstore Buffer

定义:专门为列存储 (Column Store)表使用的共享缓冲区

调优策略:在以列存表为主的分析型场景(OLAP)中,几乎不用 shared buffer。此时应减少shared_buffers 的配置大小,增加cstore_buffers 的大小,以获得更好的分析性能

3. MOT

定义:一种全内存存储引擎

特点:所有数据和索引都完全驻留在内存中,而非缓存机制

优势:在高性能(极低查询和事务延迟)、高可扩展性(高吞吐量和并发量)以及高资源利用率方面拥有显著优势

四、存储结构:数据的物理家园

数据库节点负责存储数据,其逻辑结构呈现出清晰的层级关系,类似于文件系统的目录结构。

在这里插入图片描述

1. 表空间

本质:是一个目录,系统可以存在多个表空间。
作用:里面存储的是它所包含的数据库的各种物理文件。通过表空间,可以将不同库的数据映射到不同的物理磁盘上(如将热数据放在 SSD)
关系:每个表空间可以对应多个Database(多对多关系的物理承载方)

2. 数据库

作用:用于管理各类数据对象(如表、索引、视图)。
隔离性:各数据库间相互隔离,无法直接跨库访问。
分布:一个数据库管理的对象可以分布在多个Tablespace 上。

3. 数据文件

对应关系:通常每张表只对应一个数据文件。
自动切分:如果某张表的数据量大于 1GB,系统会自动将其切分为多个后缀名为 .1, .2 的数据文件进行存储,以便于操作系统管理。

4. 表

归属:每张表只能属于一个数据库。
约束:每张表只能对应到一个Tablespace。也就是说,一张表的所有数据文件必须在同一个表空间目录下。

5. 数据块

定义:是数据库管理的基本单位,也称为 Page(页)
默认大小:8KB
I/O机制:所有的磁盘 I/O 操作都不是按行读写,而是按Block进行批量读写,以提高效率。


五、练习题

1. 在 openGauss 中,负责接收应用访问请求并返回执行结果的组件是?
A. OM
B. Client Driver
C. Storage
D. Shared Buffer

2. 关于 Shared Buffer 的描述,下列哪项是正确的?
A. 专门用于存储列存表数据
B. 所有数据和索引必须永久驻留在其中
C. 充当慢速磁盘与快速 CPU 之间的桥梁
D. 在列存场景下应尽可能调大

3. 如果业务场景以列存表 (Column Store) 为主,应该如何调整内存参数?
A. 增加 shared_buffers,减少 cstore_buffers
B. 减少 shared_buffers,增加 cstore_buffers
C. 同时增加 shared_buffers 和 cstore_buffers
D. 禁用 shared_buffers

4. MOT (Memory-Optimized Table) 的主要特点是?
A. 数据存储在磁盘,索引存储在内存
B. 仅用于缓存临时数据
C. 所有数据和索引都在内存中
D. 性能低于行存表,但节省空间

5. openGauss 中数据块 (Block) 的默认大小是多少?
A. 4KB
B. 8KB
C. 16KB
D. 32KB

6. 当一张表的数据文件超过多大时,系统会自动将其切分为多个文件?
A. 512MB
B. 1GB
C. 2GB
D. 4GB

7. 关于 Database (数据库) 的描述,错误的是?
A. 数据库之间相互隔离
B. 一个数据库可以分布在多个表空间上
C. 一个表空间只能对应一个数据库
D. 用于管理各类数据对象

8. 哪个配置文件主要负责控制数据库的连接权限和认证方式?
A. postgresql.conf
B. pg_hba.conf
C. cluster_config.xml
D. backup.conf

9. OM (Operation Manager) 模块的主要功能不包括?
A. 数据库日常运维
B. 配置管理
C. 执行 SQL 数据查询
D. 提供管理接口工具

10. 为了保证高可用,建议将 openGauss 的主、备实例如何部署?
A. 部署在同一个物理节点的不同目录下
B. 部署在同一个物理节点的同一个目录下
C. 分散部署在不同的物理节点中
D. 均部署在内存中

11. Tablespace (表空间) 在文件系统层面对应的是什么?
A. 一个具体的文件
B. 一个目录
C. 一个磁盘分区
D. 一个内存区域

12. 下列关于 Table (表) 与 Tablespace 的关系,说法正确的是?
A. 一张表的数据文件可以跨越多个 Tablespace
B. 一张表对应的数据文件必须在同一个 Tablespace 中
C. 一张表可以不属于任何 Tablespace
D. 一张表可以属于多个 Database

13. postgresql.conf 文件中的参数修改后,通常需要进行什么操作才能生效?
A. 立即自动生效
B. 重启数据库或重载配置
C. 重新安装数据库
D. 修改客户端驱动

14. 在 openGauss 进程结构中,哪个组件负责持久化存储数据?
A. Storage
B. Client Driver
C. OM
D. Memory

15. 为什么说内存充当了桥梁的作用?
A. 因为内存比 CPU 慢
B. 因为磁盘 I/O 速度远低于 CPU 处理速度
C. 因为内存容量无限大
D. 因为所有数据必须永久保存在内存中


六、答案与解析

1.B. Client Driver

解析:Client Driver 负责与 openGauss 实例通信,发送 SQL 命令并接收执行结果。OM 是运维模块。

2.C. 充当慢速磁盘与快速 CPU 之间的桥梁

解析:Shared Buffer 是行存共享缓冲区,用于缓存从磁盘读取的数据页,解决 CPU 与磁盘速度不匹配的问题。

3.B. 减少 shared_buffers,增加 cstore_buffers

解析:Cstore buffer 是专门为列存表设计的。在列存场景下,几乎不使用 shared buffer,因此应减少其大小以释放内存给 cstore buffer。

4.C. 所有数据和索引都在内存中

解析:MOT 是内存优化表,其核心特征就是数据和索引完全驻留内存,以此获得高性能和低延迟。

5.B. 8KB

解析:openGauss 默认的数据块(Block/Page)大小为 8KB,这是 I/O 的基本单位。

6.B. 1GB

解析:Datafile Segment 机制规定,如果某张表的数据大于 1GB,会分为多个数据文件存储。

7.C. 一个表空间只能对应一个数据库

解析:这是错误的说法。每个表空间可以对应多个 Database,即多个数据库可以共用一个表空间。

8.B. pg_hba.conf

解析:pg_hba.conf (Host-Based Authentication) 是专门用于配置客户端认证策略(黑白名单)的文件。

9.C. 执行 SQL 数据查询

解析:执行 SQL 查询是 openGauss 实例(Datanode)的工作,OM 负责运维和配置管理(如启动、停止)。

10.C. 分散部署在不同的物理节点中

解析:为了容灾和高可用,主备实例不能在同一台物理机上,否则物理机故障会导致整个集群不可用。

11.B. 一个目录

解析:Tablespace 在物理层面就是一个目录,用于指定数据文件在文件系统中的存储路径。

12.B. 一张表对应的数据文件必须在同一个 Tablespace 中

解析:一张表只能属于一个 Database,也只能位于一个 Tablespace 中。

13.B. 重启数据库或重载配置

解析postgresql.conf 是核心参数文件,大多数参数(尤其是涉及内存和端口的)修改后需要重启 (gs_om -t stop/start) 或重载 (gs_om -t reload) 才能生效。

14.A. Storage

解析:Storage 指的是服务器的本地存储资源(磁盘),负责数据的持久化。

15.B. 因为磁盘 I/O 速度远低于 CPU 处理速度

解析:这是数据库引入缓冲区的根本原因。CPU 处理极快,磁盘 I/O 极慢,必须通过内存作为中间缓冲来加速访问。

日期:2025年12月23日
专栏:openGauss

Read more

什么是 Session?Web 开发中 Session 的使用与注意事项

什么是 Session?Web 开发中 Session 的使用与注意事项

✅ 引言 在 Web 开发中,HTTP 协议是无状态的,这意味着每次请求之间没有关联。为了实现用户登录、购物车、权限控制等功能,服务器需要一种机制来“记住”用户。Session(会话) 就是解决这一问题的核心技术之一。 本文将深入讲解: * 什么是 Session? * Session 的工作原理 * 在 Java Web 和 Spring Boot 中如何使用 Session * 使用 Session 的最佳实践与常见注意事项 * 安全风险与应对策略 并提供完整的 Java + Spring Boot 示例代码,帮助你全面掌握 Session 的使用。 📌 一、什么是 Session? 1.1 基本定义 Session(会话)是服务器端用于保存用户状态的一种机制。

By Ne0inhk
【前端小站】HTML 标签:网页骨架,从空白到惊艳,全靠这些 HTML 标签搞事情

【前端小站】HTML 标签:网页骨架,从空白到惊艳,全靠这些 HTML 标签搞事情

半桔:个人主页  🔥 个人专栏: 《前端扫盲》《手撕面试算法》《C++从入门到入土》 🔖为什么有人总是赞美生活的丰富多彩?我想这是因为他们善于品尝生活中随时出现的意外。 -余华- 文章目录 * 前言 * 一. HTML结构 * 1.1 初始HTML标签 * 1.2 标签的层次 * 二. HTML文本标签 * 2.1 标题标签 * 2.2 段落标签 * 2.3 强调标签 * 2.3.1 加粗 * 2.3.2 倾斜 * 2.3.3 删除线 * 2.3.4 下划线 * 三. 媒体与交互标签 * 3.

By Ne0inhk
基于C++11手撸前端Promise

基于C++11手撸前端Promise

文章导航 * 引言 * 前端Promise的应用与优势 * 常见应用场景 * 并发请求 * Promise 解决的问题 * 手写 C++ Promise 实现 * 类结构与成员变量 * 构造函数 * resolve 方法 * reject 方法 * then 方法 * onCatch 方法 * 链式调用 * 使用示例 * `std::promise` 与 `CProimse` 对比 * 1. 基础功能对比 * 2. 实现细节对比 * (1) 状态管理 * (2) 回调注册与执行 * (3) 异步支持 * (4) 链式调用 * 3. 代码示例对比 * (1) `CProimse` 示例 * (2) `std::promise` 示例 * 4.

By Ne0inhk
❿⁄₁₃ ⟦ OSCP ⬖ 研记 ⟧ 密码攻击实践 ➱ 获取并破解Net-NTLMv2哈希(下)

❿⁄₁₃ ⟦ OSCP ⬖ 研记 ⟧ 密码攻击实践 ➱ 获取并破解Net-NTLMv2哈希(下)

郑重声明:本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。 🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论 | 保持连接💬 🌌 立即前往 👉晖度丨安全视界🚀 ▶ 信息收集  ▶ 漏洞检测 ▶ 初始立足点  ▶ 权限提升 ▶ 横向移动 ➢ 密码攻击 ➢  获取并破解Net-NTLMv2哈希(下)🔥🔥🔥 ▶ 报告/分析 ▶ 教训/修复 目录 1.密码破解 1.1 破解Windows哈希实践 1.1.3 捕获Net-NTLMv2哈希实践 1.1.3.3 使用Netcat连接绑定 Shell(kali上) 1.连接流程 2.连接命令

By Ne0inhk