目 录CONTENT

文章目录

AI生成技术报告:GaussDB与openGauss的HTAP功能全面对比

DarkAthena
2025-08-22 / 0 评论 / 0 点赞 / 6 阅读 / 0 字

GaussDB 与 openGauss 的 HTAP 功能比较

前言

GaussDB集中式版本从505.2版本开始引入了HTAP混合负载功能,openGauss也从7.0.0 RC1版本开始引入了HTAP行列融合功能,加强了行存转列存的使用友好度,但两者的实现似乎存在不小的差异。
虽然文档都是公开的,但是阅读和整理需要花不少时间。为了更快的识别出两者的异同,于是我让扣子空间去看这两个官方文档,整理出了这篇文章

https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/25.1.30/fg-cent/gaussdb-48-0416.html
https://docs.opengauss.org/zh/docs/latest/docs/AboutopenGauss/%E8%A1%8C%E5%88%97%E8%9E%8D%E5%90%88.html

AI生成报告

📍注意:下面AI生成的存在不少错误,不代表本文作者观点。

一、相同点

1. 核心架构设计

  • 内存列存储引擎:两者均采用内存中列式存储结构(GaussDB 的 IMCV vs openGauss 的 IMCStore),实现行存数据的列格式快照维护
  • 向量化执行引擎:均支持批量数据处理的向量化执行,提升连接、聚合等操作效率
  • 事务一致性保障:通过事务元数据单元(GaussDB 的 TMU)或增量表同步(openGauss)机制,确保行列存储数据的强一致性

2. 主备集群支持

  • 高可用架构:均支持主备部署模式,主备节点间通过日志同步(Xlog / 回放机制)维护数据一致性
  • 故障切换能力:主备切换时内存列存储数据不丢失,保障服务连续性

3. 混合负载处理

  • 透明路由机制:均能自动识别 TP/AP 查询类型,优化并路由至行存或列存引擎执行
  • 资源隔离:实现 OLTP 与 OLAP 负载的资源管控,避免相互干扰

二、差异点

1. 架构实现方式

特性 GaussDB openGauss
列存部署位置 主机与备机均维护 IMCV 仅备机维护 IMCStore 列缓存
同步机制 TMU 记录实时事务更新行,与 IMCV 快照强一致 备机通过日志回放至增量表,后台线程异步同步至列缓存
核心组件 IMCV+TMU + 向量化引擎 + 路由模块 IMCStore + 增量表 + Vector Partition Iterator

2. 功能特性对比

功能 GaussDB openGauss
行列转换粒度 未明确提及列级控制 支持表级、分区级、列级精细化转换
查询路由 自动透明路由 需要手动设置 enable_imcsscan=on启用列存扫描
事务支持 实时事务单元(TMU)保证强一致性 存在微小同步延迟(日志回放→增量表→列缓存)
资源管控 内置混合负载内存资源管控 未明确提及资源调度机制

3. 使用约束差异

约束类型 GaussDB openGauss
支持表类型 未明确限制 不支持临时表、系统表、Toast 表等 10 + 种表类型
数据类型限制 未明确提及 不支持 text/hll 等变长类型,单字段长度≤8KB
操作限制 无特殊说明 不支持 TRUNCATE、VACUUM FULL 等操作
部署要求 主备同构部署 需修改 pg_hba.conf 配置信任认证

4. 管理操作方式

操作 GaussDB openGauss
列存启用 自动维护(透明路由) 需执行 ALTER TABLE ... IMCSTORED显式转换
分区支持 主备切换不影响 IMCV 仅支持一级分区,自动新增分区需手动转换
状态监控 未提及 可通过执行计划查看 IMCStore Scan 算子

三、总结

GaussDB 优势场景

  • 对事务一致性要求极高的核心业务
  • 需要全自动负载路由的混合场景
  • 复杂资源调度需求的多租户环境

openGauss 优势场景

  • 资源受限环境下的备机资源利用
  • 需要精细化行列转换控制的分析场景
  • 对存储成本敏感的非核心业务系统

选型建议

  • 金融级核心交易系统优先选择 GaussDB
  • 分析型查询为主的业务可考虑 openGauss
  • 主备架构下需评估同步延迟对业务的影响

四、HTAP 架构图深度解析

GaussDB HTAP 架构解析

集中式主机架构(图 1)

核心组件交互流程

  1. 双引擎并行处理:行存引擎处理 TP 事务,IMCV 列存引擎处理 AP 查询
  2. 实时一致性保障:TMU 单元在 IMCV 快照基础上记录活跃事务更新,确保列存扫描与行存结果强一致
  3. 智能路由机制:查询解析器自动识别负载类型,TP 点查路由至行存引擎,AP 分析查询路由至向量化执行引擎
  4. 资源隔离设计:内置资源管控模块实现内存资源动态分配,避免 TP/AP 负载相互干扰

