Experimente usando SQLite como contenedor para archivar archivos

El proyecto Pack intentó crear un formato de archivo 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ó a los archivadores más comunes en la velocidad de creación de archivos, a pesar de que su trabajo se limitaba a leer datos, comprimirlos con la biblioteca libzstd y realizar operaciones SQL para agregar datos comprimidos a un archivo con una base de datos SQLite.

Al comprimir un directorio con 81 mil archivos con un tamaño total de 1.25 GB, pack fue 112 veces más rápido que la utilidad ZIP, completando la operación en 1.3 segundos frente a 146 segundos para ZIP. El tamaño del archivo para el paquete fue un 23 % más pequeño (194 MB para el paquete y 253 MB para el ZIP). A modo de comparación, la utilidad tar completó el empaquetado en 4.7 segundos sin compresión y en 28.5 segundos con compresión gzip, el archivador RAR completó la prueba en 27.5 segundos y 7z en 54.2 segundos. Los tamaños de archivo fueron: tar.gz - 214 MB, RAR - 235 MB, 7z - 135 MB. Cabe señalar que en términos de velocidad de descompresión y acceso aleatorio a archivos, Pack también está por delante de otros archivadores, aunque consume menos RAM. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s más 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 sx 31 Pack: 194 MB, 1.3 SX 112

No se menciona el efecto del caché de archivos en los resultados de la prueba. Probablemente, la baja velocidad de ZIP se debe al orden en que se iniciaron las pruebas sin tener en cuenta el almacenamiento en caché de los datos en la memoria: la prueba con zip se inició con un caché frío y el resto de las pruebas con un caché cálido. En condiciones normales, Zstandard exhibe velocidades de compresión entre 3 y 5 veces más rápidas que zlib y una descompresión 10 veces más rápida, con niveles de compresión entre un 15 y un XNUMX% más altos.

Adición: En 2014 se implementó una idea similar de almacenar archivos comprimidos en forma de blobs en una base de datos SQLite en el archivador SQLite, creado por los desarrolladores de SQLite como un experimento para evaluar la eficiencia del almacenamiento de blobs en SQLite. sqlar usa zlib para la compresión y el tamaño del archivo es aproximadamente un 2% más grande que la utilidad ZIP.

Fuente: opennet.ru

Añadir un comentario