openGauss新特性 | HTAP新特性介紹

一、行列融合功能簡介

HTAP 行列融合特性在單機、主備場景下,通過節點的行列雙格式內存模式,實現openGauss HTAP一體化數據庫架構。 通過高效的行列轉換技術方案,節點讀取磁盤行存數據,生成列存儲單元(Column Unit)存儲至節點的列緩存中;支持節點通過代價估算生成列緩存查詢計劃,通過列存查詢大幅提升復雜OLAP場景下的數據分析效率,使數據庫同時具備較強的TP和AP能力。在主備場景下,列緩存數據均存儲在備節點,通過日志讀取回放,同步主節點在OLTP場景下大量的行數據變更,以維持列緩存數據的新鮮度。

openGauss主備集群場景下,支持備節點形成行列雙格式內存形式。針對主節點的行級修改,備節點通過日志同步主節點修改,將對應修改寫入增量表中。同時,備節點后臺啟動的同步線程,將增量表中存儲的行存修改同步至列存緩存中。用戶在備節點發起的OLAP大型數據分析請求,將先通過邏輯判斷是否已有查詢表的列緩存數據,并根據代價計算形成基于列緩存的查詢計劃。

二、行列融合參數介紹

enable_imcsscan

參數說明:開啟列緩存查詢功能。

開啟后,openGauss支持通過列緩存掃描,執行計劃將根據表是否已行列轉換及代價估算明確最終是否通過列緩存掃描。

取值范圍:布爾型

默認值:off

enable_parallel_populate

參數說明:開啟并行行列轉換。

取值范圍:布爾型

默認值:on

max_imcs_cache

參數說明:設置列緩存所使用的緩沖區的大小。

取值范圍:整型,102400~INT_MAX,單位為kB。

默認值:100MB

設置建議:行列融合使用max_imcs_cache設置的緩沖區進行列緩存的存儲,當增大max_imcs_cache配置時,需增大max_process_memory的大小以符合內存的基本邏輯校驗。當行列轉換的表數據大于配置的列緩存存儲空間時,系統將存儲臨時文件。

三、行列融合操作介紹

HTAP 行列融合特性支持用戶針對全表、表指定列、指定分區進行行列轉換及清除已有列緩存操作。

對指定行表進行行列轉換

轉換方式1:全表轉換

?????

sql
ALTER?TABLE?table_name IMCSTORED;

轉換方式2:表部分列轉換

sql
ALTER?TABLE?table_name IMCSTORED(column_name_list);

轉換方式3:對分區表的指定分區轉換

sql
ALTER?TABLE?table_name MODIFY?PARTITION?partition_name IMCSTORED;

??????

轉換方式4:對分區表的指定分區的部分列轉換,支持不同分區轉換不同列???????

sql
ALTER?TABLE?table_name MODIFY?PARTITION?partition_name IMCSTORED(column_name_list);

清除已轉換的列緩存

清除方式1:對指定行表做全量列緩存清除???????

sql
ALTER?TABLE?table_name UNIMCSTORED;

清除方式2:對分區表的指定分區做列緩存清除???????

sql
ALTER?TABLE?table_name MODIFY?PARTITION?partition_name UNIMCSTORED;

普通表示例???????

sql
--創建普通表
openGauss=#?CREATE?TABLE?test
(id ??INT,name VARCHAR2(40),dept_id ? ?INT
);
CREATE?TABLE
--對該表進行行列轉換
openGauss=#?ALTER?TABLE?test IMCSTORED;
ALTER?TABLE
--查詢該表,執行行存計劃
openGauss=# EXPLAIN?SELECT?*?FROM?test;QUERY PLAN ? ? ? ? ? ? ? ? ? ? ? ?
---------------------------------------------------------Seq Scan?on?test ?(cost=0.00..16.01?rows=601?width=106)
(1?row)
--開啟列存掃描計劃
openGauss=#?SET?enable_imcsscan=on;
SET
--查詢該表,執行列存計劃
openGauss=# EXPLAIN?SELECT?*?FROM?test;QUERY PLAN ? ? ? ? ? ? ? ? ? ? ? ? ? ??
--------------------------------------------------------------------Row?Adapter ?(cost=10.60..10.60?rows=601?width=106)->? IMCStore Scan?on?test ?(cost=0.00..10.60?rows=601?width=106)
(2?rows)
--對該表清除列緩存
openGauss=#?ALTER?TABLE?test UNIMCSTORED;
ALTER?TABLE
--對該表部分列進行行列轉換
openGauss=#?ALTER?TABLE?test IMCSTORED(id);
ALTER?TABLE

