Вышел фреймворк 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» созданный профиль можно модернизировать в сторону ускорения упаковки или распаковки, ценой снижения уровня сжатия. Для описания сложных форматов со вложенными структурами и определения раскладки форматов данных в структурах может применяться язык SDDL (Simple Data Description Language).

Метод создания оптимальных упаковщиков основан на применении набора примитивных кодировщиков, каждый из которых наиболее эффективен для отдельных типов и последовательностей данных. Для сжатия формируется ориентированный ациклический граф обработки данных, узлами которого являются кодеки, а рёбрами — варианты данных в обрабатываемом формате. В зависимости от поступающего на вход типа данных выбирается цепочка кодеков, оптимально сжимающих поступивший элемент данных. При подобной организации заголовок файла сжимается одним кодеком, поле с целочисленными данными — вторым, поле с увеличивающимся счётчиком — третьим, а поле со строковыми данными — четвёртым.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии