Projekt Pack podjął próbę stworzenia formatu do archiwizacji plików, opartego na bibliotece SQLite i algorytmie kompresji ZSTD (Zstandard). Przygotowany prototyp, napisany w języku Pascal i dystrybuowany na licencji Apache 2.0, wyprzedzał najpopularniejsze programy archiwizujące pod względem prędkości tworzenia archiwów, przy czym jego działanie ograniczało się do odczytu danych, kompresji za pomocą biblioteki libzstd oraz wykonywania operacji SQL dodawania skompresowanych danych do pliku z bazą danych SQLite.
Podczas kompresji katalogu z 81 tysiącem plików o łącznym rozmiarze 1,25 GB, pack okazał się być 112 razy szybszy niż narzędzie ZIP, wykonując operację w 1,3 sekundy w porównaniu do 146 sekund potrzebnych ZIP. Rozmiar archiwum okazał się być o 23% mniejszy (194 MB dla Pack i 253 MB dla ZIP). Dla porównania, narzędzie tar wykonało pakowanie w 4,7 sekundy bez kompresji i w 28,5 sekundy z kompresją metodą gzip, archiwizator RAR poradził sobie z testem w 27,5 sekundy, a 7z w 54,2 sekundy. Rozmiary archiwów wyniosły: tar.gz — 214 MB, RAR — 235 MB, 7z — 135 MB. Zauważono, że pod względem prędkości dekompresji i losowego dostępu do plików Pack również wyprzedza inne archiwizatory, zużywając przy tym mniej pamięci operacyjnej. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s szybszy od ZIP o 2.7 razy 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
Nie wspomniano o wpływie pamięci podręcznej plików na wyniki testów. Prawdopodobnie niska prędkość ZIP wynika z kolejności wykonywania testów bez uwzględnienia buforowania danych w pamięci — test z zip został uruchomiony przy zimnej pamięci podręcznej, podczas gdy pozostałe testy przy rozgrzanej. W normalnych warunkach Zstandard wykazuje 3-5 razy wyższą prędkość kompresji w porównaniu do zlib oraz dwa razy szybszą dekompresję, przy poziomie kompresji wyższym o 10-15%.
Uzupełnienie: Podobny pomysł przechowywania skompresowanych plików w postaci blobów w bazie danych SQLite został zrealizowany w 2014 roku w archiwizatorze sqlar, stworzonym przez twórców SQLite jako eksperyment w celu oceny efektywności przechowywania blobów w SQLite. W sqlar do kompresji stosuje się zlib, a rozmiar plików jest około 2% większy niż w przypadku narzędzia ZIP.
Źródło: opennet.ru
