É melhor compactar todos os dados ou diretórios compactados?

1

Estou arquivando alguns projetos, digamos que cada um deles tenha um diretório próprio:

projects
 |- project-1
 |- project-2
 |- project-3

Comecei a compactá-los da seguinte forma:

==== SITUATION 1 ====

projects
 |- project-1.zip
 |- project-2.zip
 |- project-3.zip

e comecei a pensar se não seria melhor compactar todos os dados em um arquivo zip:

==== SITUATION 2 ====

projects.zip
 |- project-1
 |- project-2
 |- project-3

ou talvez comprimir arquivos já compactados?:

==== SITUATION 3 ====

projects.zip
 |- project-1.zip
 |- project-2.zip
 |- project-3.zip

Qual situação é a melhor (ocupa menos espaço)? Por quê? Depende do algoritmo de compressão? Eu sei que compactar um arquivo compactado não pode ajudar muito, mas digamos 20 deles? Para mim, a situação 1 não parece uma boa ideia.

    
por Kamil Jarosz 30.04.2015 / 17:56

3 respostas

4

Eu duvido que os diferentes esquemas fariam muita diferença para ser honesto, já que os algoritmos de compressão normalmente apenas aguardam uma quantidade limitada para controlar o uso da memória.

A exceção é S3, que terminaria com maior probabilidade, pois a compactação de um arquivo compactado adiciona overheads, mas não pode ser compactada.

Se você deseja uma melhor compactação, procure por ferramentas de arquivamento mais recentes que tenham melhores algoritmos. O 7-zip, por exemplo, é geralmente melhor que o zip.

Em termos da diferença entre s1 e s2, eu diria que isso depende de como você está mais propenso a usar o arquivo no futuro e o quão grande ele é.

Arquivos realmente grandes são difíceis de lidar (movimentação, abertura, etc) e isso provavelmente será mais importante do que economizar alguns kB.

Além disso, ao pensar em armazenamento de longo prazo, não ignore "bit-rot". Um pequeno erro em um arquivo grande pode ser devastador. Perder um projeto é provavelmente muito melhor do que perder todos eles.

Você pode, no entanto, observar algo como o RAR, que permite redundância e divisão de arquivos. Isto é um pouco como o RAID5. Você cria vários arquivos compactados, cada um com redundância embutida, para que você possa perder um arquivo e ainda recriar os dados originais.

    
por 30.04.2015 / 18:17
1
Primeiro de tudo, mantenha os excelentes argumentos de @Julian Knight em mente. Mesmo a melhor compactação é inútil se o seu arquivo for grande demais para manipular ou for corrompido por alguns bits invertidos.

Se o espaço é sua principal preocupação, pode valer a pena fazer algumas experiências com seus dados específicos e diferentes algoritmos de compactação.

Além disso, sua terceira abordagem pode realmente levar a outra redução no tamanho. Lembro de algumas discussões ( veja aqui ) sobre a compactação de arquivos várias vezes usando algoritmos diferentes. O autor estava compactando arquivos de texto altamente redundantes e poderia passar de 100 GB para alguns MB após experimentar o suficiente. Observe que seu caso foi um pouco especial, mas a ideia geral é que a compactação iterada pode realmente valer a pena em alguns casos.

Se você estiver disposto a experimentar diferentes algoritmos de compactação, aqui estão alguns benchmarks que comparam velocidade e taxa de compressão:

por 30.04.2015 / 20:38
0

A situação 3 está fora porque é inútil compactar novamente os arquivos com o mesmo algoritmo.

Entre as Situações 1 e 2, o último definitivamente tem mais chance de resultar em um arquivo menor, especialmente quando você usa tamanhos de dicionário maiores (o dicionário em palavras simples é a área de memória usada para localizar e compactar padrões repetidos nos dados). O velho ZIP simples só pode usar um minúsculo dicionário de 32KB, o qual, considerando que o hardware hoje em dia é muito pequeno.

O formato RAR 5.0, por comparação, pode usar um dicionário de 1 GB em sistemas de 64 bits. Também suporta salvar arquivos idênticos como referências :

If this option is enabled, WinRAR analyzes the file contents before starting archiving. If several identical files larger than 64 KB are found, the first file in the set is saved as usual file and all following files are saved as references to this first file. It allows to reduce the archive size, but applies some restrictions to resulting archive. You must not delete or rename the first identical file in archive after the archive was created, because it will make extraction of following files using it as a reference impossible. If you modify the first file, following files will also have the modified contents after extracting. Extraction command must involve the first file to create following files successfully.

Assim, se você tiver muitos arquivos duplicados entre seus projetos, é muito provável que um tamanho de dicionário grande combinado com um arquivamento sólido e o recurso acima levem a uma redução de tamanho significativa com Situação 2 . É claro que todas as advertências gerais sobre arquivos grandes se aplicam, portanto, incluir um registro de recuperação também seria recomendado.

    
por 30.04.2015 / 22:31