ClickHouse의 계층형 스토리지
GitLab v19.1ClickHouse의 MergeTree 테이블 엔진은 계층형 스토리지를 지원합니다. MergeTree 문서에서 인용합니다: MergeTree 계열 테이블 엔진은 여러 블록 디바이스에 데이터를 저장할 수 있습니다. Amazon S3와 같은 원격 스토리지 백엔드와 함께 사용하면 매우 효율적인 스토리지 체계를 구성할 수 있습니다.
ClickHouse의 MergeTree 테이블 엔진은 계층형 스토리지를 지원합니다. 설정 및 자세한 설명은 여러 블록 디바이스를 사용한 데이터 스토리지 문서를 참고하세요.
MergeTree 문서에서 인용합니다:
MergeTree 계열 테이블 엔진은 여러 블록 디바이스에 데이터를 저장할 수 있습니다. 예를 들어, 특정 테이블의 데이터가 암묵적으로 “핫(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> <!-- 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>
이 스토리지 정책에서는 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'
이 스토리지 정책에서 이동은 암묵적으로 발생합니다. 핫 데이터를 일정 기간 동안 로컬 디스크에 보관한 후 콜드 데이터로 이동하는 것도 가능합니다.
이 방식은 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';
이렇게 하면 (event_date 칼럼을 기준으로 평가하여) 1년이 지난 데이터가 GCS로 이동되는 테이블이 생성됩니다.
이러한 스토리지 정책은 가장 최근 데이터만 자주 접근하는 추가 전용(append-only) 테이블(감사 이벤트 등)에 유용합니다.
데이터를 완전히 삭제할 수도 있으며, 이는 규정 요건이 될 수 있습니다.
이 가이드에서는 TTL 수정에 대해 다루지 않지만, 그것도 가능합니다. 자세한 내용은 TTL 수정에 대한 ClickHouse 문서를 참고하세요.