Experimente usar SQLite como contêiner para arquivar arquivos

O projeto Pack tentou criar um formato de arquivamento de arquivos baseado na biblioteca SQLite e no algoritmo de compactação ZSTD (Zstandard). O protótipo preparado, escrito em Pascal e distribuído sob licença Apache 2.0, superou os arquivadores mais comuns na velocidade de criação de arquivos, apesar de seu trabalho se limitar a ler dados, compactá-los com a biblioteca libzstd e realizar operações SQL para adicione dados compactados a um arquivo com um banco de dados SQLite.

Ao compactar um diretório com 81 mil arquivos com tamanho total de 1.25 GB, o pack foi 112 vezes mais rápido que o utilitário ZIP, completando a operação em 1.3 segundos contra 146 segundos do ZIP. O tamanho do arquivo para pacote era 23% menor (194 MB para Pacote e 253 MB para ZIP). Para efeito de comparação, o utilitário tar completou o empacotamento em 4.7 segundos sem compactação e em 28.5 segundos com compactação gzip, o arquivador RAR completou o teste em 27.5 segundos e 7z em 54.2 segundos. Os tamanhos dos arquivos foram: tar.gz - 214 MB, RAR - 235 MB, 7z - 135 MB. Nota-se que em termos de velocidade de descompactação e acesso aleatório aos arquivos, o Pack também está à frente de outros arquivadores, consumindo menos RAM. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s mais rápido ZIP 2.7 vezes tar.gz: 214 MB, 28.5 sx 5.1 RAR: 235 MB, 27.5 sx 5.3 tar: 1345 MB, 4.7 sx 31 Pacote: 194 MB, 1.3 SX 112

Não há menção ao efeito do cache de arquivos nos resultados do teste. Provavelmente, a baixa velocidade do ZIP se deve à ordem em que os testes foram iniciados, independentemente do cache de dados na memória - o teste com zip foi iniciado com cache frio e o restante dos testes com cache quente. Em condições normais, o Zstandard exibe velocidades de compactação 3 a 5 vezes mais rápidas que o zlib e descompactação 10 vezes mais rápida, com níveis de compactação 15 a XNUMX% mais altos.

Adição: Uma ideia semelhante de armazenar arquivos compactados na forma de blobs em um banco de dados SQLite foi implementada em 2014 no arquivador sqlar, criado pelos desenvolvedores do SQLite como um experimento para avaliar a eficiência de armazenamento de blobs no SQLite. sqlar usa zlib para compactação e o tamanho do arquivo é cerca de 2% maior que o utilitário ZIP.

Fonte: opennet.ru

Adicionar um comentário