全部產品
Search
文件中心

AnalyticDB:表格儲存體格式定義

更新時間:Feb 05, 2024

雲原生資料倉儲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);