Сжатие
В данном разделе описаны алгоритмы сжатия, поддерживаемые YTsaurus.
В YTsaurus пользовательские данные по умолчанию хранятся и передаются в сжатом виде.
Система самостоятельно производит сжатие:
- При записи в таблицу или файл данные разбиваются на части — чанки.
- Каждый чанк сжимается алгоритмом, указанным для данного файла или таблицы, и записывается на диск.
- Для передачи по сети данные считываются с диска уже в сжатом виде.
Просмотр алгоритма сжатия
В системе YTsaurus могут быть сжаты чанки, файлы и таблицы.
Алгоритм сжатия указан в атрибуте compression_codec
:
- Для чанков атрибут
compression_codec
задает алгоритм сжатия всех блоков чанка. Разные чанки внутри файла или таблицы могут быть сжаты с помощью разных алгоритмов. - Для таблиц и файлов
compression_codec
определяет алгоритм сжатия по умолчанию. Он будет использован, если для отдельных чанков файла или таблицы алгоритм не указан. Значениеcompression_codec
по умолчанию: для таблиц —lz4
, для файлов —none
(без сжатия).
Степень сжатия данных указана в атрибутах compressed_data_size
и uncompressed_data_size
чанка, таблицы или файла:
- Для чанков атрибут
uncompressed_data_size
показывает размер чанка до сжатия, атрибутcompressed_data_size
— размер чанка после сжатия. - Для таблиц и файлов атрибут
uncompressed_data_size
показывает суммарный размер несжатых данных всех чанков объекта, атрибутcompressed_data_size
— размер сжатых данных.
Статистика по алгоритмам сжатия, используемых в чанках таблицы, содержится в атрибуте compression_statistics
таблицы.
Изменение алгоритма сжатия
Чтобы изменить алгоритм сжатия существующей статической таблицы, установите новое значение атрибута compression_codec
. Затем запустите команду merge
, чтобы выполнить повторное сжатие чанков.
CLI
yt set //path/to/table/@compression_codec zstd_3
yt merge --src //path/to/table --dst //path/to/table --spec '{force_transform = %true}'
Чтобы изменить алгоритм сжатия динамической таблицы, установите новое значение атрибута compression_codec
. Затем выполните remount-table
. Старые чанки со временем будут повторно сжаты в процессе компактификации. Скорость сжатия зависит от объема таблицы, скорости записи, настроек фоновой компактификации.
CLI
yt set //path/to/table/@compression_codec zstd_3
yt remount-table //path/to/table
Если в таблицу идёт постоянная запись, как правило, нет необходимости в форсированном сжатии. Если требуется форсировать сжатие, используйте forced compaction
.
Поддерживаемые алгоритмы сжатия
Алгоритм сжатия | Описание | Скорость сжатия/распаковки | Степень сжатия |
---|---|---|---|
none |
Без сжатия. | - | - |
snappy |
Подробнее об алгоритме snappy. | +++ | +- |
zlib_[1..9] |
Система YTsaurus поддерживает все 9 уровней. Чем больше уровень, тем сильнее и тем медленнее сжимаются данные. Подробнее об алгоритме zlib. | ++ | ++ |
lz4 |
Алгоритм сжатия по умолчанию для таблиц. Подробнее об алгоритме lz4. | +++ | + |
lz4_high_compression |
Алгоритм lz4 c включенной опцией high_compression . Сжимает эффективнее, но существенно медленнее. По степени сжатия уступает zlib . |
++ | ++- |
zstd_[1..21] |
Подробнее об алгоритме zstd. | ++ | ++ |
brotli_[1..11] |
Данный алгоритм рекомендуется к использованию для данных, которые не являются временными. Рекомендуется использовать уровни 3, 5 и 8 — они имеют лучшее соотношение объема и скорости. Подробнее об алгоритме brotli. | ++ | +++ |
lzma_[0..9] |
Подробнее об алгоритме lzma. | + | +++ |
bzip2_[1..9] |
Подробнее об алгоритме bzip2. | ++ | ++ |
Рекомендации
- Для файлов, которые используются в операции в виде симлинков на чанки, сжатие чаще всего не применяется.
lz4
часто используется для актуальных данных. Алгоритм обеспечивает высокую скорость сжатия и распаковки при приемлемом коэффициенте сжатия.- Когда необходимо максимальное сжатие, а длительное время работы является приемлемым, часто используется
brotli_8
. - Для операций, состоящих из малого количества джобов, например,
final sort
илиsorted merge
, рекомендуется добавить отдельную стадию обработки — сжатие данных в операции merge с большим числом джобов.
Внимание
Хотя алгоритмы с сильным сжатием (zlib
, zstd
, brotli
) позволяют экономить место на диске, их скорость сжатия на порядок ниже, чем у алгоритма по умолчанию (lz4
). Использование алгоритмов с сильным сжатием может привести к значительному росту времени выполнения операций. Рекомендуется использовать их только для таблиц, которые занимают много места, но редко меняются.
Сравнение алгоритмов сжатия
Способ, описанный ниже, работает только для статических таблиц.
Чтобы определить, какой алгоритм лучше подойдет для определенной таблицы, запустите yt run-compression-benchmarks TABLE
. Из таблицы будет взят сэмпл, по умолчанию равный 1 ГБ. Он будет сжат всеми алгоритмами.
После завершения операции вы увидите codec/cpu/encode
, codec/cpu/decode
и compression_ratio
для каждого алгоритма. Подробнее смотрите в разделе Статистики джобов.
Для алгоритмов с несколькими уровнями сжатия по умолчанию используются минимальный, средний и максимальный уровни.
Чтобы получить результаты по всем уровням, используйте опцию --all-codecs
.
CLI
yt run-compression-benchmarks //home/dev/tutorial/compression_benchmark_data
[
{
"codec": "brotli_1",
"codec/cpu/decode": 2103,
"codec/cpu/encode": 2123,
"compression_ratio": 0.10099302059669339
},
...
{
"codec": "brotli_11",
"codec/cpu/decode": "Not launched",
"codec/cpu/encode": "Timed out", # сжатие не успело завершиться за стандартный --time-limit-sec (200)
"compression_ratio": "Timed out"
},
...
{
"codec": "none",
"codec/cpu/decode": 0,
"codec/cpu/encode": 247,
"compression_ratio": 1.0
},
...
{
"codec": "zstd_11",
"codec/cpu/decode": 713,
"codec/cpu/encode": 15283,
"compression_ratio": 0.07451278201257201
},
...
]