集中式主备架构(图 2)

image

高可用设计特点

  • 主备同构部署:主机和备机均维护独立 IMCV 列存引擎
  • 日志同步机制:主机 IMCV 操作记录 Xlog,备机通过回放日志保持数据一致
  • 无感知切换:主备切换时 IMCV 内存数据不回收,服务中断时间最小化
  • 双向数据加载:主备机均支持通过 BUCKLOAD 加载存量数据至 IMCV

openGauss HTAP 架构解析

主备场景行列转换架构(图 1)

image

关键数据流路径

  1. 主节点 OLTP 处理:行存数据变更通过 WAL 日志同步至备节点
  2. 备节点增量同步
  • 日志回放写入增量表
  • 后台同步线程异步更新列缓存
  • Column Unit 列存储单元批量组织数据
  1. 查询路由决策:备节点优化器根据代价估算选择 IMCStore Scan 或行存扫描
  2. 向量化执行路径:Vector Partition Iterator 实现分区表列存数据并行扫描

架构设计对比总结

架构维度 GaussDB 设计特点 openGauss 设计特点
列存部署 主备节点均部署 IMCV 仅备节点部署列缓存
同步机制 Xlog 实时同步 + TMU 强一致 日志回放→增量表→异步同步
组件复杂度 多模块协同(5 大核心组件) 轻量化设计(3 大核心流程)
资源利用 主备资源对称使用 备节点专用 OLAP 资源
故障恢复 IMCV 内存数据不丢失 需重建列缓存

架构选择建议

  • 金融级关键业务推荐 GaussDB 的强一致架构
  • 资源受限场景可选择 openGauss 的备机专用架构
  • 混合负载密集型应用优先考虑 GaussDB 的资源管控能力

五、HTAP 使用语法差异详解

GaussDB 特有语法体系

1. IMCV 管理命令

操作 GaussDB 语法 openGauss 对应功能
创建列存视图 CREATE IMCV imcv_name ON table_name [(columns)] WITH (refresh_strategy={AUTO|MANUAL}, refresh_interval=sec) ALTER TABLE table_name IMCSTORED
删除列存视图 DROP IMCV [IF EXISTS] imcv_name [CASCADE] ALTER TABLE table_name UNIMCSTORED
手动刷新 REFRESH IMCV imcv_name 无(自动异步刷新)

示例对比

sql

-- GaussDB创建自动刷新IMCV
CREATE IMCV imcv_emp ON employees (id,name,salary) 
WITH (refresh_strategy=AUTO, refresh_interval=180);

-- openGauss行列转换
ALTER TABLE employees IMCSTORED(id,name,salary);

2. 查询路由控制

功能 GaussDB 实现方式 openGauss 实现方式
强制列存查询 SELECT /*+ COLVIEW(imcv_name) */ ... SET enable_imcsscan=on; SELECT ...
强制行存查询 SELECT /*+ NOCOLVIEW */ ... SET enable_imcsscan=off; SELECT ...
自动路由 ALTER SYSTEM SET htap_transparent_route=on 无(需手动切换参数)

3. 核心参数配置

功能类别 GaussDB 关键参数 openGauss 对应参数
功能开关 enable_htap=on 无(通过 ALTER TABLE 启用)
内存管控 imcv_mem_limit=2048(MB) 无(依赖系统内存管理)
刷新控制 imcv_refresh_interval=300(秒) 无(固定异步刷新)
路由控制 htap_transparent_route=on

4. 数据操作差异

操作类型 GaussDB 行为 openGauss 行为
DML 同步 自动同步至 IMCV(MANUAL 模式需 REFRESH) 日志回放→增量表→异步同步
批量加载 COPY/INSERT SELECT自动触发同步 需手动 REFRESH 或等待异步同步
主备切换 IMCV 元数据自动继承 需重建列缓存

GaussDB 语法优势分析

  1. 精细化控制能力
  • 支持按列选择 IMCV 存储(减少内存占用)
  • 灵活的刷新策略(AUTO/MANUAL)适应不同业务场景
  • 细粒度内存管控避免资源竞争
  1. 运维友好性
  • 提供 pg_imcv_stats等监控视图
  • LRU 淘汰机制自动平衡内存使用
  • 主备切换无感知(IMCV 数据不丢失)
  1. 性能优化特性
  • 透明路由减少人工干预
  • 强制路由 hint 支持 SQL 调优
  • 内存使用超限自动保护机制

语法使用注意事项

  1. IMCV 命名规范:建议遵循 imcv_<table>_<columns>格式,如 imcv_employees_id_name
  2. 内存规划:按 活跃数据集*2配置 imcv_mem_limit
  3. 刷新策略选择
  • 实时分析场景:AUTO 策略(间隔 1-5 分钟)
  • 批量处理场景:MANUAL 策略(加载后手动刷新)
  1. 主备配置:参数需在主备节点同时配置,确保切换后行为一致

