在物件儲存服務中整合壓縮演算法,可以有效節省最終佔用的空間,提升介質的利用效率,提高儲存的收益。
選擇壓縮演算法時,通常綜合考慮物件的格式、訪問頻率、訪問時延、儲存服務的負載、儲存伺服器的硬體規格、儲存介質的規格等。
對於高壓縮比的文字類資料,通常建議在客戶端應用側完成壓縮,這樣除節省儲存空間,還節省了傳輸頻寬和網路傳輸引入的時延。
對於二進位制類的檔案,考慮到壓縮的收益比較低,通常不建議進行壓縮。
對於訪問頻率較低的歸檔類的冷資料,通常選擇高壓縮比的壓縮演算法,有助於節省空間。
對於訪問頻率中等的溫資料,初期可採用解壓吞吐量高的壓縮演算法,待訪問量逐漸下降到一定程度之後變為冷資料,此時在後臺任務中逐步轉換為採用高壓縮比的演算法,同時兼顧訪問效率和儲存空間的利用率。
對於已壓縮的物件,假如一定時間內訪問頻率超出閾值,可以還原一份非壓縮的副本,透過空間換時間的方式,改善訪問效率。
對於大量的小檔案,比如小於1MB,可以考慮採用先聚合再壓縮的策略,改善壓縮演算法的工作收益。
對於大的檔案,比如超出10GB,可以依據壓縮演算法的特點,拆解為多個塊,同時壓縮,充分利用硬體,縮短壓縮演算法的工作時間,同時也可以改善訪問時解壓檔案的效率。
實現時的關注點,如下:
- 資料的格式
- 文字,比如TXT、XML、INI、PROPERTIES、CSV、JSON、YAML等
- 二進位制,比如圖片、影片、音訊、可執行檔案等
- 壓縮的演算法
- 無失真壓縮
- 有失真壓縮
- 壓縮演算法的評估指標
- 吞吐量
- 壓縮時吞吐量
- 解壓時吞吐量
- CPU使用量
- 記憶體使用量
- 硬碟使用量
- 壓縮比率
- 吞吐量
- 常見的壓縮演算法
- gzip
- bzip2
- zip
- lzw
- snappy
- zstd
- 專用的壓縮演算法
- H264
- MPEG2
- MPEG4
- JPEG
- 執行壓縮操作的位置
- 客戶應用
- 物件SDK
- 物件儲存服務
- 執行壓縮的時機
- 寫入時壓縮
- 後臺壓縮
- 對於未壓縮的物件,在建立後、訪問頻率較低,可在後臺任務中轉換為壓縮檔案,節省儲存空間
- 對於已壓縮的物件,訪問頻率超過一定閾值,可在後臺任務中建立一個非壓縮的副本,透過空間換時間的方式來提升訪問效率
- 壓縮的粒度
- 以檔案為粒度,執行壓縮
- 以資料塊為粒度,執行壓縮
- 壓縮演算法的選擇
- 針對所有的檔案,使用統一的壓縮演算法
- 依據檔案型別的特點,使用特定的壓縮演算法
- 由客戶指定壓縮演算法
參考資料
- 壓縮演算法