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 sotto licenza Apache 2.0, ha superato nella velocità di creazione degli archivi i più comuni strumenti di archiviazione, dato che il suo funzionamento si limitava alla lettura dei dati, alla compressione tramite la libreria libzstd e all'esecuzione di operazioni SQL per aggiungere i dati compressi al file del database SQLite.
Quando è stato compresso un catalogo con 81.000 file, per un totale di 1,25 GB, pack si è dimostrato più veloce dell'utility ZIP di 112 volte, completando l'operazione in 1,3 secondi rispetto ai 146 secondi di ZIP. La dimensione dell'archivio generato da pack è stata inferiore del 23% (194 MB per Pack e 253 MB per ZIP). A titolo di confronto, l'utility tar ha eseguito il pacchettizzamento in 4,7 secondi senza compressione e in 28,5 secondi con compressione gzip; l'archiviatore RAR ha superato il test in 27,5 secondi, mentre 7z ha impiegato 54,2 secondi. Le dimensioni degli archivi sono state: tar.gz — 214 MB, RAR — 235 MB, 7z — 135 MB. Si osserva che, in termini di velocità di estrazione e accesso casuale ai file, Pack supera anche altri archivi, consumando nel contempo meno memoria. 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 dei test. Probabilmente, la bassa velocità di ZIP è dovuta all'ordine di esecuzione dei test senza considerare la memorizzazione dei dati in memoria: il test con zip è stato eseguito con cache fredda, mentre gli altri test con cache calda. In condizioni normali, Zstandard dimostra di avere una velocità di compressione da 3 a 5 volte superiore rispetto a zlib e una velocità di estrazione due volte maggiore, con un livello di compressione superiore del 10-15%.
Nota: un'idea simile di memorizzare file compressi come blob in un database SQLite è stata implementata nel 2014 nell'archiviatore sqlar, creato dagli sviluppatori di SQLite come esperimento per valutare l'efficacia della memorizzazione dei blob in SQLite. In sqlar viene utilizzato zlib per la compressione e la dimensione dei file è circa del 2% maggiore rispetto all'utility ZIP.
Fonte: opennet.ru
