1、堆表
堆表是PostgreSQL數據庫原生存儲格式,GreenPlum默認的存儲格式。堆表存儲在OLTP類型負載下表現最好,這種環境中數據會在初始載入后被頻繁地修改。 UPDATE和DELETE操作要求存儲行級版本信息來確保可靠的數據庫事務處理。 堆表最適合於較小的表,例如維度表,它們在初始載入數據后會經常被更新。
多適合用於OLTP系統。但GreenPlum常定位是用於OLAP系統。為了更適合OLAP系統。GreenPlum提供來AO表
應用場景:
堆表是萬油金;只是有些場景其他存儲方式更加適合。更能提升性能。
2、AO表
AO表在4.3版本之前取意為(APPEND-ONLY,AO)。根據其意義只能追加,在4.3版本之后取意為(append-optimized,AO)追加優化。支持update/delete。跟堆表一樣。但實現原理不一樣。刪除更新數據時,通過另一個BITMAP文件來標記被刪除的行,通過bit以及偏移對齊來判定AO表上的某一行是否被刪除。
追加優化表存儲在數據倉庫環境中的非規范表表現最好。 非規范表通常是系統中最大的表。 事實表通常成批地被載入並且被只讀查詢訪問。 將大型的事實表改為追加優化存儲模型可以消除每行中的更新可見性信息負擔,這可以為每一行節約大概20字節。 這可以得到一種更加簡潔並且更容易優化的頁面結構。 追加優化表的存儲模型是為批量數據裝載優化的,因此不推薦單行的INSERT語句
AO支持壓縮以及列存
應用場景:
- 使用列存、壓縮數據使用AO表。
- 數據批量寫入使用AO表
3、行存和列存
ORIENTATION=COLUMN可以指定創建列存的AO表。列存的表只能是AO表。
- 行存:以行形式存儲表中。一行數據存在一個數據文件中。適用於具有許多迭代事務的OLTP類型的工作負載以及一次需要多列的單行,因此檢索是高效的
- 列存:以列為形式組織存儲,每列對應一個或一批文件。而且壓縮比例比較高。適合於在少量列上計算數據聚集的數據倉庫負載,或者是用於需要對單列定期更新但不修改其他列數據的情況
若一個寬表。在讀取某一個列數據;行存需要把匹配的列的所在的行數據塊都要掃描一遍。整好列存可以避免。但是帶來的問題是一個表對應多個數據文件。