Qual arquivo / formato de compactação?

8

Zip, Rar, 7z, Gzip, BZip2, Tar etc. Estou ouvindo que 7z é o sabor do mês, por quê? É melhor para todas as situações ou existem melhores opções para situações específicas.

Ou talvez o arquivador de arquivos real, ou seja, WinZip, WinRar, 7Zip etc (em oposição ao formato), tenha um efeito maior?

Em sua resposta, você poderia descrever que tipo de compensação de velocidade / compactação seu formato mencionado usa.

Forneça links para todos os testes empíricos que apoiam sua resposta.

Antecedentes: preciso fazer backup de um índice de pesquisa personalizado que crie cerca de 3000 arquivos relativamente pequenos (menos de 10 MB), cada um contendo muitos dados repetitivos.

(Como de costume, a Wikipedia possui um artigo relevante, mas a seção sobre comparação de desempenho é breve.)

obrigado

Cinza
fonte

Respostas:

14

Compactar, Gzip, Bzip, Bzip2 não servem para arquivar vários arquivos. Eles compactam apenas um arquivo. Para arquivamento, eles geralmente são usados ​​com o TAR. O problema com o TAR é que ele não possui tabela de índice . Só é bom se você estiver planejando restaurar a coisa toda . Se você espera restaurar um número limitado de arquivos selecionados, esqueça o TAR. Para obter o último arquivo tar.gzou tar.bz2arquivar, é necessário descompactar e processar tudo . No caso de zip, rar ou 7-zip, ele irá para a tabela de índices, pulará para a posição relevante do arquivo e processará apenas os arquivos relevantes.

Ok, TAR está fora, então você fica com ZIP, RAR e 7-ZIP. Desses três, o ZIP é o mais proliferado, quase tudo suporta, muitos aplicativos têm suporte embutido. E é rápido. Por outro lado, o 7-ZIP também é portátil, a biblioteca é LGPL e possui taxas de compactação muito melhores que as outras duas, como custo de consumir mais CPU. O RAR é um verdadeiro perdedor, nem grande compactação, nem realmente portátil, nem rápido.

EDIT: parece que a melhor opção seria 7-ZIP, mas com o método de compactação bzip2. Dessa forma, você não terá as desvantagens do TAR, mas ainda poderá aproveitar o suporte ao bzip2 multi-core. Veja este artigo.

vartec
fonte
Excelente informação, obrigado. Eu já tinha visto o TAR jogando no Linux, mas nunca tinha olhado de perto.
772 Ash
Eu teria que discordar sobre rar. A compactação é boa (em comparação com o gzip pelo menos) e a velocidade parece boa nos meus casos de uso. Uma coisa que eu gosto sobre rar é que pode lidar com streaming de conteúdo ou individuais arquivos, e permite que você auto-incluir um carimbo de tempo no nome do arquivo ...
Dscoduc
10

Leitura recomendada:

Compactação de arquivos na era de vários núcleos (Jeff Atwood aka CodingHorror, fevereiro de 2009)

Venho brincando um pouco com a compactação de arquivos novamente, pois geramos alguns arquivos de backup muito grandes diariamente no Stack Overflow.

Estamos usando a versão mais recente de 64 bits do 7zip (4.64) em nosso servidor de banco de dados. Eu não sou um grande fã de mais do que dual core na área de trabalho, mas é um acéfalo para os servidores. Quanto mais núcleos de CPU, melhor! Este servidor possui duas CPUs quad-core, um total de 8 núcleos, e fiquei um pouco desanimado ao descobrir que nem o RAR nem o 7zip pareciam fazer muito uso de mais de 2.

Ainda assim, mesmo que ele use apenas 2 núcleos para compactar, o algoritmo 7zip é incrivelmente eficaz e evoluiu nos últimos anos para ser relativamente rápido. Eu costumava recomendar o RAR sobre o Zip, mas, dada a maior eficiência do 7zip e o fato de ser gratuito e o RAR não ser, é a escolha lógica agora.

E sobre algoritmos:

Por que o bzip2 é capaz de funcionar muito mais rápido que o 7zip? [...] o Bzip2 usa mais de 2 núcleos de CPU para paralelizar seu trabalho.

splattne
fonte
Obrigado pelo link. Certamente sabemos que a visão de Jeff se baseia na experiência da vida real!
Ash
4

Não se trata de eficiência e velocidade. Claro que eles são importantes e você pode examinar os parâmetros de referência para eles e escolher sabiamente dentre as opções (embora eu recomende alguns testes simples de referência com seus próprios dados em seu próprio servidor). Mas o arquivamento inevitavelmente leva, em algum momento, a acessar seus dados novamente (caso contrário, por que não excluí-los?). Ou talvez anos depois, não será você que acessará os dados, mas sim alguém terceiro. Escolha algo que estará disponível quando você precisar acessar os dados e algo que as pessoas reconheçam. Eu pessoalmente uso o 7zip, mas quando eu arquivo arquivos outras pessoas podem precisar, eu uso o zip. Eles sabem disso, muitas ferramentas podem lidar com isso. Pode não ser tão rápido ou tão pequeno, mas ajuda no fator humano.

