Eu opto por a LZMA
. Possui a menor sobrecarga de bytes e possui forte taxa de compactação. Comparação entre ZIP e LZMA: gerei dois arquivos seq.txt
com código PHP
$s = '0123456789'; $str = ''; for ($i=0; $i < 1000000; $i++) $str .= $s[$i%10].($i%10==9 ? "\n":""); file_put_contents('seq.txt', $str);
que contém blocos repetidos de 0..9 dígitos ~ 1Mb de dados e rnd.txt
com código PHP
$s = '0123456789'; $str = ''; for ($i=0; $i < 1000000; $i++) $str .= $s[rand(0,9)].($i%10==9 ? "\n":""); file_put_contents('rnd.txt', $str);
que contém blocos aleatórios de 0..9 dígitos ~ 1Mb de dados.
Resultados de compactação:
- seq.txt, rnd.txt - 1100000 bytes
- seq.txt.zip - 2502 bytes
- rnd.txt.zip - 515957 bytes
- seq.txt.lzma - 257 bytes
- rnd.txt.lzma - 484939 bytes
Taxa de compressão:
- ZIP -> "seq.txt" -> 99,772%
- ZIP -> "rnd.txt" -> 53,094%
- LZMA -> "seq.txt" -> 99,976%
- LZMA -> "rnd.txt" -> 55.914%
Portanto, o LZMA compactou os dados seqüenciais em 0,2% mais efetivamente que o ZIP
e os dados aleatórios 2,8% mais efetivamente que o ZIP.
Com certeza o LZMA vence!