ClickHouse 100일 챌린지 28일차 – TTL(Time To Live)로 자동 데이터 수명 관리 이해하기
출처: Dev.to
도입
데이터가 시간이 지남에 따라 늘어나면서 모든 행을 영구히 저장하는 것은 비용이 증가하고 종종 필요하지 않게 됩니다.
애플리케이션 로그, IoT 이벤트, 모니터링 메트릭, 감사 기록 및 클릭스트림 데이터는 보통 나이에 따라 다른 보존 요구 사항을 가집니다.
ClickHouse®는 **TTL (Time To Live)**이라는 강력한 내장 기능을 제공하여 데이터 수명 주기 관리를 자동화합니다.
스케줄된 청소 스크립트나 수동 DELETE 작업을 대신해 TTL 규칙은 테이블 스키마 내에서 직접 정의할 수 있습니다.
With TTL, ClickHouse can automatically:
- 만료된 데이터 삭제
- 낮은 비용의 저장소로 오래된 데이터 이동
- 경과된 데이터에 대해 더 강력한 코덱을 사용해 재압축
- 역사적 레코드를 요약된 데이터로 집계
이 기능들은 TTL이 ClickHouse에서 사용할 수 있는 가장 효과적인 저장소 최적화 기능 중 하나임을 의미합니다.
TTL(Time To Live)은 무엇인가?
TTL(Time To Live)은 지정된 기간이 지난 후에 데이터에 대해 수행되어야 할 작업을 정의합니다.
A TTL expression is usually based on a Date or DateTime column.
TTL event_time + INTERVAL 30 DAY
지정된 간격이 지나면 ClickHouse는 배경 머지 작업 중에 설정을 수행합니다.
스케줄된_jobs와 달리, TTL은 MergeTree 엔진에 완전히 통합되어 있어 수명 주기 관리가 자동화되고 유지 보수가 필요 없습니다.
TTL(Time To Live)이 어떻게 작동하나요?
새로운 데이터가 MergeTree 테이블에 삽입될 때 다음 과정이 발생합니다:
- 데이터는 불변 파트에 기록됩니다.
- 배경 머지 작업이 작은 부분을 더 큰 부분으로 결합합니다.
- 각 머지 동안 ClickHouse는 TTL 표현을 평가합니다.
- 설정된 규칙에 따라 만료된 행은 삭제되거나 이동되거나 재압축되거나 집계될 수 있습니다.
Because TTL works during merges:
- 만료된 데이터는 짧은 기간 동안 표시될 수 있습니다.
- 정리 작업은 비동기적으로 수행됩니다.
- 실행은 머지 일정에 따라 달라집니다.
For testing purposes, you can force a merge using:
OPTIMIZE TABLE table_name FINAL;
1. 자동으로 만료된 데이터 삭제
TTL의 가장 일반적인 사용 사고는 자동 데이터 삭제입니다.
CREATE TABLE logs
(
timestamp DateTime,
message String
)
ENGINE = MergeTree
ORDER BY timestamp
TTL timestamp + INTERVAL 30 DAY;
What happens?
- 새로 삽입된 데이터는 계속 사용할 수 있습니다.
- 30일이 지나면 행은 삭제 대상으로 표시됩니다.
- 미래의 배경 머지 작업 중에 ClickHouse는 자동으로 만료된 행을 삭제합니다.
이 방법으로 cron 잡이나 주기적인 청소 스크립트의 필요성을 없애면서 자동으로 저장소 사용량을 줄일 수 있습니다.
2. 컬럼 수준 TTL
TTL은 전체 행에만 제한되지 않고 개별 컬럼에도 적용될 수 있습니다.
CREATE TABLE user_events
(
event_time DateTime,
user_id UInt64,
session_ data String TTL event_time + INTERVAL 7 DAY
)
ENGINE = MergeTree
ORDER BY event_time;
결과
일곱 날 후:
session_data이 삭제됩니다.
- 남은 컬럼은 그대로 유지됩니다.
임시 또는 민감한 정보가 일정 기간 동안만 보관되어야 하는 경우 특히 유용합니다.
3. 데이터 이동: Cold Storage
여러 조직은 여러 저장소 계층을 사용합니다.
| 저장소 계층 | 목적 |
|---|---|
| SSD | 최근 자주 액세스되는 데이터 |
| HDD / Object Storage | 역사적 또는 드물게 액세스되는 데이터 |
TTL은 오래된 데이터를 저장소 간에 자동으로 이동할 수 있습니다.
CREATE TABLE logs
(
timestamp DateTime,
message String
)
ENGINE = MergeTree
ORDER BY timestamp
TTL timestamp + INTERVAL 90 DAY
TO VOLUME 'cold_storage';
결과
- 최근 데이터는 빠른 저장소에 유지됩니다.
- 오래된 데이터는 저비용 저장소로 이동됩니다.
이는 인프라 비용을 절감하면서 필요한 시점에 역사적 데이터를 이용할 수 있게 합니다.
4. 오래된 데이터 재압축
최근 데이터는 자주 쿼리되며 LZ4와 같은 빠른 압축 코덱의 이점을 누립니다.
역사적 데이터는 덜 자주 접근되어 더 강력한 압축이 효율적입니다.
TTL은 자동 재압축을 지원합니다.
CREATE TABLE events
(
event_time DateTime,
user_id UInt64,
value Float64
)
ENGINE = MergeTree
ORDER BY event_time
TTL event_time + INTERVAL 30 DAY
RECOMPRESS CODEC(ZSTD(17));
압축 수명 주기
| 데이터 연령 | 압축 |
|---|---|
| 0–30일 | 기본 (LZ4) |
| 30일 이후 | ZSTD(17) |
Benefits
- 저장소 사용량 감소
- 디스크 활용 효율 향상
- 완전 자동화된 최적화
- 수동 재압축 필요 없음
5. GROUP BY TTL을 통한 역사적 데이터 집계
TTL의 가장 강력한 기능 중 하나는 자동 롤업 집계입니다.
데이터를 삭제하는 대신 ClickHouse는 역사적 레코드를 요약된 값으로 집계할 수 있습니다.
이功能은 특히 유용합니다:
- 모니터링 시스템
- IoT 플랫폼
- 클릭스트림 분석
- 시계열 데이터베이스
Example
CREATE TABLE hits
(
timestamp DateTime,
id String,
hits Int32,
max_hits Int32 DEFAULT hits,
sum_hits Int64 DEFAULT hits
)
ENGINE = MergeTree
PRIMARY KEY (id, toStartOfDay(timestamp), timestamp)
TTL timestamp + INTERVAL 1 DAY
GROUP BY
id,
toStartOfDay(timestamp)
SET
max_hits = max(max_hits),
sum_hits = sum(sum_hits);
Before Rollup
| Timestamp | ID | Hits |
|---|---|---|
| 10:00 | A | 5 |
| 11:00 | A | 8 |
| 12:00 | A | 12 |
After one day, the TTL rule executes:
TTL timestamp + INTERVAL 1 DAY
GROUP BY
id,
toStartOfDay(timestamp)
SET
max_hits = max(max_hits),
sum_hits = sum(sum_hits);
After Rollup
| Day | ID | Max Hits | Sum Hits |
|---|---|---|---|
| 2026-06-20 | A | 12 | 25 |
Instead of storing three separate rows, ClickHouse stores one summarized row. This significantly reduces storage while preserving meaningful historical insights.
TTL 사용을 위한 베스트 프랙티스
- 예측 가능한 보존 정책을 위해 스케줄된 DELETE 문장 대신 TTL을 사용하세요.
- TTL 동작이 즉시 만료 후가 아니라 배경 머지 작업 중에 이루어진다는 점을 기억하세요.
- 특정 필드만 제한된 보존이 필요할 경우 컬럼 수준 TTL을 적용하세요.
- 역사적 데이터를 잃지 않으면서 인프라 비용을 절감하기 위해 저장소 계층화를 사용하세요.
- TTL과 재압축을 결합하여 디스크 효율을 극대화하세요.
GROUP BY TTL을 시간 시리즈 워크로드에 고려하세요. 여기서 요약된 역사적 데이터가 충분하다면.OPTIMIZE TABLE ... FINAL은 정기적인 유지 보수 작업이 아니라 테스트용으로만 사용하세요.
결론
TTL은 데이터 수명 주기 관리를 위한 ClickHouse의 가장 가치 있는 자동화 기능 중 하나입니다. 단일 선언 규칙만으로 만료된 데이터를 자동 삭제하고, 저비용 저장소로 이동하며, 오래된 데이터에 대해 더 강력한 압축을 적용하거나 상세 레코드를 요약된 통찰로 집계할 수 있습니다.
TTL을 효과적으로 활용하면 조직은 저장소 비용을 절감하고, 유지 보수를 단순화하며, 장기적인 성능을 향상시키고 외부 청소 작업이나 수동 개입 없이 확장 가능한 분석 시스템을 구축할 수 있습니다. 로그 데이터, 모니터링 메트릭, IoT 텔레메트리, 대용량 분석 워크로드를 관리하든 간에 TTL은 ClickHouse에서 자동화된 데이터 보존 정책을 구현하는 깨끗하고 효율적인 방법을 제공합니다.