Система стиснення OpenZL, що випереджає Zstd і XZ за швидкістю та рівнем стиснення структурованих даних

Компанія Meta* представила інструментарій для стиснення та розпакування даних OpenZL, що в порівнянні з форматами Zstd і XZ демонструє більш високий рівень стиснення та швидкість роботи. OpenZL розроблений для ефективного стиснення структурованих наборів даних, наприклад, що застосовуються при машинному навчанні, а також сховищ, що містять поля з різними типами інформації, що повторюються. Код OpenZL написано на C/C++ та відкрито під ліцензією BSD.

При стисненні БД з астрономічним каталогом зірок SAO інструментарій OpenZL дозволив скоротити розмір даних у 2.06 рази, тоді як алгоритм zstd стиснув інформацію в 1.31 рази, а XZ у 1.64 рази. При цьому за швидкістю стиснення OpenZL випередив zstd вдвічі (203 MB/s проти 115 MB/s), а XZ — у 65 разів (203 MB/s проти 3.1 MB/s). Розпакування в OpenZL виявилося трохи повільніше zstd (822 MB/s проти 890 MB/s) і в 27 швидше XZ.

 Система стиснення OpenZL, що випереджає Zstd і XZ за швидкістю та рівнем стиснення структурованих даних

OpenZL не є алгоритмом загального призначення і показує хороші результати лише для даних із заздалегідь відомою структурою. Робота OpenZL зводиться до адаптивної генерації пакувальника на основі переданого опису даних. У результаті формується код стиснення, оптимізований для конкретного формату даних. Для розпакування застосовується універсальний розпакувальник, сумісний з усіма пакувальниками, що генеруються.

Упаковка та розпакування здійснюється за допомогою однієї утиліти «zli» або бібліотеки libopenzl. Структура даних описується як профілів. До складу вже входить набір певних профілів, що описують типові формати зберігання. Наприклад, профіль для формату CSV або даних, що зберігаються у формі масиву 64-розрядних чисел. Стиснення зводиться до вибору профілю командою "zli list-profiles" і запуску процесу упаковки командою "zli compress-profile имя_профиля". Для розпакування достатньо запустити "zli decompress".

Для специфічних форматів потрібно сформувати власний профіль, використовуючи команду «zli train», яка виявляє закономірності даних і формує профіль з оптимальним рівнем стиснення. Використовуючи опцію «pareto-frontier» створений профіль можна модернізувати у бік прискорення упаковки або розпакування, ціною зниження рівня стиснення. Для опису складних форматів із вкладеними структурами та визначення розкладки форматів даних у структурах може застосовуватися мова SDDL (Simple Data Description Language).

Метод створення оптимальних пакувальників заснований на застосуванні набору примітивних кодувальників, кожен з яких найбільш ефективний для окремих типів та послідовностей даних. Для стиснення формується орієнтований ациклічний граф обробки даних, вузлами якого є кодеки, а ребрами варіанти даних в оброблюваному форматі. Залежно від надходить на вхід типу даних вибирається ланцюжок кодеків, оптимально стискають елемент даних, що надійшов. При подібній організації заголовок файлу стискається одним кодеком, поле з цілими даними - другим, поле з лічильником, що збільшується, - третім, а поле з рядковими даними - четвертим.

 Система стиснення OpenZL, що випереджає Zstd і XZ за швидкістю та рівнем стиснення структурованих даних


Джерело: opennet.ru

Додати коментар або відгук