O projeto Pack tentou criar um formato de compactação de arquivos baseado na biblioteca SQLite e no algoritmo de compressão ZSTD (Zstandard). O protótipo preparado, escrito na linguagem Pascal e distribuído sob a licença Apache 2.0, superou em velocidade os utilitários de compactação mais comuns, sendo que seu funcionamento se restringia à leitura de dados, compressão pela biblioteca libzstd e execução de operações SQL para adicionar os dados compactados ao arquivo com o banco de dados SQLite.
Ao compactar um diretório com 81 mil arquivos, totalizando 1,25 GB, o Pack se mostrou 112 vezes mais rápido que a ferramenta ZIP, realizando a operação em 1,3 segundos contra 146 segundos do ZIP. O tamanho do arquivo compactado pelo Pack foi 23% menor (194 MB no Pack e 253 MB no ZIP). Para comparação, a ferramenta tar levou 4,7 segundos sem compressão e 28,5 segundos com compressão gzip, o compactador RAR completou o teste em 27,5 segundos, enquanto o 7z levou 54,2 segundos. Os tamanhos dos arquivos compactados foram: tar.gz — 214 MB, RAR — 235 MB, 7z — 135 MB. Observa-se que em termos de velocidade de descompactação e acesso aleatório a arquivos, o Pack também supera outros compactadores, consumindo menos memória RAM.
Não se menciona o impacto do cache de arquivos nos resultados do teste. Provavelmente, a baixa velocidade do ZIP se deve à ordem em que os testes foram executados, sem consideração pelo cache de dados na memória — o teste com zip foi iniciado com o cache frio, enquanto os demais testes foram realizados com o cache aquecido. Em condições normais, o Zstandard demonstra uma velocidade de compressão 3 a 5 vezes superior à do zlib e uma descompactação duas vezes mais rápida, com um nível de compressão 10 a 15% maior.
Adendo: Uma ideia semelhante de armazenar arquivos compactados como blobs em um banco de dados SQLite foi implementada em 2014 no compactador sqlar, criado pelos desenvolvedores do SQLite como um experimento para avaliar a eficiência do armazenamento de blobs no SQLite. No sqlar, a compressão usa zlib e o tamanho dos arquivos é aproximadamente 2% maior do que o da ferramenta ZIP.
Fonte: opennet.ru