Joshua Hunter
fonte
Bom ponto. Este índice de pesquisa extrairá dados diretamente de determinados arquivos compactados. É por isso que estou interessado se houver algum formato que ofereça desempenho de compactação / descompactação configurável. Então, estou analisando mais o aspecto da compactação do que o arquivamento para o aspecto futuro.
772 Ash
3

O lzma parece ter um desempenho muito bom tanto na taxa de compressão quanto na velocidade.

Nos benchmarks a seguir http://tukaani.org/lzma/benchmarks, a configuração mais rápida para lzma proporcionou tempos de compactação consideravelmente mais rápidos que a opção mais rápida do bzip2, enquanto ainda oferece uma compactação melhor que a opção mais lenta do bzip2:

    ratio bzip2 lzmash
    mais rápido 35,8% 31,7%       
    mais lento 34,0% 25,4%

    time bzip2 lzmash  
    mais rápido 1m 26s 0m 58s  
    2m mais lento 37s 12m 20s

    * Compactando a instalação completa do OpenOffice.org 1.1.4 para Linux (203 MB) 

Ele funciona especialmente bem com dados binários, mas acho que li alguns benchmarks de texto sem formatação em que o bzip2 o superou.

Vale a pena ler a página de manual do lzma:

   lzma  provides  notably  better compression ratio than bzip2 especially
   with files having other than plain text content. The other advantage of
   lzma  is fast decompression which is many times quicker than bzip2. The
   major disadvantage is that achieving  the  highest  compression  ratios
   requires  extensive  amount of system resources, both CPU time and RAM.
   Also software to handle LZMA  compressed  files  is  not  installed  by
   default on most distributions.
Guy C
fonte
Eu nem até a semana passada, quando alguém o recomendou em uma das minhas perguntas sobre falha no servidor. Parece impressionante, vale a pena investigar o desempenho com texto simples, se você o usar para isso.
Indivíduo C
LZMA é o nome do algoritmo usado no 7-zip.
precisa saber é
2

Dê uma olhada nesta entrada da Wikipedia . Para o fundo, "Comparação de eficiência". Isso fornecerá a porcentagem de compactação e o tempo gasto, aproximadamente. Todos esses números variam (velocidade) com base na velocidade da máquina utilizada, na quantidade de memória, etc.

Mais benchmarks de compactação:


fonte
Obrigado, mas eu li isso e pensei que era um pouco breve (veja meu ponto na pergunta). Você conhece algum teste mais detalhado em cenários mais variados?
Ash
Adicionado alguns links que, espero, forneçam mais informações.
2

Comparando zip, 7z, rar com dois casos

Depende do que exatamente você está compactando, mas, em geral, o 7z faz melhor uso de vários processadores, e o próprio formato de compressão 7z produz uma compressão maior que o zip e, às vezes, maior que rar (embora rar e 7z sejam quase equivalentes, mas rar isn é grátis ...)

Meus testes, há alguns meses atrás, deram os seguintes resultados:

Compactando um único arquivo de banco de dados de acesso de 10 MB:

Database.mdb 17,240,064 (original)
Database.zip  1,634,794 (Regular zip, 11:1)
Database.rar    262,212 (RAR compression, 66:1)
Database.7z     195,678 (7-zip compression, 88:1)

A compactação de uma pasta que contém mais de nove mil arquivos de tipos variados (903.488 KB) e obteve o seguinte (esta é uma combinação do código-fonte e de todas as ferramentas que o envolvem para o desenvolvimento do software):

Type   Time  Size (KB)  Compression
ZIP    7:28   247,529   3.7:1
RAR    8:15   222,232   4.1:1
7z    10:49   181,633   5.0:1

Para fins de tempo, era um Core2 Duo, 2 GHz, 1 GB de RAM e um disco rígido barato.

Portanto, o 7z deu uma melhora substancial na taxa de compressão nos dois casos que testei acima e além do zip, e até melhorou no rar, mas o 7z foi certamente mais lento. Não significativamente, mas o suficiente para ser observado.

-Adão

Adam Davis
fonte
Testes agradáveis. Essa compactação MDB é enorme. Eu recebo apenas 4 a 1 nos arquivos de 100k de índice binário em que testei. Eu acho que isso mostra o quanto é importante testar usando arquivos / dados semelhantes aos usados ​​pelo seu sistema.
772 Ash
Sim, os arquivos MDB são todos fofos e sem substância. Um arquivo binário terá menos (porque usa todos os 8 bits, enquanto os arquivos de texto usam pouco mais de 6 bits) e as chances são boas de que não haja muita duplicação. Sempre importante testar, no entanto. Você pode ter melhor sorte jogando com as configurações de compactação - às vezes, você pode otimizá-lo para o uso e melhorar o que as configurações padrão fornecem.
7119 Adam Davis
0

Acabei de instalar o dar (mas ainda não tive a chance de jogar com ele). É semelhante ao tar com compressão gzip ou bzip2, com a capacidade adicional de dividir o arquivo morto em várias partes e calcular a paridade para que, se uma ou mais partes estiverem corrompidas, ela possa ser reconstruída a partir dos arquivos de paridade.

pgs
fonte