TimescaleDB 데이터 보존
TimescaleDB 데이터 보존 (Data Retention)
현대 애플리케이션에서는 데이터가 기하급수적으로 늘어나요. 오래된 데이터는 자주 다루게 되는 일이 적지만, 분석에는 여전히 필요해요. TimescaleDB는 자동 데이터 보존 정책으로 이 문제를 우아하게 해결해요. 정의한 일정에 따라 오래된 원시 데이터를 대신 삭제해 주는 거예요.
데이터 보존 정책을 연속 집계(continuous aggregates) 와 함께 쓰면 데이터를 다운샘플링해서 유용한 요약만 남길 수 있어요. 그러면 저장 공간을 줄이면서도 과거 데이터를 분석할 수 있어요.
출처: https://docs.timescale.com/use-timescale/latest/data-retention/
청크 단위 삭제
TimescaleDB의 데이터 보존은 행 단위가 아니라 청크(chunk) 단위로 동작해요. PostgreSQL의 DELETE처럼 행 단위로 지우면 느려요. 청크 단위로 지우면 디스크에서 파일 하나를 통째로 삭제하기 때문에, 가비지 컬렉션이나 조각 모음이 필요 없어서 훨씬 빨라요.
정책이나 수동 청크 삭제 모두, 지정된 시간 범위 안에 데이터가 전부 담긴 청크만 삭제해요. 예를 들어 36시간·12~36시간·최근 12시간 데이터가 담긴 3개 청크에서 24시간보다 오래된 청크를 수동으로 지우면, 가장 오래된 청크만 삭제되고 중간 청크는 유지돼요(24시간보다 새로운 데이터가 섞여 있으니까).
자동 보존 정책
add_retention_policy() 함수로 자동 보존 정책을 만들 수 있어요.
SELECT add_retention_policy('metrics', INTERVAL '30 days');
이 정책은 30일이 지난 청크를 자동으로 삭제해요. 백그라운드 작업 스케줄러가 처리해요. 정책을 제거할 때는 remove_retention_policy()를 써요.
수동 청크 삭제
drop_chunks() 함수로 수동으로 청크를 지울 수도 있어요.
SELECT drop_chunks('metrics', older_than => INTERVAL '30 days');
인자
older_than— 이보다 오래된 청크 삭제.INTERVAL(시간) 또는TIMESTAMPTZ(특정 시점) 혹은 정수형.newer_than— 이보다 새로운 청크 삭제(선택).table— 대상 하이퍼테이블.
데이터 보존 방식 선택
- 오래된 데이터를 완전히 지우면 저장 공간이 줄지만 과거 데이터를 잃어요.
- 대신 오래된 데이터를 저비용 스토리지로 옮기는 계층화 스토리지(tiered storage) 도 있어요.
- 연속 집계 + 보존 정책 조합: 원시 데이터는 지우고 요약 집계만 남기기.
이 세 가지 접근을 조합하면 비용과 분석 가능성을 균형 있게 유지할 수 있어요.