ClickHouse의 Tiered Storages

note
ClickHouse의 MergeTree 테이블 엔진은 Tiered Storage를 지원합니다. 데이터 저장을 위한 여러 블록 장치 사용에 대한 자세한 설정 및 설명은 문서를 참조하십시오.

MergeTree 문서에서 인용:

MergeTree family table 엔진은 여러 블록 장치에 데이터를 저장할 수 있습니다. 예를 들어, 특정 테이블의 데이터가 암묵적으로 “hot”과 “cold”로 분리되는 경우 유용할 수 있습니다. 가장 최근의 데이터는 정기적으로 요청되지만 작은 공간만 필요합니다. 반면에 긴 꼬리의 과거 데이터는 드물게 요청됩니다.

이러한 경우에 원격 저장소 백엔드인 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> <!-- 정책 이름 -->
            <volumes>
                <hot> <!-- 볼륨 이름 -->
                    <disk>fast_ssd</disk>  <!-- 디스크 이름 -->
                </hot>
                <cold>
                    <disk>gcs</disk>
                </cold>
            </volumes>
            <move_factor>0.2</move_factor>
            <!-- 이동 요인은 "hot" 볼륨에서 "cold"로 데이터를 언제 이동할지를 결정합니다.
                 자세한 내용은 ClickHouse 문서를 참조하십시오. -->
        </moving_from_ssd_to_hdd>
    ....
</storage_configuration>

이 저장 정책에서 “hot”과 “cold” 두 가지 볼륨이 정의되어 있습니다. “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
이 저장 정책에서 이동은 암시적으로 발생합니다. 또한 hot 데이터를 일정 기간 동안 로컬 디스크에 유지하다가 _cold_로 이동하는 것도 가능합니다.

이 접근 방식은 Table TTLs로 가능하며, 이는 MergeTree 테이블 엔진에서도 가능합니다.

ClickHouse 문서에서는 이러한 기능을 자세히 확인할 수 있으며, hot - warm - cold 구조 구현 예시로 설명되어 있습니다.

위의 예시와 비슷한 접근 방식을 취할 수 있습니다. 먼저, 저장 정책 수정:

<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 수정을 참조하십시오.