> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.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>
  利用可能な[カラム圧縮コーデック](/ja/reference/statements/create/table#column_compression_codec)の詳細を確認し、テーブルの作成時または作成後に指定してください。
</Tip>

<div id="modes">
  ## モード
</div>

| value  | name               | description             |
| ------ | ------------------ | ----------------------- |
| `0x02` | [None](#none-mode) | 圧縮なし、チェックサムのみ           |
| `0x82` | LZ4                | 非常に高速で、圧縮率も良好           |
| `0x90` | ZSTD               | Zstandard、かなり高速で、圧縮率は最高 |

LZ4 と ZSTD はどちらも同じ著者によるものですが、トレードオフが異なります。
[Facebook benchmarks](https://facebook.github.io/zstd/#benchmarks) より:

| name              | ratio | encoding | decoding  |
| ----------------- | ----- | -------- | --------- |
| **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 | (header + compressed data) の [ハッシュ](/ja/resources/develop-contribute/native-protocol/hash) |
| raw\_size        | uint32  | ヘッダーを除いた元のサイズ                                                                              |
| data\_size       | uint32  | 非圧縮データサイズ                                                                                  |
| mode             | byte    | 圧縮モード                                                                                      |
| compressed\_data | binary  | 圧縮データのブロック                                                                                 |

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/ddNWBC5mE_w-syUp/images/data-compression/ch_compression_block.png?fit=max&auto=format&n=ddNWBC5mE_w-syUp&q=85&s=07df8605c40448372161213a95cb2e08" 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) に相当します。

Checksum は [ClickHouse CityHash](/ja/resources/develop-contribute/native-protocol/hash) を使用した `hash(header + compressed_data)` です。

<div id="none-mode">
  ## None モード
</div>

*None* モードを使用すると、`compressed_data` は元のデータと同じです。
圧縮しないモードは、ハッシュ計算のオーバーヘッドがごく小さいため、チェックサムによる追加のデータ整合性の確保に役立ちます。
