Вышел фреймворк OpenZL 0.1.0, предназначенный для создания компрессоров данных без потерь
Представлена версия фреймворка OpenZL 0.1.0. Проект написан на C и C++, распространяется по лицензии BSD и предназначен для создания компрессоров данных без потерь. В решение также входит демонстрационная консольная утилита zli.
По сравнению с форматами Zstd и XZ демонстрирующими более высокий уровень сжатия и скорость работы, OpenZL разработан для эффективного сжатия структурированных наборов данных, например применяемых при машинном обучении, а также хранилищ, содержащих поля с различными повторяющимися типами информации.
По информации OpenNET, проект OpenZL не является алгоритмом общего назначения и показывает хорошие результаты только для данных с заранее известной структурой. Работа OpenZL сводится к адаптивной генерации упаковщика на основе переданного описания данных. В результате формируется код для сжатия, оптимизированный для конкретного формата данных. Для распаковки применяется универсальный распаковщик, совместимый со всеми генерируемыми упаковщиками.
Упаковка и распаковка осуществляется при помощи одной утилиты zli или библиотеки libopenzl. Структура данных описывается в виде профилей. В состав уже входит набор предопределённых профилей, описывающих типовые форматы хранения. Например, профиль для формата CSV или данных, хранимых в форме массива 64-разрядных чисел. Сжатие сводится к выбору профиля командой zli list‑profiles и запуску процесса упаковки командой zli compress ‑profile имя_профиля. Для распаковки достаточно запустить zli decompress.
Для специфичных форматов требуется сформировать собственный профиль, используя команду zli train, которая выявляет закономерности в данных и формирует профиль с оптимальным уровнем сжатия. Используя опцию "‑pareto‑frontier" созданный профиль можно модернизировать
Читать на habr.com