System kompresji OpenZL, szybszy niż Zstd i XZ przy kompresji danych strukturalnych

Firma Meta* wprowadziła narzędzie do kompresji i dekompresji danych OpenZL, które w porównaniu z formatami Zstd i XZ oferuje wyższy poziom kompresji oraz szybkość działania. OpenZL został zaprojektowany do efektywnej kompresji zorganizowanych zbiorów danych, takich jak te stosowane w uczeniu maszynowym, a także magazynów zawierających pola z różnymi powtarzającymi się typami informacji. Kod OpenZL napisany jest w języku C/C++ i jest udostępniony na licencji BSD.

Podczas kompresji bazy danych z astronomicznym katalogiem gwiazd SAO, narzędzie OpenZL pozwoliło zmniejszyć rozmiar danych o 2,06 razy, podczas gdy algorytm zstd skompresował informacje o 1,31 razy, a XZ o 1,64 razy. Przy tym, w kwestii szybkości kompresji, OpenZL przewyższył zstd dwukrotnie (203 MB/s w porównaniu do 115 MB/s), a XZ w 65 razy (203 MB/s w porównaniu do 3,1 MB/s). Dekompresja w OpenZL okazała się nieznacznie wolniejsza od zstd (822 MB/s w porównaniu do 890 MB/s) i 27 razy szybsza od XZ.

System kompresji OpenZL, szybszy niż Zstd i XZ przy kompresji danych strukturalnych

OpenZL nie jest algorytmem ogólnego zastosowania i dobrze sprawdza się tylko w przypadku danych o z góry znanej strukturze. Działanie OpenZL polega na adaptacyjnej generacji pakera na podstawie przekazanego opisu danych. W rezultacie powstaje kod do kompresji, zoptymalizowany dla konkretnego formatu danych. Do dekompresji stosowany jest uniwersalny dekompresor, zgodny z wszystkimi generowanymi pakerami.

Pakowanie i dekompresja odbywa się za pomocą jednego narzędzia 'zli' lub biblioteki libopenzl. Struktura danych jest opisana w postaci profili. Zestaw już zawiera predefiniowane profile, opisujące typowe formaty przechowywania. Na przykład profil dla formatu CSV lub danych przechowywanych w formie tablicy liczb 64-bitowych. Kompresja sprowadza się do wyboru profilu komendą 'zli list-profiles' i uruchomienia procesu pakowania komendą 'zli compress —profile nazwa_profilu'. Do dekompresji wystarczy uruchomić 'zli decompress'.

Dla specyficznych formatów należy utworzyć własny profil, używając polecenia „zli train”, które identyfikuje wzorce w danych i tworzy profil z optymalnym poziomem kompresji. Korzystając z opcji „—pareto-frontier”, stworzony profil można ulepszyć w kierunku przyspieszenia pakowania lub rozpakowywania, kosztem obniżenia poziomu kompresji. Do opisywania złożonych formatów ze zagnieżdżonymi strukturami i określania układu formatów danych w strukturach można zastosować język SDDL (Simple Data Description Language).

Metoda tworzenia optymalnych kompresorów opiera się na zastosowaniu zestawu prymitywnych kodowników, z których każdy jest najbardziej efektywny dla poszczególnych typów i sekwencji danych. Dla kompresji tworzy się skierowany acykliczny graf przetwarzania danych, którego węzłami są kodeki, a krawędziami — warianty danych w przetwarzanym formacie. W zależności od rodzaju danych, które trafiają na wejście, wybierana jest sekwencja kodeków, optymalnie kompresujących otrzymany element danych. Przy takiej organizacji nagłówek pliku jest kompresowany jednym kodekiem, pole z danymi całkowitymi — drugim, pole z rosnącym licznikem — trzecim, a pole z danymi tekstowymi — czwartym.

System kompresji OpenZL, szybszy niż Zstd i XZ przy kompresji danych strukturalnych


Źródło: opennet.ru
Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster