System kompresji OpenZL, który przewyższa Zstd i XZ pod względem szybkości i poziomu kompresji danych strukturalnych

Firma Meta* wprowadziła OpenZL, zestaw narzędzi do kompresji i dekompresji danych, który oferuje wyższy współczynnik kompresji i szybkość niż formaty Zstd i XZ. OpenZL został zaprojektowany z myślą o wydajnej kompresji ustrukturyzowanych zbiorów danych, takich jak te używane w uczeniu maszynowym, a także baz danych zawierających pola z różnymi powtarzającymi się typami informacji. OpenZL został napisany w języku C/C++ i jest udostępniany jako oprogramowanie open source na licencji BSD.

Podczas kompresji bazy danych zawierającej katalog gwiazd astronomicznych SAO, OpenZL zmniejszył rozmiar danych o współczynnik 2.06, podczas gdy algorytm zstd skompresował dane o współczynnik 1.31, a XZ o współczynnik 1.64. Co więcej, OpenZL przewyższył zstd pod względem szybkości kompresji o współczynnik 2 (203 MB/s w porównaniu do 115 MB/s), a XZ o współczynnik 65 (203 MB/s w porównaniu do 3.1 MB/s). Dekompresja w OpenZL była nieco wolniejsza niż w zstd (822 MB/s w porównaniu do 890 MB/s) i 27 razy szybsza niż w XZ.

 System kompresji OpenZL, który przewyższa Zstd i XZ pod względem szybkości i poziomu kompresji danych strukturalnych

OpenZL nie jest algorytmem ogólnego przeznaczenia i daje dobre wyniki tylko dla danych o znanej strukturze. Działanie OpenZL polega na adaptacyjnym generowaniu pakietu na podstawie podanego opisu danych. Generuje on kod kompresji zoptymalizowany pod kątem określonego formatu danych. Do dekompresji używany jest uniwersalny pakiet, kompatybilny ze wszystkimi generowanymi pakietami.

Pakowanie i rozpakowywanie odbywa się za pomocą jednego narzędzia „zli” lub biblioteki libopenzl. Struktura danych jest opisana w formie profili. Obejmuje to zestaw predefiniowanych profili opisujących typowe formaty przechowywania danych. Na przykład profil dla formatu CSV lub dane przechowywane jako tablica 64-bitowa. Kompresja jest tak prosta, jak wybranie profilu za pomocą polecenia „zli list-profiles” i uruchomienie procesu kompresji poleceniem „zli compress --profile profile_name”. Aby rozpakować, wystarczy uruchomić polecenie „zli decompress”.

W przypadku określonych formatów konieczne jest utworzenie profilu niestandardowego za pomocą polecenia „zli train”, które identyfikuje wzorce w danych i generuje profil o optymalnym poziomie kompresji. Za pomocą opcji „--pareto-frontier” utworzony profil można zoptymalizować w celu przyspieszenia kompresji lub dekompresji kosztem kompresji. Język SDDL (Simple Data Description Language) można wykorzystać do opisu złożonych formatów z zagnieżdżonymi strukturami oraz do definiowania układu formatów danych w obrębie struktur.

Metoda tworzenia optymalnych kompresorów opiera się na zestawie prymitywnych koderów, z których każdy jest najskuteczniejszy dla określonych typów danych i sekwencji. W celu kompresji tworzony jest skierowany acykliczny graf przetwarzania danych, w którym kodeki pełnią rolę węzłów, a warianty danych w przetworzonym formacie pełnią rolę krawędzi. W zależności od typu danych wejściowych, wybierany jest łańcuch kodeków, który optymalnie kompresuje przychodzący element danych. W tym układzie nagłówek pliku jest kompresowany za pomocą jednego kodeka, pole danych całkowitych za pomocą drugiego kodeka, pole licznika inkrementowanego za pomocą trzeciego kodeka, a pole danych ciągu za pomocą czwartego kodeka.

 System kompresji OpenZL, który przewyższa Zstd i XZ pod względem szybkości i poziomu kompresji danych strukturalnych


Źródło: opennet.ru

Dodaj komentarz