O proxecto Pack tentou crear un formato de arquivo de ficheiros baseado na biblioteca SQLite e no algoritmo de compresión ZSTD (Zstandard). O prototipo preparado, escrito en Pascal e distribuído baixo a licenza Apache 2.0, superou aos arquivadores máis comúns na velocidade de creación de arquivos, a pesar de que o seu traballo se limitaba a ler datos, comprimilos coa biblioteca libzstd e realizar operacións SQL para engadir datos comprimidos a un ficheiro cunha base de datos SQLite.
Ao comprimir un directorio con 81 mil ficheiros cun tamaño total de 1.25 GB, o paquete foi 112 veces máis rápido que a utilidade ZIP, completando a operación en 1.3 segundos fronte aos 146 segundos de ZIP. O tamaño do arquivo para o paquete era un 23 % máis pequeno (194 MB para Pack e 253 MB para ZIP). A modo de comparación, a utilidade tar completou o empaquetado en 4.7 segundos sen compresión e en 28.5 segundos con compresión gzip, o arquivador RAR completou a proba en 27.5 segundos e 7z en 54.2 segundos. Os tamaños do arquivo foron: tar.gz - 214 MB, RAR - 235 MB, 7z - 135 MB. Nótase que en termos de velocidade de desempaquetado e acceso aleatorio aos ficheiros, Pack tamén está por diante doutros arquivadores, mentres consume menos memoria RAM. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s máis rápido ZIP 2.7 veces tar.gz: 214 MB, 28.5 sx 5.1 RAR: 235 MB, 27.5 sx 5.3 tar: 1345 MB, 4.7 MB: 31 x 194 Paquete SX 1.3
Non se menciona o efecto da caché de ficheiros nos resultados da proba. Probablemente, a baixa velocidade de ZIP débese á orde na que se lanzaron as probas sen ter en conta o almacenamento de datos na memoria: a proba con zip lanzouse cunha caché fría e o resto das probas cunha caché quente. En condicións normais, Zstandard presenta velocidades de compresión 3-5 veces máis rápidas que zlib e unha descompresión 10 veces máis rápida, con niveis de compresión un 15-XNUMX % máis altos.
Ademais: unha idea similar de almacenar ficheiros comprimidos en forma de blobs nunha base de datos SQLite implementouse en 2014 no arquivador sqlar, creado polos desenvolvedores de SQLite como un experimento para avaliar a eficiencia de almacenar blobs en SQLite. sqlar usa zlib para a compresión e o tamaño do ficheiro é aproximadamente un 2% maior que a utilidade ZIP.
Fonte: opennet.ru