分區表示例

sql
--創建分區表
openGauss=#?CREATE?TABLE?test_partition
(id ??INT,name VARCHAR2(40),dept_id ? ?INT,age ?INT
)?PARTITION?BY?RANGE(dept_id) SUBPARTITION?BY?RANGE?(age)?
(PARTITION?dept_id_p1?VALUES?LESS THAN (5) (SUBPARTITION age_sub_p1?VALUES?LESS THAN (25),SUBPARTITION age_sub_p2?VALUES?LESS THAN (35),SUBPARTITION age_sub_p3?VALUES?LESS THAN (maxvalue)),PARTITION?dept_id_p2?VALUES?LESS THAN (maxvalue) (SUBPARTITION age_sub_p4?VALUES?LESS THAN (25),SUBPARTITION age_sub_p5?VALUES?LESS THAN (35),SUBPARTITION age_sub_p6?VALUES?LESS THAN (maxvalue))
);
CREATE?TABLE
--對該表進行全量行列轉換,即所有分區、所有列
openGauss=#?ALTER?TABLE?test_partition IMCSTORED;
ALTER?TABLE
--對該表清除列緩存
openGauss=#?ALTER?TABLE?test_partition UNIMCSTORED;
ALTER?TABLE
--對該表 dept_id_p1 分區的所有列進行行列轉換
openGauss=#?ALTER?TABLE?test_partition MODIFY?PARTITION?dept_id_p1 IMCSTORED;
ALTER?TABLE
--對該表 dept_id_p1 分區清除列緩存
openGauss=#?ALTER?TABLE?test_partition MODIFY?PARTITION?dept_id_p1 UNIMCSTORED;
ALTER?TABLE
--對該表 dept_id_p1 分區的 id, name 列進行行列轉換
openGauss=#?ALTER?TABLE?test_partition MODIFY?PARTITION?dept_id_p1 IMCSTORED(id, name);
ALTER?TABLE
--對該表 dept_id_p2 分區的 name, age 列進行行列轉換
openGauss=#?ALTER?TABLE?test_partition MODIFY?PARTITION?dept_id_p2 IMCSTORED(name, age);
ALTER?TABLE
--開啟列存掃描計劃
openGauss=#?SET?enable_imcsscan=on;
SET
--查詢該表 dept_id_p1 分區的 id, name 列, 執行列存計劃
openGauss=# EXPLAIN?SELECT?id, name?FROM?test_partition?PARTITION(dept_id_p1);QUERY PLAN ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
-----------------------------------------------------------------------------------------------Row?Adapter ?(cost=5.58..5.58?rows=583?width=102)->? Vector?Partition?Iterator ?(cost=0.00..5.58?rows=583?width=102)Iterations:?1, Sub Iterations:?3->? Partitioned IMCStore Scan?on?test_partition ?(cost=0.00..5.58?rows=583?width=102)Selected Partitions: ?1Selected Subpartitions: ?ALL
(6?rows)
--查詢該表 dept_id_p2 分區的 name, age 列, 執行列存計劃
openGauss=# EXPLAIN?SELECT?name, age?FROM?test_partition?PARTITION(dept_id_p2);QUERY PLAN ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
-----------------------------------------------------------------------------------------------Row?Adapter ?(cost=5.58..5.58?rows=583?width=102)->? Vector?Partition?Iterator ?(cost=0.00..5.58?rows=583?width=102)Iterations:?1, Sub Iterations:?3->? Partitioned IMCStore Scan?on?test_partition ?(cost=0.00..5.58?rows=583?width=102)Selected Partitions: ?2Selected Subpartitions: ?ALL
(6?rows)
--查詢整張表 id, name 列, dept_id_p2 未轉換 id 列, 執行行存計劃
openGauss=# EXPLAIN?SELECT?name, age?FROM?test_partition;QUERY PLAN ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
-------------------------------------------------------------------------------------Partition?Iterator ?(cost=0.00..15.83?rows=583?width=102)Iterations:?2, Sub Iterations:?6->? Partitioned Seq Scan?on?test_partition ?(cost=0.00..15.83?rows=583?width=102)Selected Partitions: ?1..2Selected Subpartitions: ?ALL
(5?rows)
--查詢整張表 name 列, dept_id_p1、dept_id_p2 均轉換 name 列, 因此執行列存計劃
openGauss=# EXPLAIN?SELECT?name?FROM?test_partition;QUERY PLAN ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
-----------------------------------------------------------------------------------------------Row?Adapter ?(cost=10.58..10.58?rows=583?width=98)->? Vector?Partition?Iterator ?(cost=0.00..10.58?rows=583?width=98)Iterations:?2, Sub Iterations:?6->? Partitioned IMCStore Scan?on?test_partition ?(cost=0.00..10.58?rows=583?width=98)Selected Partitions: ?1..2Selected Subpartitions: ?ALL
(6?rows)

