摘要:行存表示了一種資料的存盤方式,是最傳統的一種存盤方式,
本文分享自華為云社區《【玩轉PB級數倉GaussDB(DWS)】行列存對比的一些事》,作者:sevenjiang,
行存表示了一種資料的存盤方式,是最傳統的一種存盤方式,對于GaussDB(DWS)來說可以認為其表示存盤引擎的基礎實作,在其之上逐步構筑了列存和hdfs之類的存盤特性,如下簡單介紹下行列存使用的一些對比,
集群設定介紹:
引數default_orientation控制建表不指定存盤方式的默認行為,
通過如下建表顯式設定可以指定行列存盤:
ORIENTATION
指定表資料的存盤方式,即行存方式、列存方式,該引數設定成功后就不再支持修改,
取值范圍:
? ROW,表示表的資料將以行式存盤,
行存盤適合于OLTP業務,此型別的表上互動事務比較多,一次互動會涉及表中的多個列,用行存查詢效率較高,
? COLUMN,表示表的資料將以列式存盤,
列存盤適合于資料倉庫業務,此型別的表上會做大量的匯聚計算,且涉及的列操作較少
適用場景:
列儲存優勢:
- 列的資料特征比較相似,適合壓縮,壓縮比很高;
- 表列的個數比較多,但是訪問的列個數比較少, 列存可以大大減少不必要的IO讀, 提高性能;
- 基于列批量資料的運算,CPU的cache命中率比較高,性能比較好;
- 列存盤引擎更適合OLAP大資料統計分析的場景,
列儲存劣勢:
- 列存表(delta表但默認并沒有啟用)不適合小量 insert 及update操作
行存盤優勢:
- 點查詢(回傳記錄少,基于索引的簡單查詢);
- 增、刪、改操作較多的場景;
- 主要使用整張表的內容,而不是單獨某幾個列,并且所關注的內容不需要通過任何聚集運算,推薦使用行式存盤,
對比現狀:
- 型別支持范圍不同;
- 不支持運算式索引,索引失效;
- 行存默認btree索引,列存默認psort,主健是813版本支持的,老版本不支持;
- 老版本列存復制表不支持更新,813版本支持 ;
- 表級的check約束列存不支持 ;
- cu鎖的問題,并發更新會報錯 ;
- 沒有并發更新,但是開啟delta表,更新/delete概率出錯;
- 小CU的問題突出,引發空間膨脹,性能問題等 ;
- exchange要求表的with中option一致;
列存匯入實作方式:
- 列存表推薦使用批量插入(INSERT INTO SELECT/COPY),單行記錄插入會造成空間浪費,訪問效率下降;
- 匯入資料按列快取,默認每60000行(通過max_batchrow修改)或者1G的大小生成CU;
- 生成CU時,根據資料型別,默認low壓縮級別(通過compression修改),進行壓縮,
- 先寫入CUDesc,再寫入CU,同時將CU插入到資料復制佇列,最后寫入VCU;
- CU檔案是追加寫(APPEND ONLY),
- 磁區表注意:
- 每一個磁區是一個獨立的列存表;
- vector batch的進入,單條資料進入bulkload_row;
- 下盤、讀取的處理;
- 記憶體自適應,
存在行列存join情況:
行存列存JOIN 轉換的執行計劃不符合預期,可以通過 set enable_force_vector_engine = on; 進行下優化:
enable_force_vector_engine
引數說明:對于支持向量化的執行器算子,如果其子節點是非向量化的算子,通過設定此引數為on,強制生成向量化的執行計劃,
當打開enable_force_vector_engine開關時,無論是行存表、列存表或者是行列混存,如果plantree中不包含不支持向量化的場景,則強制走向量化執行引擎,
引數型別:USERSET
取值范圍:布爾型
默認值:off
手工基礎行轉列操作,如果表有業務執行,需要進行加鎖或者事務中執行,視圖和索引進行單獨處理:
create table schema.row_table1 (like schema.table1 including all EXCLUDING RELOPTIONS EXCLUDING INDEXES) WITH (ORIENTATION=column; insert into schema.row_table1 select * from schema.table1; ALTER TABLE schema.row_table1 ADD CONSTRAINT row_table1_pk PRIMARY KEY (xxx_id); alter table rename schema.table1 to col_table1; alter table rename schema.row_table1 to table1;
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/546750.html
標籤:大數據
上一篇:分享10個高級sql寫法
