Ян Колле (Yann Collet), автор эталонной реализации алгоритма LZ4, представил новый алгоритм сжатия Z-standard (ZSTD), сочетающий высокую скорость кодирования и декодирования с хорошей эффективностью сжатия. Алгоритм предназначен для использования в повседневном обиходе, но он не рассчитан на достижение рекордных скоростей, свойственных LZ4, или максимальных уровней сжатия, обеспечиваемых в LZMA и ZPAQ. По сравнению с обеспечивающими рекордные показатели системами, предложенный алгоритм не является однобоким (скорость за счёт степени сжатия или степень сжатия за счёт скорости) и обеспечивает отличное соотношение скорости и эффективности сжатия. Библиотека с эталонной реализацией алгоритма распространяется под лицензией BSD.
Название Степень сжатия Скорость кодирования Скорость декодирования
MB/s MB/s
zlib 1.2.8 -6 3.099 18 275
ZSTD 2.872 201 498
zlib 1.2.8 -1 2.730 58 250
LZ4 HC r127 2.720 26 1720
QuickLZ 1.5.1b6 2.237 323 373
LZO 2.06 2.106 351 510
Snappy 1.1.0 2.091 238 964
LZ4 r127 2.084 370 1590
LZF 3.6 2.077 220 502

Скорость декодирования в ZSTD составляет примерно 500 Мб/сек на одном ядре процессора Intel Core i5-4300U (1.9 GHz) при скорости кодирования на уровне 200 Мб/сек, что позволяет использовать данный алгоритм в сценариях по обработке данных в режиме реального времени. Кроме того, как и в LZ4, для ситуаций, когда данные сжимаются один раз и многократно распаковываются, в ZSTD предусмотрен режим форсированного сжатия, при котором достигается более высокий коэффициент сжатия за счёт увеличения времени упаковки.

Примечательной особенностью ZSTD также является возможность настройки потребления памяти, что позволяет использовать ZSTD на встраиваемых системах с небольшим размером ОЗУ или на серверах, одновременно обрабатывающих большое число сжатых потоков. Для декодирования необходимо заполнение таблиц трансформации, размер которых может быть настроен от 2.5 до 20 Кб, а также требуется выделение памяти под буфер с окном сжатия, который по умолчанию составляет 512 Кб, но может быть по желанию уменьшен до нескольких килобайт или увеличен до гигабайт (чем больше размер окна - тем выше уровень сжатия). В процессе сжатия данных дополнительно требуется выделение памяти под буфер сортировки, который по умолчанию составляет 128 Кб, но может быть произвольно уменьшен или увеличен.

На приведённом ниже графике отражены параметры эксперимента по сжатию файла, передаче потока по сети и его распаковке на другом конце соединения. Первый график показывает соотношение времени выполнения операции (ось Y) к пропускной способности канала связи в Мб/сек (ось X). Второй график отличается тем, что вместо времени используется относительное ранжирование алгоритмов, при котором за 1 принят лучший результат, а остальные показатели показаны в процентном соотношении к нему.

По графику видно, что LZ4 остаётся лидером на скоростях выше 50 Мб/сек, а ZSTD демонстрирует лучшие результаты на скоростях от 0.5 Мб/сек до 50 Мб/сек.

Источник: http://www.opennet.ru/opennews/art.shtml?num=41534