ClickHouse의 계층 저장소
설정 및 추가 설명은 다중 블록 장치 사용 문서를 참조하세요.
MergeTree 문서에서 인용:
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> <!-- 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>
<!-- 이동 계수는 핫 볼륨에서 콜드로 데이터를 이동할 시기를 결정합니다.
자세한 내용은 ClickHouse 문서를 참조하세요. -->
</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'
이 접근 방식은 테이블 TTL을 통해 가능하며, MergeTree 테이블 엔진에서도 사용할 수 있습니다.
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';
이렇게 하면 1년 이상 된 데이터(종료일 열에 대해 평가됨)는 GCS로 이동됩니다.
이러한 저장소 정책은 최신 데이터만 자주 액세스되는 추가 전용 테이블(예: 감사 이벤트)에 유용할 수 있습니다.
데이터를 완전히 삭제할 수 있으며, 이는 규제 요건일 수 있습니다.
이 가이드에서는 TTL 수정에 대해 언급하지 않지만, 그것도 가능합니다.
자세한 내용은 ClickHouse 문서의 TTL 수정 섹션을 참조하세요.