Por que o Zip é capaz de compactar arquivos únicos melhor que vários arquivos com o mesmo conteúdo?


0

A capacidade de compactar nossos arquivos para que seja mais fácil compartilhá-los e / ou transportá-los pode facilitar muito nossa vida eletrônica, mas às vezes podemos ver resultados de dimensionamento estranhos ou inesperados depois de compactados. Por que é que? A postagem de perguntas e respostas do superusuário de hoje tem respostas para as perguntas de um leitor confuso.

A sessão de perguntas e respostas de hoje chega até nós como cortesia do SuperUser – uma subdivisão do Stack Exchange, um agrupamento da comunidade de sites de perguntas e respostas.

Foto cortesia de Jean-Etienne Minh-Duy Poirrier (Flickr).

A questão

O leitor de superusuário sixtyfootersdude quer saber por que o zip é capaz de compactar arquivos únicos melhor do que vários arquivos com o mesmo tipo de conteúdo:

Suponha que eu tenha 10.000 arquivos XML e queira enviá-los a um amigo. Antes de enviá-los, eu gostaria de compactá-los.

Método 1: Não os Comprima

Resultados:

zip-comprime-arquivos-únicos-melhores-que-múltiplos-arquivos-com-mesmo-conteúdo-01

Método 2: compactar todos os arquivos separadamente e enviar a ele 10.000 arquivos XML compactados

Comando:

zip-comprime-arquivos-únicos-melhores-que-múltiplos-arquivos-com-mesmo-conteúdo-02

Resultados:

zip-comprime-arquivos-únicos-melhores-que-múltiplos-arquivos-com-mesmo-conteúdo-03

Método 3: Criar um único arquivo zip contendo todos os 10.000 arquivos XML

Comando:

zip-comprime-arquivos-únicos-melhores-que-múltiplos-arquivos-com-mesmo-conteúdo-04

Resultados:

zip-comprime-arquivos-únicos-melhores-que-múltiplos-arquivos-com-mesmo-conteúdo-05

Método 4: concatenar os arquivos em um único arquivo e compactá-lo

Comando:

zip-comprime-arquivos-únicos-melhores-que-múltiplos-arquivos-com-mesmo-conteúdo-06

Resultados:

zip-comprime-arquivos-únicos-melhores-que-múltiplos-arquivos-com-mesmo-conteúdo-07

Questões

  • Por que obtenho resultados tão melhores quando estou apenas compactando um único arquivo?
  • Eu esperava obter resultados drasticamente melhores usando o método 3 em vez do método 2, mas não o faço. Por que é isso?
  • Esse comportamento é específico ao zip? Se eu tentasse usar o Gzip, obteria resultados diferentes?

Informação adicional

zip-comprime-arquivos-únicos-melhores-que-múltiplos-arquivos-com-mesmo-conteúdo-08

Meta Data

Uma das respostas dadas sugere que a diferença são os metadados do sistema armazenados no arquivo zip. Não acredito que seja esse o caso. Para testá-lo, fiz o seguinte:

zip-comprime-arquivos-únicos-melhores-que-múltiplos-arquivos-com-mesmo-conteúdo-09

O arquivo zip resultante é de 1,4 MB. Isso significa que ainda há aproximadamente dez MB de espaço inexplicável.

Por que o zip é capaz de compactar arquivos únicos melhor do que vários arquivos com o mesmo tipo de conteúdo?

A resposta

Os colaboradores do SuperUser Alan Shutko e Aganju têm a resposta para nós. Primeiro, Alan Shutko:

A compactação zip é baseada em padrões repetitivos nos dados a serem compactados, e a compactação fica melhor quanto mais tempo o arquivo é, pois mais e mais padrões podem ser encontrados e usados.

Simplificado, se você compactar um arquivo, o dicionário que mapeia códigos (curtos) para padrões (mais longos) está necessariamente contido em cada arquivo zip resultante; se você compactar um arquivo longo, o dicionário será “reutilizado” e se tornará ainda mais eficaz em todo o conteúdo.

Se seus arquivos forem um pouco parecidos (como o texto sempre é), a reutilização do 'dicionário' se torna muito eficiente e o resultado é um arquivo zip total muito menor.

Seguido pela resposta de Aganju:

No zip, cada arquivo é compactado separadamente. O oposto é compressão sólida, ou seja, os arquivos são compactados juntos. 7-zip e Rar usam compactação sólida por padrão. Gzip e Bzip2 não podem compactar vários arquivos; portanto, o Tar é usado primeiro, tendo o mesmo efeito que a compactação sólida.

Como os arquivos xml possuem estrutura semelhante (e provavelmente conteúdo semelhante), se os arquivos forem compactados juntos, a compactação será maior.

Por exemplo, se um arquivo contiver a sequência “<nome do elemento =”E o compressor já encontrou essa sequência em outro arquivo, ela será substituída por um pequeno ponteiro para a correspondência anterior. Se o compressor não usar compactação sólida, a primeira ocorrência da sequência no arquivo será registrada como um literal, que é maior.


Tem algo a acrescentar à explicação? Som desligado nos comentários. Deseja ler mais respostas de outros usuários do Stack Exchange com conhecimento técnico? Confira o tópico de discussão completo aqui.


Like it? Share with your friends!

0

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win

0 Comments

Your email address will not be published. Required fields are marked *