我有幾個大約 8GB 左右的資料夾。這些資料夾總共包含約 60GB 的資料。我可以透過以下兩種方式之一壓縮這些資料夾:要么單獨為每個資料夾建立一個壓縮存檔,要么一起壓縮為大型壓縮存檔。
一般來說,假設所有要壓縮的資料都屬於相同類型並且使用的壓縮演算法相同(而且我也不關心解壓縮較大檔案所需的時間),這兩種方法都會比兩種方法產生更好的壓縮結果另外,或者兩種情況下壓縮檔案的總大小會趨於相等嗎?
答案1
壓縮到一個大的檔案中是否會比單獨壓縮資料夾產生更好的壓縮效果?不必要。
僅當存檔正在使用時固體壓縮。非固體存檔(如 Zip 檔案)單獨壓縮檔案。這使您能夠輕鬆地從存檔中解壓縮單一檔案。它還允許您將文件添加到存檔中,而無需重新壓縮所有內容。
對於可靠的存檔,所有這一切都變得更加困難:要在流的最後解壓縮文件,所有內容都必須解壓縮(儘管不一定寫入磁碟)。新增檔案時,演算法也需要遍歷所有內容。
然而,還有一個中間立場:使用「實心塊」。現在,歸檔程序不必一直處理整個文件,而只需處理部分文件。
在 7-Zip GUI 中,是這個選項:
不考慮被壓縮的數據,這非常簡單:
- 非固體:快速互動訪問,最差壓縮
- 實心塊:互動存取效率較高,壓縮效果較好
- 固體:無互動式訪問,最佳壓縮
根據預測的存取模式,您應該選擇合適的變體。
答案2
雖然不可能絕對肯定地說,但從理論上講,較大的存檔應該會導致較小的存檔大小,因為可以發現更多的資料區塊是重複的。這是假設數據像你所說的同質化。
但是,某些資料夾完全有可能包含具有更多相似資料塊的文件,因此,作為其自己的單獨存檔可能會更好地壓縮。
知道哪種方法最好的唯一真正方法是測試這兩種方法。
答案3
單一存檔幾乎總是較小,儘管原因並非您想像的那樣。
簡而言之,透過只有一個存檔,您就不會因為多個存檔檔案頭而浪費空間。存檔檔案需要佔用一定的空間才能成為有效存檔,而您創建的每個存檔最終都會佔用那麼多空間。唯一廣泛使用的例外是格式cpio
,它沒有存檔本身的標頭,而是只有每個檔案的標頭。
更現實的是,你會通常僅使用一個存檔(而不是多個存檔)即可獲得至少同樣好的壓縮率,並且對於某些存檔器,它可能會明顯更好(例如,zpaq
重複資料刪除之內存檔,因此如果有大量重複數據,可以節省大量空間)。
不過,在做出決定之前,您還需要問另一個問題:處理單個大型存檔而不是多個較小存檔的開銷是否值得節省空間?根據您儲存資料的位置,僅使用較小的存檔可能會更經濟,特別是如果您一次可能只需要其中一個資料夾。
總的來說,凱爾塔里是正確的,唯一確定的方法就是測試它。