ClickHouse의 Tiered Storages
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'
이 접근 방식은 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 수정을 참조하세요.