Il progetto Pack ha tentato di creare un formato per l'archiviazione di file basato sulla libreria SQLite e sull'algoritmo di compressione ZSTD (Zstandard). Il prototipo preparato, scritto in linguaggio Pascal e distribuito con licenza Apache 2.0, ha superato in velocità nella creazione di archivi i più diffusi archiviatori, dal momento che il suo funzionamento consisteva nella lettura dei dati, nella compressione tramite la libreria libzstd e nell'esecuzione di operazioni SQL per aggiungere i dati compressi a un file del database SQLite.
Compressando una cartella con 81.000 file, per un totale di 1,25 GB, Pack è risultati essere 112 volte più veloce dell'utensile ZIP, completando l'operazione in 1,3 secondi contro i 146 secondi di ZIP. La dimensione dell'archivio creato con Pack è risultata 23% più piccola (194 MB per Pack e 253 MB per ZIP). A titolo di confronto, l'utensile tar ha eseguito l'imballaggio in 4,7 secondi senza compressione e in 28,5 secondi con compressione gzip, mentre l'archiviatore RAR ha completato il test in 27,5 secondi e 7z in 54,2 secondi. Le dimensioni degli archivi erano: tar.gz — 214 MB, RAR — 235 MB, 7z — 135 MB. Si segnala che Pack supera anche altri archiviatori in termini di velocità di decompressone e accesso casuale ai file, consumando al contempo meno memoria operativa. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s più veloce di ZIP di 2.7 volte 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
Non si fa menzione dell'influenza della cache di file sui risultati del test. Probabilmente, la bassa velocità di ZIP è dovuta all'ordine di esecuzione dei test senza considerare la cache di dati in memoria: il test con zip è stato avviato con la cache fredda, mentre gli altri test sono stati eseguiti con la cache calda. In condizioni normali, Zstandard dimostra una velocità di compressione 3-5 volte superiore rispetto a zlib e una decompressione due volte più veloce, con un livello di compressione superiore del 10-15%.
Nota: Un'idea simile per lo stoccaggio di file compressi come blob in un database SQLite è stata realizzata nel 2014 nell'archiviatore sqlar, creato dagli sviluppatori di SQLite come esperimento per valutare l'efficacia dello stoccaggio di blob in SQLite. In sqlar, per la compressione viene utilizzata zlib e le dimensioni dei file sono circa il 2% superiori rispetto a quelle dell'utensile ZIP.
Fonte: opennet.ru