典型配置示例

sql

-- GaussDB完整配置流程
ALTER SYSTEM SET enable_htap = on;
ALTER SYSTEM SET imcv_mem_limit = 4096;
ALTER SYSTEM SET htap_transparent_route = on;
SELECT pg_reload_conf();

-- 创建IMCV
CREATE IMCV imcv_emp ON employees 
WITH (refresh_strategy=AUTO, refresh_interval=300);

-- 验证配置
SELECT imcv_name, status, refresh_strategy 
FROM pg_imcv_status;

补充:openGauss 行列融合参数详解

参数配置对比(更新版)

参数类别 GaussDB 参数 openGauss 新增参数 差异分析
功能开关 enable_htap=on(动态) enable_imcsscan=off(会话级动态) GaussDB 全局启用,openGauss 需按会话开启
并行处理 内置自动并行 enable_parallel_populate=on(默认开启) GaussDB 无需额外配置
内存管控 imcv_mem_limit=2048(MB,动态) max_imcs_cache=102400(kB,静态,默认 100MB) GaussDB 支持动态调整,openGauss 需重启且依赖 max_process_memory
同步控制 - htap_wait_xlog_lsn_timeout=60(秒,静态) openGauss 备机同步超时控制,GaussDB 无对应参数

openGauss 参数特性解析

  1. 内存管理机制
  • max_imcs_cache以 kB 为单位(102400kB=100MB),需通过 postgresql.conf配置并重启数据库
  • 必须同步调整 max_process_memory参数,否则可能触发内存校验失败
  • 无动态调整能力,灵活性低于 GaussDB
  1. 查询控制流程

sql

-- openGauss完整查询流程
SET enable_imcsscan=on;  -- 会话级开启
SELECT ...;  -- 执行列存查询
SET enable_imcsscan=off; -- 关闭列存查询

对比 GaussDB:SELECT /*+ COLVIEW(imcv_name) */ ...(单语句控制)
3. 备机同步控制

  • htap_wait_xlog_lsn_timeout控制备机等待主机日志的超时时间
  • 超时后行列转换可能使用旧数据,影响查询一致性

参数使用建议

场景 openGauss 配置建议 GaussDB 配置建议
内存受限环境 max_imcs_cache=51200(50MB) imcv_mem_limit=512(动态调整)
实时性要求高 htap_wait_xlog_lsn_timeout=120 依赖 TMU 实时同步(无需参数)
批量数据加载 enable_parallel_populate=on 内置并行(无需参数)
多会话查询 每个会话单独 SET enable_imcsscan=on 全局 htap_transparent_route=on自动路由

** 配置示例(openGauss)**:

sql

-- 修改postgresql.conf
max_imcs_cache = 204800  # 200MB
max_process_memory = 4GB  # 需同步增大

-- 重启数据库后生效
-- 会话级开启列存查询
SET enable_imcsscan=on;

观后感

AI生成的这份内容,大概是3~4次对话后生成的。有些地方说得不够细致,而且还有一些自相矛盾的内容,但整体框架和内容整理,给了用户一个指引,需要从哪些方面去对这个功能进行了解,以及这两者主要的差异,大不了就自己再去看文档确认一下。
比如并行处理,GaussDB和openGauss有相同的参数 enable_parallel_populate,但是GaussDB默认关闭,openGauss默认打开,AI说反了。
还有scan的开关,GaussDB是enable_imcvscan,openGauss是enable_imcsscan,但AI没有识别到GaussDB的这个参数。
从语法上来说,GaussDB是对表创建了一个 "V"-view(本质上其实还是"S"-store),而openGauss是修改了表的属性,让相关线程能知道这个表开启了"S"。
我暂时没有去看openGauss的源码来分析其实现机制,但是目前无论是从语法、使用场景、设计思路上来说,这两个库的HTAP功能可以说绝对不是同一个人写的代码。不过这两个库在对表的扫描上,都使用了旧版本GaussDB和openGauss原本就有的列存计划及向量化处理。

扣子空间会根据用户提的需求,自行开发工具去实现,如果发现工具不好实现,它甚至会模拟人类的行为去执行一些应用程序的操作,比如用浏览器打开网页,识别出网页元素,自行点击操作。遇到需要登录的网站,还会让你临时接管,登录后继续交回给它操作。
下面这个截图是它发现它写的python脚本无法获取页面里子链接的内容,就打开了一个文档网站,甚至自己去进行了相关关键字的搜索,打开搜索结果页面,后续它还回到了搜索结果列表,继续点击下一个结果进行查看

image-tgsa.png

但是免费的东西终归还是...

image-rjgr.png

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
博主关闭了所有页面的评论