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)
核心組件交互流程:
- 雙引擎并行處理:行存引擎處理 TP 事務,IMCV 列存引擎處理 AP 查詢
- 實時一致性保障:TMU 單元在 IMCV 快照基礎上記錄活躍事務更新,確保列存掃描與行存結果強一致
- 智能路由機制:查詢解析器自動識別負載類型,TP 點查路由至行存引擎,AP 分析查詢路由至向量化執行引擎
- 資源隔離設計:內置資源管控模塊實現內存資源動態分配,避免 TP/AP 負載相互干擾
集中式主備架構(圖 2)
高可用設計特點:
- 主備同構部署:主機和備機均維護獨立 IMCV 列存引擎
- 日志同步機制:主機 IMCV 操作記錄 Xlog,備機通過回放日志保持數據一致
- 無感知切換:主備切換時 IMCV 內存數據不回收,服務中斷時間最小化
- 雙向數據加載:主備機均支持通過 BUCKLOAD 加載存量數據至 IMCV
openGauss HTAP 架構解析
主備場景行列轉換架構(圖 1)
關鍵數據流路徑:
- 主節點 OLTP 處理:行存數據變更通過 WAL 日志同步至備節點
- 備節點增量同步:
- 日志回放寫入增量表
- 后臺同步線程異步更新列緩存
- Column Unit 列存儲單元批量組織數據
- 查詢路由決策:備節點優化器根據代價估算選擇 IMCStore Scan 或行存掃描
- 向量化執行路徑: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 語法優勢分析
- 精細化控制能力:
- 支持按列選擇 IMCV 存儲(減少內存占用)
- 靈活的刷新策略(AUTO/MANUAL)適應不同業務場景
- 細粒度內存管控避免資源競爭
- 運維友好性:
- 提供
pg_imcv_stats
等監控視圖- LRU 淘汰機制自動平衡內存使用
- 主備切換無感知(IMCV 數據不丟失)
- 性能優化特性:
- 透明路由減少人工干預
- 強制路由 hint 支持 SQL 調優
- 內存使用超限自動保護機制
語法使用注意事項
- IMCV 命名規范:建議遵循
imcv_<table>_<columns>
格式,如imcv_employees_id_name
- 內存規劃:按
活躍數據集*2
配置imcv_mem_limit
- 刷新策略選擇:
- 實時分析場景:AUTO 策略(間隔 1-5 分鐘)
- 批量處理場景:MANUAL 策略(加載后手動刷新)
- 主備配置:參數需在主備節點同時配置,確保切換后行為一致
典型配置示例:
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 參數特性解析
- 內存管理機制:
max_imcs_cache
以 kB 為單位(102400kB=100MB),需通過postgresql.conf
配置并重啟數據庫- 必須同步調整
max_process_memory
參數,否則可能觸發內存校驗失敗- 無動態調整能力,靈活性低于 GaussDB
- 查詢控制流程:
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腳本無法獲取頁面里子鏈接的內容,就打開了一個文檔網站,甚至自己去進行了相關關鍵字的搜索,打開搜索結果頁面,后續它還回到了搜索結果列表,繼續點擊下一個結果進行查看
但是免費的東西終歸還是…
- 本文作者: DarkAthena
- 本文鏈接: https://www.darkathena.top/archives/AI-Generated-Technical-Assessment-HTAP-Implementation-Differences-Between-GaussDB-and-openGauss
- 版權聲明: 本博客所有文章除特別聲明外,均采用CC BY-NC-SA 3.0 許可協議。轉載請注明出處