ClickHouse의 Tiered Storages

참고: ClickHouse의 MergeTree 테이블 엔진은 계층적 저장소를 지원합니다. 데이터 저장을 위한 여러 블록 디바이스 사용에 대한 자세한 설정 및 설명은 문서를 참조하십시오.

MergeTree 문서에서 인용:

MergeTree 패밀리 테이블 엔진은 여러 블록 디바이스에 데이터를 저장할 수 있습니다. 예를 들어, 어떤 테이블의 데이터가 암묵적으로 “hot” 및 “cold”로 나뉠 때 유용할 수 있습니다. 가장 최근 데이터는 정기적으로 요청되지만 공간을 적게 차지합니다. 그에 반해, fat-tailed 과거 데이터는 드물게 요청됩니다.

리모트 저장소 백엔드인 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 문서를 참조하십시오. -->
        </move_from_local_disks_to_gcs>
    ....
</storage_configuration>

이 저장소 정책에서 두 개의 볼륨 hotcold가 정의되어 있습니다. 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'

참고: 이 저장소 정책에서 이동은 암묵적으로 발생합니다. “hot” 데이터를 로컬 디스크에 고정 기간 동안 유지한 다음 “cold”로 이동시킬 수도 있습니다.

이 접근 방식은 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년 이전(이벤트 날짜를 기준으로)의 데이터가 GCS로 이동하는 테이블이 생성됩니다. 이런 저장소 정책은 최신 데이터만 빈번하게 액세스되는 추가 전용 테이블(감사 이벤트와 같은)에서 유용할 수 있습니다. 데이터를 아예 삭제할 수도 있는데, 이는 규제 요건일 수 있습니다.

이 가이드에서는 TTL 수정에 대해 언급하지 않았지만, 이 역시 가능합니다. 자세한 내용은 ClickHouse 문서에서 TTL 수정을 참조하십시오.