Poeksperymentuj z użyciem SQLite jako kontenera do archiwizacji plików

W projekcie Pack podjęto próbę stworzenia formatu archiwizacji plików w oparciu o bibliotekę SQLite i algorytm kompresji ZSTD (Zstandard). Przygotowany prototyp, napisany w języku Pascal i dystrybuowany na licencji Apache 2.0, przewyższał najpopularniejsze archiwarze pod względem szybkości tworzenia archiwów, mimo że jego praca ograniczała się do odczytu danych, kompresji ich biblioteką libzstd i wykonywania operacji SQL w celu dodać skompresowane dane do pliku z bazą danych SQLite.

Podczas kompresji katalogu zawierającego 81 tysięcy plików o łącznej wielkości 1.25 GB pakiet był 112 razy szybszy niż narzędzie ZIP, kończąc operację w 1.3 sekundy w porównaniu do 146 sekund w przypadku ZIP. Rozmiar archiwum dla pakietu był o 23% mniejszy (194 MB dla pakietu i 253 MB dla ZIP). Dla porównania narzędzie tar zakończyło pakowanie w 4.7 sekundy bez kompresji i w 28.5 sekundy przy kompresji gzip, archiwizator RAR zakończył test w 27.5 sekundy, a 7z w 54.2 sekundy. Rozmiary archiwum wynosiły: tar.gz - 214 MB, RAR - 235 MB, 7z - 135 MB. Należy zauważyć, że pod względem szybkości rozpakowywania i losowego dostępu do plików Pack również wyprzedza inne archiwizatory, zużywając przy tym mniej pamięci RAM. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s szybciej ZIP 2.7 razy tar.gz: 214 MB, 28.5 sx 5.1 RAR: 235 MB, 27.5 sx 5.3 tar: 1345 MB, 4.7 sx 31 Opakowanie: 194 MB, 1.3 SX112

Nie ma wzmianki o wpływie pamięci podręcznej plików na wyniki testu. Prawdopodobnie niska prędkość ZIP-a wynika z kolejności uruchamiania testów bez względu na buforowanie danych w pamięci - test z ZIPem został uruchomiony z zimną pamięcią podręczną, a pozostałe testy z ciepłą pamięcią podręczną. W normalnych warunkach Zstandard wykazuje 3-5 razy większą prędkość kompresji niż zlib i 10 razy szybszą dekompresję, przy 15-XNUMX% wyższym poziomie kompresji.

Dodatek: Podobny pomysł przechowywania skompresowanych plików w formie blobów w bazie danych SQLite został wdrożony w 2014 roku w archiwizatorze sqlar, stworzonym przez programistów SQLite jako eksperyment mający na celu ocenę efektywności przechowywania blobów w SQLite. sqlar używa zlib do kompresji, a rozmiar pliku jest o około 2% większy niż narzędzie ZIP.

Źródło: opennet.ru

Dodaj komentarz