11 puan yazan xguru 2021-03-16 | 4 yorum | WhatsApp'ta paylaş
  • Python tarfile fonksiyonuyla oluşturulan dosyaya kıyasla, macOS tar ile 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 tar için --sort seçeneğiyle name/inode sırasına göre eklemek mümkün → sıralama uygulanınca aynı sıkıştırma oranı elde ediliyor

4 yorum

 
deadcat 2021-03-16

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.

 
dalinaum 2021-03-22

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.

 
dalinaum 2021-03-22

Nasıl sıkıştırıldığını aşağıdaki slaytlarda görebilirsiniz. (gzip da Deflate tabanlıdır.)

https://speakerdeck.com/dalinaum/…

 
xguru 2021-03-16

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.