クリックハウスの階層型倉庫

note
ClickHouse の MergeTree テーブル エンジンは階層ストレージをサポートしています。セットアップと詳細については、「データ ストレージに複数のブロック デバイスを使用する」のドキュメントを参照してください。

MergeTree ドキュメントより引用:

MergeTree ファミリーのテーブル エンジンは、複数のブロック デバイスにデータを格納できます。たとえば、あるテーブルのデータが暗黙的に「ホット」と「コールド」に分割されている場合に便利です。最新のデータは定期的に要求されますが、必要な容量はわずかです。逆に、ファットテールの履歴データはほとんど要求されません。

Amazon S3のようなリモートストレージバックエンドを使用すると、非常に効率的なストレージスキームとなります。これは、データを一定期間ローカルディスクに置き、その後オブジェクトストレージに移動させるストレージポリシーを可能にします。

設定例は次のようになります:

<storage_configuration>
    <disks>
        <fast_ssd>
            <path>/mnt/fast_ssd/clickhouse/</path>
        </fast_ssd>
        <gcs>
            <support_batch_delete>false</support_batch_delete>
            <type>s3</type>
            <endpoint>https://storage.googleapis.com/${BUCKET_NAME}/${ROOT_FOLDER}/</endpoint>
            <access_key_id>${SERVICE_ACCOUNT_HMAC_KEY}</access_key_id>
            <secret_access_key>${SERVICE_ACCOUNT_HMAC_SECRET}</secret_access_key>
            <metadata_path>/var/lib/clickhouse/disks/gcs/</metadata_path>
        </gcs>
     ...
    </disks>
    ...
    <policies>

        <move_from_local_disks_to_gcs> <!-- policy name -->
            <volumes>
                <hot> <!-- volume name -->
                    <disk>fast_ssd</disk>  <!-- disk name -->
                </hot>
                <cold>
                    <disk>gcs</disk>
                </cold>
            </volumes>
            <move_factor>0.2</move_factor>
            <!-- The move factor determines when to move data from hot volume to cold.
                 See ClickHouse docs for more details. -->
        </moving_from_ssd_to_hdd>
    ....
</storage_configuration>

このストレージポリシーでは、hotcoldの2つのボリュームが定義されています。hot ボリュームがdisk_size * move_factorの占有率で満たされた後、データは Google Cloud Storage(GCS)に移動されます。

このストレージ・ポリシーがデフォルトでない場合は、ストレージ・ポリシーをアタッチしてテーブルを作成します。例えば

CREATE TABLE key_value_table (
    event_date Date,
    key String,
    value String,
) ENGINE = MergeTree
ORDER BY (key)
PARTITION BY toYYYYMM(event_date)
SETTINGS storage_policy = 'move_from_local_disks_to_gcs'
note
このストレージ・ポリシーでは、移動は暗黙的に行われます。_ホット_データを一定期間ローカルディスクに保持し、その後_コールドとして_移動することも可能です。

この方法は、MergeTree テーブル エンジンでも使用できるテーブル TTL で可能です。

ClickHouse のドキュメントでは、ホット-ウォーム-コールドアーキテクチャの実装例でこの機能を詳しく説明しています。

上記の例と同様のアプローチを取ることができます。まず、ストレージポリシーを調整します:

<storage_configuration>
    ...
    <policies>
        <local_disk_and_gcs> <!-- policy name -->
            <volumes>
                <hot> <!-- volume name -->
                    <disk>fast_ssd</disk>  <!-- disk name -->
                </hot>
                <cold>
                    <disk>gcs</disk>
                </cold>
            </volumes>
        </local_disk_and_gcs>
    ....
</storage_configuration>

次に、以下のようにテーブルを作成します:

CREATE TABLE another_key_value_table (
    event_date Date,
    key String,
    value String,
) ENGINE = MergeTree
ORDER BY (key)
PARTITION BY toYYYYMM(event_date)
TTL
    event_date TO VOLUME 'hot',
    event_date + INTERVAL 1 YEAR TO VOLUME 'cold'
SETTINGS storage_policy = 'local_disk_and_gcs';

これは、1年以上前のデータ(event_date 列に対して評価される)が GCS に移動されるようにテーブルを作成します。このような保存ポリシーは、最新のデータのみが頻繁にアクセスされる(監査イベントのような)追記のみのテーブルに役立ちます。データを完全に削除することもできます。

このガイドではTTLの変更について触れていませんが、それも可能です。詳細はClickHouseのTTLの変更に関するドキュメントを参照してください。