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>
이 저장소 정책에서 두 개의 볼륨 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'
참고: 이 저장소 정책에서 이동은 암묵적으로 발생합니다. “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 수정을 참조하십시오.