> ## 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.

# Modos de compressão

> Modos de compressão de colunas no ClickHouse

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

O protocolo do ClickHouse oferece suporte à compressão de **blocos de dados** com checksum.
Use `LZ4` se não tiver certeza de qual modo escolher.
\`\`

<Tip>
  Saiba mais sobre os [codecs de compressão de colunas](/pt-BR/reference/statements/create/table#column_compression_codec) disponíveis e especifique-os ao criar suas tabelas ou posteriormente.
</Tip>

<div id="modes">
  ## Modos
</div>

| valor  | nome               | descrição                                     |
| ------ | ------------------ | --------------------------------------------- |
| `0x02` | [None](#none-mode) | Sem compressão, apenas checksums              |
| `0x82` | LZ4                | Extremamente rápido, boa compressão           |
| `0x90` | ZSTD               | Zstandard, bastante rápido, melhor compressão |

Tanto o LZ4 quanto o ZSTD foram criados pelo mesmo autor, mas com trade-offs diferentes.
Segundo [benchmarks do Facebook](https://facebook.github.io/zstd/#benchmarks):

| nome              | taxa | codificação | decodificação |
| ----------------- | ---- | ----------- | ------------- |
| **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">
  ## Bloco
</div>

| campo            | tipo    | descrição                                                                                           |
| ---------------- | ------- | --------------------------------------------------------------------------------------------------- |
| checksum         | uint128 | [Hash](/pt-BR/resources/develop-contribute/native-protocol/hash) de (cabeçalho + dados compactados) |
| raw\_size        | uint32  | Tamanho bruto sem o cabeçalho                                                                       |
| data\_size       | uint32  | Tamanho dos dados descompactados                                                                    |
| mode             | byte    | Modo de compressão                                                                                  |
| compressed\_data | binary  | Bloco de dados compactados                                                                          |

<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="Diagrama que ilustra a estrutura do bloco de compressão do ClickHouse" width="2048" height="602" data-path="images/data-compression/ch_compression_block.png" />

O cabeçalho é (raw\_size + data\_size + mode), e o tamanho bruto corresponde a len(header + compressed\_data).

O checksum é `hash(header + compressed_data)`, usando [ClickHouse CityHash](/pt-BR/resources/develop-contribute/native-protocol/hash).

<div id="none-mode">
  ## Modo None
</div>

Se o modo *None* for usado, `compressed_data` será igual aos dados originais.
O modo sem compressão é útil para garantir uma camada adicional de integridade dos dados com checksums, porque
a sobrecarga do cálculo de hash é desprezível.
