Нужно мне было ужать данные, примерно 50 гигов, вот понял что архиватор zip будет ужимать часа 3 что-ли.
Решил что ждать столько не хочу и решил посмотреть, что там по скоростным архиваторам и...
Нашел, Zstandard/ZSTD вообще классная штука, упаковал за 30 минут.)
Zstandard — современный алгоритм сжатия, разработанный Facebook, ныне Meta.
Обычно используется расширение:
Например:
Сжатие:
Распаковка:
или:
---
# Главное преимущество ZSTD — скорость
Zstandard проектировался таким образом, чтобы обеспечить очень хорошее соотношение:
Именно поэтому он получил широкое распространение в современных системах.
На стандартных уровнях ZSTD обычно способен сжимать данные значительно быстрее GZIP, а распаковывать — особенно быстро.
Это важно для:
Если архив имеет размер десятки или сотни гигабайт, разница во времени может быть весьма существенной.
---
# Уровни сжатия ZSTD
ZSTD позволяет выбирать уровень сжатия.
Например:
Очень быстрое сжатие.
Или:
Один из разумных вариантов по умолчанию.
Можно использовать более высокий уровень:
или:
На высоких уровнях компрессор тратит значительно больше процессорного времени, пытаясь уменьшить размер файла.
У ZSTD существуют даже уровни:
Но использовать максимальный уровень далеко не всегда имеет смысл.
Разница в размере может составлять лишь несколько процентов, а время сжатия увеличиться во много раз.
---
# TAR.ZST
Для каталогов ZSTD обычно используется вместе с TAR.
Получается:
Создание архива:
Распаковка:
---
# Преимущества tar.zst
## Очень высокая скорость распаковки
Это одно из главных преимуществ ZSTD.
Для серверных задач скорость восстановления резервной копии иногда важнее, чем скорость её создания.
Например, если имеется архив:
размером несколько десятков гигабайт, его распаковка может заметно нагружать процессор.
Эквивалентный:
зачастую распаковывается существенно быстрее.
---
## Хорошая степень сжатия
На разумных уровнях ZSTD способен одновременно обеспечивать:
Поэтому сегодня использование GZIP не всегда является оптимальным выбором.
---
## Хорошо подходит для серверных резервных копий
Например:
Такой вариант хорошо подходит для:
---
## Многопоточное сжатие
ZSTD умеет использовать несколько потоков.
Например:
Для TAR можно использовать конвейер:
Здесь:
создаёт поток данных, а:
сжимает его с использованием нескольких CPU.
На многоядерных серверах это может дать очень большую прибавку скорости.
---
# Минусы ZSTD
## Совместимость хуже ZIP и GZIP
На современных Linux-системах с ZSTD обычно никаких проблем нет.
Но на старых системах программа:
может отсутствовать.
Например, вместо обычного:
может потребоваться предварительно установить пакет:
или:
Для серверной среды это обычно не проблема, но при отправке архива обычному пользователю ZIP гораздо удобнее.
---
##
Это частая ошибка.
Файл:
обычно представляет собой один сжатый поток.
Если нужно сохранить:
правильнее сделать:
То есть:
---
# ZIP против TAR.GZ против TAR.ZST
Если сильно упростить сравнение, получится примерно следующая картина:
Краткий итог
Если сформулировать максимально просто:
ZIP
↓
максимальная совместимость
TAR.GZ
↓
классический универсальный Linux-вариант
TAR.ZST
↓
современный быстрый вариант для Linux и серверов
Для отправки небольшого архива пользователю я бы выбрал:
.zip
Для распространения исходников с максимальной совместимостью:
.tar.gz
Для резервного копирования десятков или сотен гигабайт на современных серверах:
.tar.zst
Именно tar.zst сейчас выглядит особенно привлекательно там, где важны скорость создания и, в особенности, скорость восстановления больших архивов.
Решил что ждать столько не хочу и решил посмотреть, что там по скоростным архиваторам и...
Нашел, Zstandard/ZSTD вообще классная штука, упаковал за 30 минут.)
Zstandard — современный алгоритм сжатия, разработанный Facebook, ныне Meta.
Обычно используется расширение:
Код:
.zst
Например:
Код:
database.sql.zst
Сжатие:
Bash:
zstd database.sql
Распаковка:
Bash:
unzstd database.sql.zst
или:
Bash:
zstd -d database.sql.zst
---
# Главное преимущество ZSTD — скорость
Zstandard проектировался таким образом, чтобы обеспечить очень хорошее соотношение:
Код:
скорость <-> степень сжатия
Именно поэтому он получил широкое распространение в современных системах.
На стандартных уровнях ZSTD обычно способен сжимать данные значительно быстрее GZIP, а распаковывать — особенно быстро.
Это важно для:
- серверов;
- резервного копирования;
- логов;
- баз данных;
- CI/CD;
- контейнеров;
- больших архивов.
Если архив имеет размер десятки или сотни гигабайт, разница во времени может быть весьма существенной.
---
# Уровни сжатия ZSTD
ZSTD позволяет выбирать уровень сжатия.
Например:
Bash:
zstd -1 file
Очень быстрое сжатие.
Или:
Bash:
zstd -3 file
Один из разумных вариантов по умолчанию.
Можно использовать более высокий уровень:
Bash:
zstd -10 file
или:
Bash:
zstd -19 file
На высоких уровнях компрессор тратит значительно больше процессорного времени, пытаясь уменьшить размер файла.
У ZSTD существуют даже уровни:
Код:
--ultra -20
--ultra -21
--ultra -22
Но использовать максимальный уровень далеко не всегда имеет смысл.
Разница в размере может составлять лишь несколько процентов, а время сжатия увеличиться во много раз.
---
# TAR.ZST
Для каталогов ZSTD обычно используется вместе с TAR.
Получается:
Код:
.tar.zst
Создание архива:
Bash:
tar -cf - /var/www | zstd -T0 -3 -o backup.tar.zst
Распаковка:
Bash:
zstd -dc backup.tar.zst | tar -xf -
# Преимущества tar.zst
## Очень высокая скорость распаковки
Это одно из главных преимуществ ZSTD.
Для серверных задач скорость восстановления резервной копии иногда важнее, чем скорость её создания.
Например, если имеется архив:
Код:
backup.tar.gz
размером несколько десятков гигабайт, его распаковка может заметно нагружать процессор.
Эквивалентный:
Код:
backup.tar.zst
зачастую распаковывается существенно быстрее.
---
## Хорошая степень сжатия
На разумных уровнях ZSTD способен одновременно обеспечивать:
- высокую скорость;
- хорошее сжатие;
- очень быструю декомпрессию.
Поэтому сегодня использование GZIP не всегда является оптимальным выбором.
---
## Хорошо подходит для серверных резервных копий
Например:
Bash:
tar --zstd -cf backup.tar.zst /var/www/
Такой вариант хорошо подходит для:
- резервных копий сайтов;
- исходного кода;
- файлов проектов;
- логов;
- файловых хранилищ.
---
## Многопоточное сжатие
ZSTD умеет использовать несколько потоков.
Например:
Bash:
zstd -T0 file
-T0 означает использование всех доступных процессорных ядер.Для TAR можно использовать конвейер:
Bash:
tar -cf - directory/ | zstd -T0 -3 -o backup.tar.zst
Здесь:
Код:
tar
создаёт поток данных, а:
Код:
zstd
сжимает его с использованием нескольких CPU.
На многоядерных серверах это может дать очень большую прибавку скорости.
---
# Минусы ZSTD
## Совместимость хуже ZIP и GZIP
На современных Linux-системах с ZSTD обычно никаких проблем нет.
Но на старых системах программа:
Bash:
zstd
может отсутствовать.
Например, вместо обычного:
Bash:
tar -xzf backup.tar.gz
может потребоваться предварительно установить пакет:
Bash:
apt install zstd
или:
Bash:
dnf install zstd
Для серверной среды это обычно не проблема, но при отправке архива обычному пользователю ZIP гораздо удобнее.
---
##
.zst — не обязательно архивЭто частая ошибка.
Файл:
Код:
backup.zst
обычно представляет собой один сжатый поток.
Если нужно сохранить:
Код:
folder/
image.jpg
config.ini
database.sql
правильнее сделать:
Код:
backup.tar.zst
То есть:
Код:
TAR -> ZSTD
---
# ZIP против TAR.GZ против TAR.ZST
Если сильно упростить сравнение, получится примерно следующая картина:
| Характеристика | ZIP | TAR.GZ | TAR.ZST |
|---|---|---|---|
| Совместимость | Отличная | Отличная | Хорошая |
| Linux | Хорошо | Отлично | Отлично |
| Windows без дополнительного ПО | Отлично | Средне | Хуже |
| Скорость сжатия | Средняя | Средняя/низкая | Высокая |
| Скорость распаковки | Средняя | Средняя | Очень высокая |
| Степень сжатия | Средняя | Хорошая | Хорошая/очень хорошая |
| Многопоточность | Зависит от реализации | Обычно нет | Да |
| Сохранение Unix-метаданных | Ограниченно | Отлично | Отлично |
| Извлечение отдельных файлов | Удобно | Менее удобно | Менее удобно |
| Большие серверные архивы | Средне | Хорошо | Отлично |
| Передача обычному пользователю | Отлично | Хорошо | Средне |
Краткий итог
Если сформулировать максимально просто:
ZIP
↓
максимальная совместимость
TAR.GZ
↓
классический универсальный Linux-вариант
TAR.ZST
↓
современный быстрый вариант для Linux и серверов
Для отправки небольшого архива пользователю я бы выбрал:
.zip
Для распространения исходников с максимальной совместимостью:
.tar.gz
Для резервного копирования десятков или сотен гигабайт на современных серверах:
.tar.zst
Именно tar.zst сейчас выглядит особенно привлекательно там, где важны скорость создания и, в особенности, скорость восстановления больших архивов.