總結???????

openGauss 通過簡單的指令設置,有效利用備節點可用內存空間進行行存數據的列緩存轉換及存儲(In-Memory-Column-Store)。考慮列存的查詢優勢,在數據量龐大,表結構復雜,而用戶僅關注部分列數據的查詢的場景下,行列轉換后的列緩存可有效提升企業執行大型復雜OLAP數據分析的整體查詢效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78548.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78548.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78548.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雙目測量中的將視差圖重投影成三維坐標圖

雙目測距主要步驟如下: 左右兩張圖片 → 匹配 → 得到視差圖 disp; 使用 cv2.reprojectImageTo3D(disp, Q) 將視差圖 重投影 成三維坐標圖 → 得到 points_3d 什么是 points_3d? points_3d cv2.reprojectImageTo3D(disp, Q)points_3d.shap…

《深度剖析:SOAP與REST,API集成的兩極選擇》

API作為不同系統之間交互的橋梁,其設計與實現的優劣直接影響著整個軟件生態的運轉效率。而在API的設計領域,SOAP和REST猶如兩座巍峨的山峰,各自代表著截然不同的設計理念與應用方向,成為開發者在構建API時必須慎重權衡的關鍵選項。…

非對稱加密算法(RSA、ECC、SM2)——密碼學基礎

對稱加密算法(AES、ChaCha20和SM4)Python實現——密碼學基礎(Python出現No module named “Crypto” 解決方案) 這篇的續篇,因此實踐部分少些; 文章目錄 一、非對稱加密算法基礎二、RSA算法2.1 RSA原理與數學基礎2.2 RSA密鑰長度…

Pillow 玩圖術:輕松獲取圖片尺寸和顏色模式

前言 在這個“圖像為王”的時代,誰還敢說自己沒被一張圖折磨過?一張圖片不講武德,說崩就崩,說卡就卡,仿佛像素里藏著程序員的眼淚。不管你是網頁設計師、AI煉丹師,還是只是想把貓片修得像藝術品,圖片的尺寸和顏色模式都是你必須掌握的第一手情報。如果你不知道它有多寬…

下載core5compat 模塊時,被禁止,顯示 - servese replied: Forbbidden. -->換鏡像源

怎么解決? --->換鏡像源 方法 1:使用命令行參數指定鏡像源 在運行 Qt 安裝器時,通過 --mirror 參數指定鏡像源: # Windows qt-unified-windows-x64-online.exe --mirror https://mirrors.ustc.edu.cn/qtproject# Linux/macO…

WPF中Behaviors

行為的好處 可以把復雜的界面邏輯抽象出去&#xff0c;讓xaml的界面設計更簡單&#xff0c;更清爽 1.安裝包 Microsoft.Xaml.Behaviors.Wpf2.簡單實現拖動效果 <Border Width"100"Height"100"Background"Red"><i:Interaction.Behav…

GitHub 趨勢日報 (2025年05月03日)

本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星總星數語言1hacksider/Deep-Live-Camreal time face swap and one-click video deepfake with only a single image? 1582? 59337Python2aip…

Oracle OCP認證考試考點詳解083系列08

題記&#xff1a; 本系列主要講解Oracle OCP認證考試考點&#xff08;題目&#xff09;&#xff0c;適用于19C/21C,跟著學OCP考試必過。 36. 第36題&#xff1a; 題目 解析及答案&#xff1a; 關于數據庫閃回&#xff08;FLASHBACK DATABASE&#xff09;功能&#xff0c;以下…

優化01-統計信息

Oracle 的統計信息是數據庫優化器生成高效執行計劃的核心依據。它記錄了數據庫對象&#xff08;如表、索引、列等&#xff09;的元數據信息&#xff0c;幫助優化器評估查詢成本并選擇最優執行路徑。以下是關于 Oracle 統計信息的詳細介紹&#xff1a; 一、統計信息的分類 表統…

