> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Режимы сжатия

> Режимы сжатия столбцов ClickHouse

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

Протокол ClickHouse поддерживает **сжатие блоков данных** с контрольными суммами.
Если не уверены, какой режим выбрать, используйте `LZ4`.
\`\`

<Tip>
  Подробнее о доступных [кодеках сжатия столбцов](/ru/reference/statements/create/table#column_compression_codec) и о том, как указывать их при создании таблиц или позже.
</Tip>

<div id="modes">
  ## Режимы
</div>

| значение | имя                | описание                                   |
| -------- | ------------------ | ------------------------------------------ |
| `0x02`   | [None](#none-mode) | Без сжатия, только контрольные суммы       |
| `0x82`   | LZ4                | Очень быстрый, хорошее сжатие              |
| `0x90`   | ZSTD               | Zstandard, довольно быстрый, лучшее сжатие |

И LZ4, и ZSTD созданы одним и тем же автором, но с разными компромиссами.

Из [бенчмарков Facebook](https://facebook.github.io/zstd/#benchmarks):

| имя               | коэффициент | кодирование | декодирование |
| ----------------- | ----------- | ----------- | ------------- |
| **zstd** 1.4.5 -1 | 2.8         | 500 MB/s    | 1660 MB/s     |
| **lz4** 1.9.2     | 2.1         | 740 MB/s    | 4530 MB/s     |

<div id="block">
  ## Блок
</div>

| поле             | тип     | описание                                                                                   |
| ---------------- | ------- | ------------------------------------------------------------------------------------------ |
| checksum         | uint128 | [Хэш](/ru/resources/develop-contribute/native-protocol/hash) от (header + compressed data) |
| raw\_size        | uint32  | Исходный размер без заголовка                                                              |
| data\_size       | uint32  | Размер несжатых данных                                                                     |
| mode             | byte    | Режим сжатия                                                                               |
| compressed\_data | binary  | Блок сжатых данных                                                                         |

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/qvDh3oxLPI7c74wx/images/data-compression/ch_compression_block.png?fit=max&auto=format&n=qvDh3oxLPI7c74wx&q=85&s=82f81bea928729689a49ec1602029955" size="md" alt="Диаграмма, иллюстрирующая структуру блока сжатия ClickHouse" width="2048" height="602" data-path="images/data-compression/ch_compression_block.png" />

Заголовок имеет вид (raw\_size + data\_size + mode), а raw\_size равен len(header + compressed\_data).

Контрольная сумма вычисляется как `hash(header + compressed_data)` с использованием [ClickHouse CityHash](/ru/resources/develop-contribute/native-protocol/hash).

<div id="none-mode">
  ## Режим None
</div>

Если используется режим *None*, `compressed_data` совпадает с исходными данными.
Режим без сжатия полезен для обеспечения дополнительной целостности данных с помощью контрольных сумм, поскольку
накладные расходы на хеширование пренебрежимо малы.
