ClickHouse의 Tiered Storages

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

MergeTree documentation에서 인용한 내용:

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> <!-- 정책 이름 -->
            <volumes>
                <hot> <!-- 볼륨 이름 -->
                    <disk>fast_ssd</disk>  <!-- 디스크 이름 -->
                </hot>
                <cold>
                    <disk>gcs</disk>
                </cold>
            </volumes>
            <move_factor>0.2</move_factor>
            <!-- 이동 요소는 핫 볼륨에서 콜드로 데이터를 이동할 때의 조건을 결정합니다.
                 자세한 내용은 ClickHouse 문서를 참조하세요. -->
        </moving_from_ssd_to_hdd>
    ....
</storage_configuration>

이 저장 정책에서는 콜드 두 가지 볼륨이 정의되어 있습니다. 볼륨이 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 테이블 엔진과 함께 사용 가능한 테이블 TTLs을 이용하여 구현할 수 있습니다.

ClickHouse 문서에서는 핫 - 웜 - 콜드 아키텍처 구현을 예제로 자세히 설명하고 있습니다.

위의 예제와 비슷한 방식으로 접근할 수 있습니다. 먼저 저장 정책을 조정합니다.

<storage_configuration>
    ...
    <policies>
        <local_disk_and_gcs> <!-- 정책 이름 -->
            <volumes>
                <hot> <!-- 볼륨 이름 -->
                    <disk>fast_ssd</disk>  <!-- 디스크 이름 -->
                </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 수정을 참조하세요.