動態規劃-面試題08.01三步問題-力扣(LeetCode)

一、題目解析 此題可以類比第N個泰波那契數 二、算法解析 1、狀態表示 根據上面的分析和題目要求&#xff0c;dp[i]表示&#xff1a;到達i位置&#xff0c;一共有多少種方法 2、狀態轉移方程 以i位置的狀態&#xff0c;以最近一步劃分問題 dp[i] 從i-1->i dp[i-1] 從…

kotlin中枚舉帶參數和不帶參數的區別

一 ? 代碼對比總結 第一段&#xff08;帶參數 工具方法&#xff09; enum class SeatPosition(val position: Int) {DRIVER_LEFT(0),DRIVER_RIGHT(1),SECOND_LEFT(2),SECOND_RIGHT(3);companion object {fun fromPosition(position: Int): SeatPosition? {return SeatPosi…

Java使用JDBC操作數據庫

1.創建一個數據庫一會用來連接 2.使用idea新建一個Java項目 3.在pom文件中加上相關依賴&#xff0c;并配置Maven路徑 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>…

重名導致does not name a type

今天在Ubuntu24.04上編成時&#xff0c;makefile編譯報錯: falsecolor.h:48:9: error: ‘FalseColor’ does not name a type48 | FalseColor* content ;| ^~~~~~~~~~falsecolor.h的部分代碼如下: class FalseColor {public:FalseColor(int w, int h){width …

Vue3 后臺管理系統模板

Vue3 后臺管理系統模板 gie倉庫地址 一個基于 Vue3 TypeScript Element Plus 的后臺管理系統模板&#xff0c;集成了動態路由和權限管理功能。 技術棧 Vue 3.2TypeScript 4.5Vue Router 4Vuex 4Element Plus 2.9AxiosLess 功能特性 &#x1f680; 基于 Vue3 最新技術棧開…

林業數智化轉型初步設計方案

最近應林業方面的朋友要求,幫助其設計了林業方面的數字化智能化轉型的方案設計,編寫了如下內容,供大家參考,林業方面主要有三大方向,即林業生態、生物災害和疫源疫病,目前已經建成了一些信息化系統,但在數字化智能化方面偏弱,就想著如何借助人工智能、物聯網、大數據和…

springboot單體項目的執行流程

首先就是啟動springboot項目&#xff0c;即執行主函數&#xff0c;這個主函數的類通常帶有SpingBootApplication注解&#xff0c;類中的main方法就是程序的入口。 啟動主函數后&#xff0c;SpringBoot會按特定順序加載配置文件&#xff0c;如application.properties或applicat…

Python格式化字符串的四種方法

Python格式化字符串的四種方法 1.使用 % 運算符 %s 是一個字符串的占位符&#xff0c;而 “World” 是替換它的值 print("Hello, %s!" % "World") # 輸出&#xff1a;Hello, World!你可以使用多個占位符 注意&#xff1a;多個變量占位&#xff0c;變量要…

【Redis】緩存|緩存的更新策略|內存淘汰策略|緩存預熱、緩存穿透、緩存雪崩和緩存擊穿

思維導圖&#xff1a; Redis最主要的用途&#xff0c;三個方面&#xff1a; 1.存儲數據&#xff08;內存數據庫&#xff09; 2.緩存&#xff08;redis最常用的場景&#xff09; 3.消息隊列 一、什么是緩存 我們知道對于硬件的訪問速度來說&#xff0c;通常情況下&#xff1…

中陽視角下的趨勢確認策略:以數據為核心的交易思維

中陽視角下的趨勢確認策略&#xff1a;以數據為核心的交易思維 在動態交易市場中&#xff0c;如何在波動中捕捉相對確定的趨勢&#xff0c;是每一位操作者關心的問題。“中陽”理念主張通過結構性價格分析&#xff0c;判斷市場情緒的拐點。尤其是在出現大陽線或中陽線時&#x…

【C/C++】inline關鍵詞

C inline 關鍵字學習筆記 一、什么是 inline 函數&#xff1f; inline&#xff08;內聯&#xff09;是 C 中的一個關鍵字&#xff0c;表示“將函數的代碼直接插入到調用點”&#xff0c;以減少函數調用開銷&#xff0c;提升執行效率。 ? 注意&#xff1a;inline 是一種“請求…