Frequentemente tenho que realizar backups de arquivos grandes, normalmente os arquivos ficam muito tempo armazenados e raramente são acessados então a minha preocupação com esse arquivos é com armazenamento e não com tempo de acesso. Por isso eu sempre comprimi os arquivos de backup, minha ferramenta favorita para isso é o 7-zip por ser leve, opensource, permitir a divisão em multiplos arquivos (que evita problemas com alguns sistemas de arquivos) e usa algoritmos de compressão que possuem clientes em todas as plataformas, então eu sei que vou poder abrir os arquivos em qualquer computador que eu tenha à disposição quando precisar.
O 7-zip abre diversos tipos de arquivos mas para comprimir ele oferece 4 algoritmos além do ZIP: LZMA, LZMA2, PPMd e BZip2. Embora eu conheça os algoritmos e use eles o tempo todo eu não tinha certeza de qual teria o melhor resultado e se a diferença no tempo de compressão seria muito grande, procurei no Google por um comparativo rápido para consulta, achei que seria fácil encontrar um teste feito em condições controladas com gráficos, mas não foi, até achei algumas comparações mas elas não cobriam todos esses algoritmos, eram em sua maioria comparativos do 7-zip com o WinRAR, então eu decidi fazer eu mesmo esse comparativo e escrever esse artigo para que outras pessoas com a mesma duvida encontre a resposta de forma rápida.
Condições do teste
Eu queria que o teste fosse feito em condições normais de uso, não criei um ambiente especifico para o teste nem arquivos específicos, utilizei arquivos que realmente precisava comprimir e tentei minimizar a interferência de fatores externos fechando todos os programas e desabilitando serviços não essenciais ao processo. O teste foi realizado em um Intel i7 920 (1ª geração, 8 Threads, clock padrão 2,6GHz) rodando em overclock a 4Ghz com 12GB de RAM, pela quantidade de memória disponível versus a utilizada pelo programa acredito que não houve necessidade de paginação.
Para minimizar a influencia do IO e atrasos de disco utilizei dois discos diferentes do disco em que o SO está instalado, coloquei os arquivos de origem em um e mandei o 7-zip gerar os arquivos em outro, antes de começar o processo formatei os dois discos para que não houvesse fragmentação de dados.
Como o objetivo é obter o menor arquivo utilizei todos os algoritmos no presset Ultra do 7zip, sem alterar configuração de tamanho de dicionario ou numero de threads, deixando as opções como o 7-zip determinou serem as melhores. Por fim adicionei os resultados com a compressão em ZIP pelo 7-zip e em RAR e RAR5 pelo WinRAR para comparações.
Os testes foram realizados com 5 pacotes de arquivos de diferentes tipos:
Teste 1: Pasta de arquivos de projeto de websites contendo código imagens e logs de SVN. Arquivos: 69.305, tamanho: 12,2 GB (13.129.809.842 bytes)
Teste 2: Pasta com videos retirados diretamente de várias câmeras diferentes, sem conversão ou compressão. Arquivos: 111, tamanho: 28,8 GB (31.021.332.937 bytes)
Teste 3: Pasta com musicas, arquivos mp3. Arquivos: 3.224, tamanho: 33,2 GB (35.752.850.553 bytes)
Teste 4: Arquivo de texto gerado a partir de um sequência de caracteres aleatórios, 10,0 GB (10.737.418.240 bytes)
Teste 5: Arquivo de texto gerado com palavras aleatórias em inglês,8,71 GB (9.359.180.361 bytes)
O tempo de execução de cada algoritmo foi determinado por um script PowerShell com base na data de criação e escrita dos arquivos.
Resultados em tamanho (menor = melhor)
Teste 1 | Teste 2 | Teste 3 | Teste 4 | Teste 5 | Media | |
BZip2 | 50.85% | 97.05% | 96.70% | 75.17% | 32.02% | 70.36% |
LZMA | 36.68% | 95.04% | 97.11% | 76.62% | 30.07% | 67.10% |
LZMA2 | 37.15% | 94.28% | 96.86% | 76.46% | 30.11% | 66.97% |
PPMd | 46.19% | 95.58% | 97.19% | 76.52% | 24.14% | 67.92% |
RAR | 50.31% | 96.65% | 96.74% | 77.13% | 32.42% | 70.65% |
RAR5 | 47.08% | 95.53% | 96.71% | 77.42% | 33.41% | 70.04% |
ZIP | 56.81% | 97.90% | 96.75% | 75.09% | 42.37% | 73.78% |
Resultados em tempo de compressão (menor = melhor)
Tempo em segundos para compressão
Teste 1 | Teste 2 | Teste 3 | Teste 4 | Teste 5 | |
BZip2 | 10823 | 7178 | 17166 | 4422 | 3436 |
LZMA | 7508 | 12048 | 14611 | 8594 | 8546 |
LZMA2 | 5411 | 8635 | 4811 | 5291 | 4658 |
PPMd | 5328 | 25657 | 26004 | 11844 | 5329 |
RAR | 1763 | 5688 | 2072 | 5938 | 6424 |
RAR5 | 3500 | 3316 | 11084 | 991 | 2527 |
ZIP | 8518 | 13961 | 4241 | 6528 | 13991 |
Tempo de execução em percentagem (assumindo o maior como 100%)
Teste 1 | Teste 2 | Teste 3 | Teste 4 | Teste 5 | |
BZip2 | 100.00% | 27.98% | 66.01% | 37.34% | 24.56% |
LZMA | 69.37% | 46.96% | 56.19% | 72.56% | 61.08% |
LZMA2 | 50.00% | 33.66% | 18.50% | 44.67% | 33.29% |
PPMd | 49.23% | 100.00% | 100.00% | 100.00% | 38.09% |
RAR | 16.29% | 22.17% | 7.97% | 50.14% | 45.92% |
RAR5 | 32.34% | 12.92% | 42.62% | 8.37% | 18.06% |
ZIP | 78.70% | 54.41% | 16.31% | 55.12% | 100.00% |
Resultados em velocidade de compressão (maior = melhor)
(MBps)
Teste 1 | Teste 2 | Teste 3 | Teste 4 | Teste 5 | |
BZip2 | 0.59 | 4.00 | 1.92 | 1.74 | 0.83 |
LZMA | 0.61 | 2.33 | 2.27 | 0.91 | 0.31 |
LZMA2 | 0.86 | 3.23 | 6.86 | 1.48 | 0.58 |
PPMd | 1.09 | 1.10 | 1.27 | 0.66 | 0.40 |
RAR | 3.57 | 5.03 | 15.92 | 1.33 | 0.45 |
RAR5 | 1.68 | 8.52 | 2.98 | 8.00 | 1.18 |
ZIP | 0.84 | 2.07 | 7.78 | 1.18 | 0.27 |
Conclusão
LZMA e LZMA2 resultaram nos menores arquivos, tendo LZMA2 um resultado em tempo muito melhor, vale dizer que LZMA2 fez uso das 8 threads disponíveis do processador enquanto LZMA se limitou a apenas uma.
RAR, RAR5 e ZIP obtiveram os melhores resultados em tempo mas também as menores taxas de compressão.
PPMd obteve os piores resultados em termos de tempo.
Se você ainda usa o WinRAR mude para o 7zip (também abre RAR): http://www.7-zip.org/