圖1-1是行存儲和列存儲的示意圖。壹個表包含五個字段(列),分別是rowid、日期/時間、客戶名稱、數量,共***7行,圖中紅色箭頭表示存儲順序。
不同的存儲形式決定了不同的應用場景:
總體來說,列存儲更適合大數據量(高壓縮比)和分析操作(針對少數幾列);不適合頻繁的刪除(整列檢索)和更新(再壓縮)操作。
圖2-1顯示了在列存儲中基於字典表編碼和壓縮壹個表的例子。源表在左邊。假設該表中客戶和物料字段的值只有五個,如右上表所示,當源表中的行數較大時,客戶和物料字段會有大量的重復值。為了節省存儲空間,對這兩個字段進行編碼,即使用壹個字典表(右上圖)記錄這兩個字段的不同值,下表使用右上表值對應的索引(整數1,2,3,4,5)替換原來的字符串。因為string占用的存儲空間遠大於這些索引占用的存儲空間,所以占用的存儲空間可以得到很大程度的壓縮。
基於列存儲的兩個典型實現是:hbase和parquet,其中:
拼花地板的文件結構如圖3-1所示:
從圖中可以看出,1拼花文件由表頭(1)、塊(多個)和表尾(1)組成,分別負責:
圖3-2顯示了parquet文件中塊、行組、列塊和頁面之間的關系:
簡而言之:
因此,如果您將拼花文件比作壹個大的excel表格,那麽: