InfoGrab DocsInfoGrab Docs

ClickHouse의 계층형 스토리지

요약

ClickHouse의 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>

이 스토리지 정책에서는 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'

이 스토리지 정책에서 이동은 암묵적으로 발생합니다. 데이터를 일정 기간 동안 로컬 디스크에 보관한 후 콜드 데이터로 이동하는 것도 가능합니다.

이 방식은 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 문서를 참고하세요.

ClickHouse의 계층형 스토리지

GitLab v19.1
원문 보기
요약

ClickHouse의 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>

이 스토리지 정책에서는 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'

이 스토리지 정책에서 이동은 암묵적으로 발생합니다. 데이터를 일정 기간 동안 로컬 디스크에 보관한 후 콜드 데이터로 이동하는 것도 가능합니다.

이 방식은 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 문서를 참고하세요.