11 pontos por xguru 2021-03-16 | 4 comentários | Compartilhar no WhatsApp
  • O arquivo criado com o tarfile do Python ficou 15 vezes menor do que o arquivo criado com o tar do macOS

  • Causa: o BSD/GNU tar coloca os arquivos dentro do arquivo compactado sem ordenação, então, dependendo do tipo de arquivo, a taxa de compressão pode piorar

→ a função tarfile do Python usa ordenação por padrão

  • No GNU tar, é possível usar a opção --sort para ordenar por name/inode ao inserir os arquivos → ao aplicar a ordenação, obtém-se a mesma taxa de compressão

4 comentários

 
deadcat 2021-03-16

Estou meio sem entender: por que a taxa de compressão muda quando se aplica ordenação? A taxa de compressão de cada arquivo individualmente seria a mesma, não?

 
dalinaum 2021-03-22

O algoritmo usado é o Deflate. Ele mantém, em uma janela deslizante, o conteúdo que já foi usado anteriormente na compressão. Se desta vez ele processou 10 bytes, esses 10 bytes processados no momento são adicionados ao final da janela deslizante, e o tamanho dessa janela é fixo.

Quando encontra um conteúdo igual ao que está na janela deslizante, ele comprime escrevendo um LLD (Literal, Length, Distance) no lugar. Distance indica a partir de onde, na janela deslizante, está o conteúdo igual; Length, o tamanho desse trecho igual na janela deslizante; e Literal, o primeiro caractere que não é igual.

Como, no Deflate, é importante o que está armazenado na janela deslizante, também é importante se ele viu um conteúdo semelhante logo antes; se ele tiver visto arquivos semelhantes, há uma chance maior de conseguir uma compressão melhor.

 
dalinaum 2021-03-22

A forma como a compressão é feita pode ser vista no slide abaixo. (gzip também é baseado em Deflate.)

https://speakerdeck.com/dalinaum/…

 
xguru 2021-03-16

Como o conteúdo de arquivos com o mesmo nome ou nomes parecidos dentro da mesma pasta tende a ser semelhante, a taxa de compressão deve ser maior.

Acho que a ideia é que, como o alcance para encontrar essas semelhanças durante a compactação não é tão amplo, se os arquivos forem ordenados, aumenta a chance de esses arquivos parecidos ficarem agrupados e serem comprimidos juntos.