雲原生資料倉儲AnalyticDB PostgreSQL版支援行存和列存兩種儲存模式。您可以根據使用情境,在建表時選行存表(適合資料更新較頻繁或採用INSERT方式的即時寫入的情境)或列存表(適合少量列的資料查詢、聚集等資料倉儲應用情境)。
行存表
預設情況下,AnalyticDB PostgreSQL版建立的是行存表(Heap Table),使用的PostgreSQL堆儲存模型。行存表適合資料更新較頻繁的情境,或者採用INSERT方式的即時寫入的情境,同時當行存表建有B-Tree索引時,具備更好的點查詢資料檢索效能。
樣本:
下述語句建立了一個預設堆儲存類型的行存表。
CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);
當採用Data Transmission Service寫入 AnalyticDB for PostgreSQL資料時,AnalyticDB for PostgreSQL的目標表應設計為行存表,而不要採用列存表。DTS為準即時資料同步方式,除INSERT外,即支援UPDATE和DELETE等較多更新操作的同步。
列存表
列存表(Column-Oriented Table)的按列儲存格式,資料訪問只會讀取涉及的列,適合少量列的資料查詢、聚集等資料倉儲應用情境,在此類情境中,列存表能夠提供更高效的I/O。但列存表不適合頻繁的更新操作或者大批量的INSERT寫入情境,這時其效率較低。列存表的資料寫入建議採用COPY等批量載入方式。列存表可以提供平均 3-5倍的較高資料壓縮率。
樣本:
列存表必須是追加最佳化表。例如,要建立一個列存表,必須指定為 "appendonly=true" 。
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=column)
DISTRIBUTED BY (a);
壓縮
壓縮主要用於列存表或者追加寫("appendonly=true")的行存表,有以下兩種類型的壓縮可用。
應用於整個表的表級壓縮。
應用到指定列的列級壓縮。使用者可以為不同的列應用不同的列級壓縮演算法。
目前AnalyticDB PostgreSQL版支援的壓縮演算法如下:
4.3 版本支援zlib、rle_type
6.0 版本支援zstd、zlib、rle_type、lz4
也可以指定QuickLZ壓縮演算法,但內部會使用zlib演算法替換,另外rle_type演算法只適用於列存表。
樣本:
建立一個使用zlib壓縮且壓縮層級為5的列存表。
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5);
建立一個使用zstd壓縮且壓縮層級為9的列存表。
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zstd, compresslevel=9);