The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

09.10.2025 12:59

Компания 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 не является алгоритмом общего назначения и показывает хорошие результаты только для данных с заранее известной структурой. Работа OpenZL сводится к адаптивной генерации упаковщика на основе переданного описания данных. В результате формируется код для сжатия, оптимизированный для конкретного формата данных. Для распаковки применяется универсальный распаковщик, совместимый со всеми генерируемыми упаковщиками.

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

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

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



  1. Главная ссылка к новости (https://engineering.fb.com/202...)
  2. OpenNews: Facebook опубликовал реализацию алгоритма сжатия Zstandard 1.0
  3. OpenNews: Компания Apple открыла реализацию алгоритма сжатия без потерь LZFSE
  4. OpenNews: Компания Google открыла код Draco, библиотеки для эффективного сжатия 3D-графики
  5. OpenNews: Библиотеки сжатия LZHAM и Crunch переведены в общественное достояние
  6. OpenNews: Автор LZ4 представил новый быстрый и эффективный алгоритм сжатия ZSTD
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64019-openzl
Ключевые слова: openzl, compress, zstd, xz
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (37) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 13:01, 09/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Так все красочно и вкусно. А закладки с бэкдорами прилагаются?
     
     
  • 2.3, анонимно (?), 13:09, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +6 +/
    конечно, именно поэтому код открыт, ага
     
     
  • 3.9, анон (?), 13:31, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    то что код открыт, не означает, что в нем найдут закладку
     
     
  • 4.28, Эффективный менеджер (?), 14:34, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    То что в нем найдут закладку равна коэффициенту популярности языка программирования - Виликая Python лучше всех!
     
  • 3.11, Аноним (1), 13:41, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    xz тоже был открыт, ага
     
     
  • 4.20, Аноним (20), 14:02, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Но Jia Tan в проектировании формата участия не принимал и изначально код не писал. Решил лишь подрихтовать сбочный скрипт.
     
  • 2.4, Аноним (4), 13:11, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    сам посмотрим - https://github.com/facebook/openzl

     
     
  • 3.12, Аноним (1), 13:42, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    xz тоже был открыт
     
     
  • 4.22, fz (?), 14:07, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    как страшно жить то...
    шарахайтесь теперь от любого кода
     
     
  • 5.38, Аноним (38), 16:12, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Не от любого, а от даров данайцев.
     
  • 4.23, JakauBahuslau (?), 14:08, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    В xz закладку нашли за две тестовые версии, так что если там действительно что-то есть, то тоже быстро найдут
     
     
  • 5.31, Zzz (??), 14:41, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    К сожалению, нашли случайно из-за CPU overload. Если б китайцы аккуратнее свой имплант написали, то далеко не факт, что обнаружили быстро.
     
     
  • 6.33, Аноним (33), 14:49, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это "поляки" были ж, при чём тут китайцы?
     
  • 5.32, Аноним (32), 14:43, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Потому что васян с кор2дуба заметил как проц грузили типичные задачи с зксзед и обратился к профи из Майкрософт,который и выяснил в чем дело? Великий опенсурс!
     

  • 1.6, Мемоним (?), 13:16, 09/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Simple Data Description Language

    Интересно, чем им Kaitai Struct не угодил. По описанию вроде почти одно и то же.

     
     
  • 2.8, Жироватт (ok), 13:25, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Там есть крайне фатальный недостаток – его писали не они!
     
     
  • 3.25, Аноним (-), 14:30, 09/10/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.14, anonymous (??), 13:53, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Katai Struct до сих пор не умеет в (де)сериализацию. Фатальный недостаток.
     
     
  • 3.17, Аноним (17), 13:58, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    ну вот, могли бы исправить :)
     
     
  • 4.27, Аноним (-), 14:33, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Могли.
    Но это нужно идти к каким-то васянам, предлагать свои патчи, оформлять как тем хочется...
    Или сделать свое, в котором ты сам себе хозяин.
     
     
  • 5.37, Аноним (17), 16:05, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    да, не посмотрел, что у kaitai struct неудобная лицензия
     
  • 3.34, Мемоним (?), 15:39, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Я имел в виду только язык описания структур. А генератор могли бы свой уже писать, хоть с сериализацией, хоть без. Всяко проще чем с нуля изобретать.
     

  • 1.7, Жироватт (ok), 13:23, 09/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Т.е. её ещё и обучать надо? Перед упаковкой.
    Файлы как набор структурированных данных жуёт или только жмёт один файл как хранилище?

    > команду "zli train"

    Результат СЕЙЧАС насколько зависит от версии и от машины, на которой формируется профиль?

     
  • 1.10, Аноним (10), 13:40, 09/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А чего не сравнили с непрерывном методом сжатия (solid archive) rar архивов? Он уже отлично сжимал повторяющиеся данные лет 25 назад.

    p.s. а лучше бы вообще уже выкупили rar у Рошала и сделали бы алгоритм открытым и бесплатным.

     
     
  • 2.16, ахахахаха (?), 13:58, 09/10/2025 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 2.19, Эффективный менеджер (?), 14:01, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А может наоборот? Из открытого достояния приватизировать в частное владение.
    Я бы запантетовал колесо, алфавит и т.д. А то ишь, пользуетесь бесплатно! А разработчики чем будут питаться? Им тоже надо на хлеб с маслом!!1!

    Нажо выдать ЖКХ право дарить людей! Не нравиться - прокладыватйте труб к своему дому сами! А платить по раздельному тарифу, в ванной - по аналогии с сотовыми оператороми, покупаете "пакет" литров.

    Тех в провайдерам интернета надо выдать право банить людей за блокировку рекламы, торренты и подозрительую активность... А ещё лучше сделать реестр недобосовечных лиц.

     
  • 2.24, Аноним (32), 14:17, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Зачем покупать? Игорь Павлов смог с 7зип реализовать свой них синдром. Дерзайте и вы.
     
  • 2.30, Аноним (33), 14:41, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    У него нет дедупликации по факту, только частичная. На и в целом zpaq поинтересней, он лучше комбинации lzss с ppmd. Lrzip, к примеру, действительно дедуплицирует, и легко может обойти и 7z, и, тем более, rar.
     
  • 2.36, Аноним (36), 15:52, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > А чего не сравнили с непрерывном методом сжатия (solid archive) rar архивов? Он уже отлично сжимал повторяющиеся данные лет 25 назад.

    Много кто отлично сжимает, мало кто умеет делать это БЫСТРО.

    > p.s. а лучше бы вообще уже выкупили rar у Рошала и сделали бы алгоритм открытым и бесплатным.

    Это вот сейчас к кому обращено было?

     

  • 1.13, Аноним (13), 13:47, 09/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну вообще-то да, если знать структуру данных можно пожать гораздо лучше чем общим алгоритмом.

    Например, взять 12-битные изображения. Там тупо верхних 4-бита каждый второй байт забит нулями. Из четырех байт тривиально получается три. Не говоря уже о разностном кодировании, потому что каждое последующее значение лежит довольно таки близко к предыдущему. Так вот - лет 10-15 назад редко какой архиватор умел пожимать такие файлы. Потом появился zstd, который с этим справляется лучше, но и он до ужатия до 75% от оригинала не дотягивает. Позже появился jxl (lossless jpeg)- он умел таки пожимать лучше чем до тривиальных 75%. Но данные к тому моменту и так уже лежали на zfs / zstd.

    Топик как-раз движется в этом направлении - похоже ему будет достаточно сказать что файлы надо рассматривать как последовательность word (16-bit), и кодировать их разность.

     
  • 1.15, Аноним (15), 13:54, 09/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Отлично. Ждём в BTRFS.
     

  • 1.26, Аноним (26), 14:31, 09/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Бинарник в разы больше, чем у zstd или 7-zip

    $ ls -l /usr/bin/zli
    -rwxr-xr-x 1 root root 5494744 окт  9 18:20 /usr/bin/zli

     
     
  • 2.29, Аноним (26), 14:34, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    $ zli --version
    zstrong-cli version 0.1

    $ zli list-profiles
    Available profiles:
      -| csv = CSV. Pass optional non-comma separator with --profile-arg <char>.
      -| le-i16 = Little-endian signed 16-bit data
      -| le-i32 = Little-endian signed 32-bit data
      -| le-i64 = Little-endian signed 64-bit data
      -| le-u16 = Little-endian unsigned 16-bit data
      -| le-u32 = Little-endian unsigned 32-bit data
      -| le-u64 = Little-endian unsigned 64-bit data
      -| parquet = Parquet in the canonical format (no compression, plain encoding)
      -| pytorch = Pytorch model generated from torch.save(). Training is not supported.
      -| sao = SAO format from the Silesia corpus
      -| sddl = Data that can be parsed using the Simple Data Description Language. Pass a path to the data description file with --profile-arg.
      -| serial = Serial data (aka raw bytes)

     

  • 1.35, Аноним (35), 15:40, 09/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Жаль что не на Р_асте, значит будут CVE и прочие сишные прелести.
     
     
  • 2.39, Соль земли2 (?), 16:18, 09/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    безопастность и быстродействие не очень дружат
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру