Benzer Dosyaları Verimli Bir Şekilde Sıkıştır


11

Sık sık birbirine çok benzeyen dosyaları sıkıştırmaya ihtiyacım var.

Şu anda 16GB'lık bir dosyayı Ultra ayarları olan 8 çekirdeği kullanarak yaklaşık 35 dakikada 1,2 GB'a kadar sıkıştıran 7Zip kullanıyorum.

Bana öyle geliyor ki sıkıştırma için kullanılacak sözlüğü hesaplamak için zaman harcanıyor. Dosyalar oldukça benzer olduğundan, aslında kullanılan sözlük de benzerdir.

Sözlüğü kaydedip kaydedilen sözlüğü sonraki dosyalar için yeniden kullanabilen Windows tabanlı bir sıkıştırma aracı (farkında olmadığım bir seçenekle 7Zip veya farklı bir araç) var mı?

Önemli ölçüde daha hızlı sıkıştırırken sahip olduğum sıkıştırma oranına sahip olma sorununa yaklaşmanın daha iyi bir yolu var mı?

Yanıtlar:


5

Lempel-Ziv-Welch (LZW) sıkıştırma algoritması doğası gereği yoğun hesaplama gerektiren, işin kendisi sözlüğü bilgisayar aslında olmanın çoğunluğu ile olduğunu. Kelimenin tam anlamıyla LZW böyle çalışır.

Algoritmanın kendisi, taradığı her sonraki "sembol" için yeni bir sözlük girişi ekler ve böylece her bir yineleme sırasında sözlüğe yeni bir giriş eklenir. Aslında, sözlük dosyanın sıkıştırılmış kopyası olur ve bu nedenle LZW sıkıştırmasının ilk etapta önemli bir zaman harcaması için harcadığı tek şeydir.


Huffman kodlaması gibi bir şey kullandıysanız , sözlüğü tekrar kullanmak gerçekten mümkün olacaktır (muhtemelen en uygun olmayan sıkıştırma oranı / boyutu pahasına). Bununla birlikte, çoğu modern sıkıştırma algoritması ve aracı, verimlilik ve hız için LZW algoritmasını kullanır (Huffman sıkıştırması, veriler üzerinde iki geçiş gerektirir [biri Huffman ağacını / tablosunu oluşturmak, diğeri verileri sıkıştırmak için], ancak LZW tamamlanabilir tek bir geçiş).


1
Huffman ve önceden tanımlanmış bir sözlükte, sadece bir geçiş gerekir mi? Kaydedilmiş sözlükleri destekleyen Huffman tabanlı hazır araçlar var mı?
Eric

@EricJ. evet, önceden tanımlanmış bir sözlükte tek geçişli kodlama olur. Bunu yapabileceğim kişisel yazılı programlarım olmasına rağmen, bunu yapabilen herhangi bir yazılımı bilmiyorum. Denememiş olmama rağmen, bu araç tam da bunu yapabilir. Ancak, Huffman kodlu bit akışının kodunu çözmek için (yine LZW'den farklı olarak), verilerin sıkıştırmasını açmak için orijinal sözlüğe ihtiyacınız olduğunu unutmayın.
Atılım

Bu aracın yaşına dayanarak, tek iş parçacıklı olduğunu tahmin ediyorum. Ben 8 yerine 1 çekirdek kullanarak sabit bir sözlüğe herhangi bir fayda ofset olacağını tahmin ediyorum :-( Senaryoda diğer ucunda sözlüğü olması mümkündür (veri merkezleri arasında büyük dosyaları aktarma).
Eric J.

2

DEFLATE algoritmasının aksine, 7-Zip'in LZMA varsayılan olarak katı sıkıştırma kullanır ve bu da dosyalar arası yedekliliğin avantajını kullanır. Dosyalar yeterince küçük olduğu sürece bu, varsayılan ayarlarla çalışır.

Katı Blok boyutu için varsayılan 2 GB ayarıyla 16 GB dosya aslında 8 ayrı parça olarak sıkıştırılır.

@Breakthorugh'un daha önce söylediği gibi, sözlük anında oluşturulur. Sen ayarlayarak ampirik doğrulayabilirsiniz Katı Blok boyutunu etmek Katı (aynı anda kompres tüm dosyaları) ve Olmayan katı (ayrı her dosyayı sıkıştırmak).

Katı Blok boyutunun arttırılması aslında yavaşlamaya neden olur, ancak çok daha iyi bir sıkıştırma oranıyla sonuçlanabilir. Örneğin, iki özdeş dosyanın sıkıştırılması, katı olmayan sıkıştırma ile neredeyse iki kat daha büyük bir arşivle sonuçlanır.


1
Benim durumumda, benzer dosyaları bir kerede, farklı vesilelerle sıkıştırıyorum. Belirli bir arşivde yalnızca her bir 16 GB-ish dosyası vardır.
Eric

Ah tamam. Bunu yanlış yorumladım. Yeni arşiv oluşturulduğunda eski arşivler silinir mi? Hayırsa, birkaç dosyayı tek bir arşivde saklamak kabul edilebilir mi? Bu, sıkıştırma hızına yardımcı olmaz, ancak dosyaların gerçekte ne kadar benzer olduğuna bağlı olarak, orana yardımcı olabilir.
Dennis

1
Boşver, öyle değil. Katı bir arşivin güncellenmesi çok daha fazla zaman alır, ancak daha iyi sıkıştırmaya neden olmaz.
Dennis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.