El proyecto Pack intentó crear un formato para la compresión de archivos, basado en la biblioteca SQLite y el algoritmo de compresión ZSTD (Zstandard). El prototipo preparado, escrito en Pascal y distribuido bajo la licencia Apache 2.0, superó en velocidad de creación de archivos comprimidos a los compresores más comunes, ya que su trabajo consistía en leer datos, comprimir con la librería libzstd y ejecutar operaciones SQL para añadir datos comprimidos al archivo de la base de datos SQLite.
Al comprimir un directorio con 81 mil archivos, con un tamaño total de 1.25 GB, pack resultó ser 112 veces más rápido que la utilidad ZIP, completando la operación en 1.3 segundos frente a los 146 segundos de ZIP. El tamaño del archivo comprimido fue un 23% menor con pack (194 MB con Pack y 253 MB con ZIP). Para comparación, la utilidad tar empaquetó en 4.7 segundos sin compresión y en 28.5 segundos con compresión gzip, el compresor RAR completó la prueba en 27.5 segundos, y el 7z en 54.2 segundos. Los tamaños de los archivos comprimidos fueron: tar.gz — 214 MB, RAR — 235 MB, 7z — 135 MB. Se observa que en velocidad de descompresión y acceso aleatorio a los archivos, Pack también supera a otros compresores, consumiendo menos memoria RAM. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s más rápido que ZIP en 2.7 veces tar.gz: 214 MB, 28.5 s x 5.1 RAR: 235 MB, 27.5 s x 5.3 tar: 1345 MB, 4.7 s x 31 Pack: 194 MB, 1.3 s x 112
No se menciona el impacto de la caché de archivos en los resultados del test. Probablemente, la baja velocidad de ZIP se deba al orden de ejecución de las pruebas sin considerar la caché de datos en memoria: la prueba con zip se realizó con caché fría, mientras que las demás pruebas se hicieron con caché caliente. En condiciones normales, Zstandard muestra una velocidad de compresión de 3 a 5 veces mayor en comparación con zlib y una descompresión dos veces más rápida, con un nivel de compresión superior en un 10-15%.
Adición: Una idea similar de almacenar archivos comprimidos en forma de blobs en una base de datos SQLite fue implementada en 2014 en el compresor sqlar, creado por los desarrolladores de SQLite como un experimento para evaluar la efectividad del almacenamiento de blobs en SQLite. En sqlar, se utiliza zlib para la compresión y el tamaño de los archivos es aproximadamente un 2% mayor que el de la utilidad ZIP.
Fuente: opennet.ru
