Python ile oluşturulan tar.xz dosyaları neden varsayılan tar ile oluşturulanlardan daha küçük?
(superuser.com)-
Python
tarfilefonksiyonuyla oluşturulan dosyaya kıyasla, macOStarile oluşturulan dosya 15 kat daha büyük çıkıyor -
Neden: BSD/GNU
tar, dosyaları sıkıştırılmış arşivin içine sırasız yerleştirdiği için dosya türlerine bağlı olarak sıkıştırma oranı düşebiliyor
→ Python tarfile fonksiyonunun varsayılanı sıralama
- GNU
tariçin--sortseçeneğiylename/inodesırasına göre eklemek mümkün → sıralama uygulanınca aynı sıkıştırma oranı elde ediliyor
4 yorum
Biraz anlayamadım; sıralama uygulandığında sıkıştırma oranı neden değişiyor? Tek tek dosyaların sıkıştırma oranı aynı olacaktır gerçi.
Kullanılan algoritma Deflate. Bu algoritma, daha önce sıkıştırmada kullanılan içeriği bir kayan pencere içinde tutar. Bu kez 10 bayt işlendiğinde, o anda işlenen 10 bayt kayan pencerenin sonuna eklenir; kayan pencerenin boyutu ise sabittir.
Kayan penceredeki içerikle aynı olan bir içerik bulunduğunda, bunun yerine LLD (Literal, Length, Distance) yazılarak sıkıştırma yapılır. Distance, kayan pencerenin neresinden itibaren içeriğin aynı olduğunu; Length, kayan penceredeki aynı içeriğin uzunluğunu; Literal ise aynı olmayan ilk karakteri ifade eder.
Deflate için kayan pencerede ne tutulduğu önemli olduğundan, benzer içeriğin hemen önce görülüp görülmediği önemlidir; benzer dosyalar daha önce görüldüyse daha iyi sıkıştırma yapma olasılığı vardır.
Nasıl sıkıştırıldığını aşağıdaki slaytlarda görebilirsiniz. (
gzipda Deflate tabanlıdır.)https://speakerdeck.com/dalinaum/…
Aynı klasörde, aynı ada ya da benzer adlara sahip dosyaların içerikleri de benzer olacağından sıkıştırma oranı yüksek olacaktır.
Sanırım anlatılmak istenen, sıkıştırma sırasında bu benzerliklerin arandığı aralığın çok geniş olmaması; bu yüzden dosyaları sıralarsanız benzer olanların bir araya gelerek daha yüksek olasılıkla birlikte sıkıştırılacağıdır.