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

深入理解 MySQL:索引、数据库设计、事务与视图

深入理解 MySQL:索引、数据库设计、事务与视图

在日常的后端开发中,MySQL 作为一款经典的关系型数据库,是我们数据存储和管理的核心工具。想要让 MySQL 发挥出最优性能,同时保证数据的完整性、一致性和安全性,就必须深入掌握索引、数据库设计、事务和视图这些核心知识点。本文将结合实战场景,详细拆解这四大核心模块的使用逻辑与最佳实践。 一、索引:提升查询效率的 “加速器” 索引是 MySQL 优化查询性能的关键手段,其本质是一种特殊的数据结构(如 B + 树),能够帮助数据库快速定位到目标数据,避免全表扫描带来的性能损耗。 1. 索引的核心类型 (1)普通索引 最基础的索引类型,无唯一性约束,仅用于加速查询。 * 创建方式: -- 直接创建 CREATE INDEX idx_username ON user (username); -- 修改表结构添加 ALTER TABLE user ADD

By Ne0inhk
2025版最详细WebStorm下载安装教程(详细图解)

2025版最详细WebStorm下载安装教程(详细图解)

目录 一、前言 二、WebStorm的下载安装 1、下载WebStorm 2、安装WebStorm 3、首次启动WebStorm 一、前言 前端一般就是用WebStorm或者是VSCode,Jetbrains家的ide一般都比较重,VSCode相对而言就轻快一点。主要还是看大家自己喜欢哪个就下哪个,我个人电脑内存是32G所以我一直用Jetbrains家的软件体验不错。本博客记录一下WebStorm的安装流程,大家自行参考 然后WebStorm从24年10月开始就是免费的了,所以不需要任何许可证直接下了就能用,并且也不需要像Java和Python那样配JDK和解释器,整体还是很简单的 二、WebStorm的下载安装 1、下载WebStorm 打开浏览器,访问JetBrains的官方网址,点击如下网址能直接跳转到WebStorm的下载页面: Download WebStorm: The JavaScript and TypeScript IDE by JetBrains 选择好自己的系统,然后直接点击Download即可 等待安装包下载完成,网速快

By Ne0inhk
前端国际化之i18n(VUE项目)

前端国际化之i18n(VUE项目)

解释与说明         i18n,全名是internationalization,称为国际化。         我理解的就四个字:语言转换。         让以其他语言作为母语的人能看懂你的前端中的文字。         我们常用的就是中文简体(zh_CN)与英文(美国)(en_US)的转换。         当然也可以增添中文繁体(zh_TW)等等你想要的其他语言。 缩写的由来 internationalization,首字母 i 和末字母 n 之间有 18 个字母,故缩写为 i18n 。 与之对应的是L10n,本地化,Localization。         最好在项目初期就计划使用国际化,这样相对后期使用会大大减少工作量。 项目使用 安装 1,在你的软件中打开控制台         我使用的是IDEA,其实前端更推荐使用VSCode。 2,进入前端的文件夹 cd web         我的前端的文件夹名称是web,相应变换成你自己命名的前端文件夹名称。 3,使用下载安装命令 npm

By Ne0inhk
web前端开发岗位就业前景和未来变化分析(附:AI技术如何进一步影响前端工作)

web前端开发岗位就业前景和未来变化分析(附:AI技术如何进一步影响前端工作)

web前端开发岗位就业前景和未来变化分析,被AI取代的风险评估 Qwen3-Max 以下是对 Web 前端开发岗位的就业前景、未来变化趋势及被 AI 取代风险 的系统性分析,结合 2025 年最新行业动态、技术演进与劳动力市场数据: 一、当前就业市场现状(2025年) ✅ 趋势特征: * 初级岗位大幅萎缩: 据 LinkedIn 与 Indeed 数据,2021–2024 年,全球“前端工程师”招聘需求下降 60%~70%,尤以基础切图、表单开发类岗位为主。 * 中高级岗位结构性分化: * 纯 UI 实现岗减少; * 工程化、架构、跨端、AI 协同类岗位需求上升(如“前端架构师”“Web 全栈 AI 工程师”)。 * 薪资两极化:

By Ne0inhk