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. 架构实现方式

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

2. 功能特性对比

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

3. 使用约束差异

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

4. 管理操作方式

操作GaussDBopenGauss
列存启用自动维护(透明路由)需执行 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)

在这里插入图片描述

高可用设计特点

  • 主备同构部署:主机和备机均维护独立 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

  • 本文作者: DarkAthena
  • 本文链接: https://www.darkathena.top/archives/AI-Generated-Technical-Assessment-HTAP-Implementation-Differences-Between-GaussDB-and-openGauss
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94317.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94317.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94317.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序开发指南(四)(UI 框架整合)

✍讲解了微信小程序 UI 框架的使用方法和特点&#xff0c;根据项目需求选择合适的组件库。附有相应的组件库预览码&#xff0c;也是将所有的微信小程序原生组件库整合在一起方便后续开发的使用。如果有不好或者有错误的地方请告知&#xff01;希望可以与大家相互的交流学习&…

golang 1.25.0 安装

wget https://golang.google.cn/dl/go1.25.0.linux-amd64.tar.gz tar -C /usr/local/ -xzf go1.25.0.linux-amd64.tar.gz ln -s /usr/local/go/bin/* /usr/bin/ go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

基于深度学习的人脸表情识别系统:YOLOv5/v6/v7/v8/v10模型实现与UI界面集成

基于YOLOv5/v7/v8的智能人脸表情识别系统:从算法原理到应用实现 表情识别的技术价值与挑战 人脸表情识别(Facial Expression Recognition, FERYOLOv5/v7/v8等深度学习算法构建高效的表情识别系统,并设计直观的UI界面集成方案。无论你是深度学习初学者还是有经验的开发者,…

初步了解多线程

系列文章目录 目录 系列文章目录 前言 一、进程 二、线程 1. 线程解决资源开销的方式 2. 线程和进程的联系和区别 三、多线程编程 1. 直观了解多线程 2. 线程的创建方式 1. 继承 Thread 重写 run() 方法 2. 实现 Runable 接口&#xff0c;重写 run() 方法 3. 继承 …

安卓Android低功耗蓝牙BLE连接异常报错133

安卓Android低功耗蓝牙BLE连接异常报错133 之前连接一直好好的,不知道为什么今天突然就连接不了蓝牙了,报错133,按照 找网上的说明总是说清除GATT缓存,其实并不是我的问题,最后看到这里https://softs.im/android-ble-%e8%bf%9e%e6%8e%a5%e9%94%99%e8%af%af133/ 有如下说明: 情…

【分治】快排与归并专题

分治思想 分&#xff08;Divide&#xff09;&#xff1a;将待排序数组不断拆分为两个等长&#xff08;或近似等长&#xff09;的子数组&#xff0c;直到子数组长度为 1&#xff08;天然有序&#xff09;。 治&#xff08;Conquer&#xff09;&#xff1a;递归排序每个子数组。 …

[Linux]学习笔记系列 -- mm/page_alloc

文章目录mm/page_alloc.c 伙伴系统内存分配器(Buddy System Memory Allocator) 内核物理内存管理的核心历史与背景这项技术是为了解决什么特定问题而诞生的&#xff1f;它的发展经历了哪些重要的里程碑或版本迭代&#xff1f;目前该技术的社区活跃度和主流应用情况如何&#xf…

3秒传输大文件:cpolar+Localsend实现跨网络秒传

文章目录前言1. 在Windows上安装LocalSend2. 安装Cpolar内网穿透3. 公网访问LocalSend4. 固定LocalSend公网地址用 cpolar 让 Localsend 突破距离限制就是这么简单&#xff01;三步轻松搞定&#xff1a;在手机和电脑上都安装 Localsend&#xff0c;在其中一台设备上运行 cpolar…

基于STM32单片机智能RFID刷卡汽车位锁桩设计

1 系统功能介绍 本系统是一个 基于 STM32 单片机的智能 RFID 刷卡车位锁桩控制系统&#xff0c;其设计理念来源于现实中智能停车场的车位锁桩管理。通过 RFID 刷卡认证、LCD1602 显示、继电器控制以及按键辅助操作&#xff0c;实现对车位的安全管理。该系统不仅模拟了车辆驶入与…

SQL185 试卷完成数同比2020年的增长率及排名变化

描述现有试卷信息表examination_info&#xff08;exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间&#xff09;&#xff1a;试卷作答记录表exam_record&#xff08;uid用户ID, exam_id试卷ID, start_time开始作答时间, submit_time交…

网络编程中的TCP——TCP的连接的建立、关闭、状态转移

网络编程中的TCP——TCP的连接的建立、关闭、状态转移 TCP连接的建立和关闭wireshark捕获数据&#xff1a;TCP三次握手四次挥手的时序图&#xff1a;三次握手&#xff1a; 报文段1包含SYN标志&#xff0c;这是一个同步报文段&#xff0c;表示发起连接请求&#xff0c;包含自己起…

SQL 语句拼接在 C 语言中的实现与安全性分析

代码解析 // 构建SQL插入语句 char *sql_insert (char *)malloc(sizeof(char) * 200); // 分配200字节内存 strcpy(sql_insert, "INSERT INTO user(username, passwd) VALUES("); // 复制基础SQL语句 strcat(sql_insert, ""); // 添加单引号 strcat(sq…

`lock()` 和 `unlock()` 线程同步函数

1) 函数的概念与用途 lock() 和 unlock() 不是特定的标准库函数&#xff0c;而是线程同步原语的一般概念&#xff0c;用于在多线程环境中保护共享资源。在不同的编程环境和库中&#xff0c;这些函数有不同的具体实现&#xff08;如 POSIX 线程的 pthread_mutex_lock() 或 C 的 …

