InfoGrab DocsInfoGrab Docs

ClickHouse의 계층형 스토리지

요약

ClickHouse의 MergeTree 테이블 엔진은 계층형 스토리지를 지원합니다. MergeTree 문서에서 인용합니다. MergeTree 계열 테이블 엔진은 여러 블록 디바이스에 데이터를 저장할 수 있습니다. Amazon S3 같은 원격 스토리지 백엔드와 함께 사용하면 매우 효율적인 스토리지 구성이 됩니다.

Note

ClickHouse의 MergeTree 테이블 엔진은 계층형 스토리지를 지원합니다. 설정 방법과 추가 설명은 Using Multiple Block Devices for Data Storage 문서를 참고합니다.

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'
Note

이 스토리지 정책에서는 이동이 암묵적으로 일어납니다. hot 데이터를 정해진 기간 동안 로컬 디스크에 두었다가 cold 로 옮기는 방식도 가능합니다.

이 방식은 MergeTree 테이블 엔진에서 함께 제공되는 테이블 TTL 로 구현할 수 있습니다.

ClickHouse 문서는 이 기능을 hot - warm - cold 아키텍처 구현 예시로 자세히 설명합니다.

앞의 예시에도 비슷한 방식을 적용할 수 있습니다. 먼저 스토리지 정책을 다음과 같이 조정합니다.

<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로 이동하는 테이블이 만들어집니다. 이런 스토리지 정책은 최근 데이터만 자주 조회하는 추가 전용 테이블(감사 이벤트 등)에 유용합니다. 규제 요건에 따라 데이터를 아예 삭제할 수도 있습니다.

이 가이드에서는 TTL 수정을 다루지 않지만 수정도 가능합니다. 자세한 내용은 ClickHouse 문서의 TTL 수정 을 참고합니다.

ClickHouse의 계층형 스토리지

GitLab v19.4
원문 보기

요약

ClickHouse의 MergeTree 테이블 엔진은 계층형 스토리지를 지원합니다. MergeTree 문서에서 인용합니다. MergeTree 계열 테이블 엔진은 여러 블록 디바이스에 데이터를 저장할 수 있습니다. Amazon S3 같은 원격 스토리지 백엔드와 함께 사용하면 매우 효율적인 스토리지 구성이 됩니다.

Note

ClickHouse의 MergeTree 테이블 엔진은 계층형 스토리지를 지원합니다. 설정 방법과 추가 설명은 Using Multiple Block Devices for Data Storage 문서를 참고합니다.

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'
Note

이 스토리지 정책에서는 이동이 암묵적으로 일어납니다. hot 데이터를 정해진 기간 동안 로컬 디스크에 두었다가 cold 로 옮기는 방식도 가능합니다.

이 방식은 MergeTree 테이블 엔진에서 함께 제공되는 테이블 TTL 로 구현할 수 있습니다.

ClickHouse 문서는 이 기능을 hot - warm - cold 아키텍처 구현 예시로 자세히 설명합니다.

앞의 예시에도 비슷한 방식을 적용할 수 있습니다. 먼저 스토리지 정책을 다음과 같이 조정합니다.

<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로 이동하는 테이블이 만들어집니다. 이런 스토리지 정책은 최근 데이터만 자주 조회하는 추가 전용 테이블(감사 이벤트 등)에 유용합니다. 규제 요건에 따라 데이터를 아예 삭제할 수도 있습니다.

이 가이드에서는 TTL 수정을 다루지 않지만 수정도 가능합니다. 자세한 내용은 ClickHouse 문서의 TTL 수정 을 참고합니다.