升级openssh后ORACLE RAC EM 安装失败处理

升级过程中由于SCP传输时目标目录/tmp/tempRACTrans_2025_08_22--18-25-44-032/ractrans 不存在导致的OC4J配置失败&#xff1a;WARNING: /usr/bin/scp: dest open "/tmp/tempRACTrans_2025_08_22--18-25-44-032/ractrans": No such file or directory/usr/bin/scp…

ADB 调试工具的学习[特殊字符]

一、ADB 的工作原理 1.1 ADB 概念 ADB (Android Debug Bridge)&#xff1a;Android 调试桥&#xff0c;是开发/测试 Android 应用必备的调试工具。作用&#xff1a;通过 电脑终端命令 操作 安卓手机/模拟器。 1.2 ADB 构成与原理 ADB 由三部分组成&#xff1a; Client 端&#…

用一根“数据中枢神经”串起业务从事件流到 Apache Kafka

1. 为什么是“事件流”&#xff1f; 在一个软件定义、自动化、永远在线的世界里&#xff0c;系统之间最需要的是&#xff1a;把发生了什么这件事&#xff0c;第一时间、按正确顺序、可靠地传到该知道的人/系统那里。 事件流就像企业的中枢神经&#xff1a;它把数据库更新、设备…

【RAGFlow代码详解-4】数据存储层

数据库基础设施 RAGFlow 使用关系数据库&#xff08;MySQL 或 PostgreSQL&#xff09;作为主要元数据存储&#xff0c;通过具有连接池和重试机制的 Peewee ORM 进行管理。 连接管理 数据库连接通过 service_conf.yaml 和环境变量进行配置。该系统支持具有可配置连接池的 MySQL …

ES_映射

一、 映射&#xff08;Mapping&#xff09;是什么&#xff1f; 简单来说&#xff0c;映射就像是关系型数据库中的表结构定义&#xff08;Schema&#xff09;。它定义了索引&#xff08;Index&#xff09;中的文档&#xff08;Document&#xff09;可以包含哪些字段&#xff08;…

【Linux | 网络】多路转接IO之poll

一、poll函数二、poll的优缺点三、实现poll服务器&#xff08;只关心读事件&#xff09;3.1 Log.hpp&#xff08;日志&#xff09;3.2 Lockguard.hpp&#xff08;自动管理锁&#xff09;3.3 Socket.hpp&#xff08;封装套接字&#xff09;3.4 PollServer.hpp&#xff08;服务端…

一站式资源共享平台模板,助力快速搭建专属资源站源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 这个资源分享网站模板是一个功能完整、设计现代的单页网站&#xff0c;非常适合快速搭建资源分享平台。以下是关于这个模板的详细介绍&#xff0c;帮助你更好地理解并发布到自己的网站&a…