본문으로 건너뛰기

시계열 컴팩션 (TSCS)

SSTable 을 고정 시간 창으로 묶어, 최근 창은 평소대로 컴팩션하고 닫힌 창은 창당 하나로 동결하며, 보존 기간이 지난 창은 컴팩션 없이 통째로 삭제하는 컴팩션 전략입니다.

계층형 저장과는 별개입니다

TSCS 는 컴팩션 전략이고 계층형 저장은 테이블 확장입니다. 하나만 켜도 되고, TSCS 를 먼저 켜는 쪽이 위험이 낮습니다.

설정​

ALTER TABLE pp.tm_tag_point WITH compaction = {
'class': 'TimeSeriesCompactionStrategy',
'window_size': '1d',
'freeze_after': '2d',
'retention': '3650d'
};
옵션기본값뜻
window_size1h창 하나의 폭. SSTable 은 최대 타임스탬프로 창에 배정됩니다
freeze_after2h창이 닫힌 뒤 이만큼 지나면 동결 대상. 지각 데이터가 들어올 여유입니다
retention없음이보다 오래된 창은 통째로 삭제. 안 주면 아무것도 만료되지 않습니다
max_future_window1d이보다 먼 미래의 창은 모든 자동 경로에서 제외
timestamp_resolutionMICROSECONDS셀 타임스탬프 단위. 바꿀 일이 거의 없습니다
window_size 는 조회 패턴에 맞추십시오

대시보드가 하루 단위로 본다면 1d 가 자연스럽습니다. 창이 지나치게 잘면 SSTable 수와 창 관리 비용만 늘어납니다 — 10년 보존에 1h 창이면 창이 87,600개가 됩니다.

창의 일생​

[현재 창] [닫힘, freeze_after 이내] [동결됨] [만료]
────────────────┼───────────────────────────┼─────────────────┼──────────────
UCS 에 위임 여전히 UCS 창당 1 SSTable 통째로 삭제
(평소 컴팩션) (지각 데이터 흡수) 이후 손대지 않음 (컴팩션 없음)

현재 창과 갓 닫힌 창은 내부의 UnifiedCompactionStrategy 에 위임합니다 — 쓰기가 활발한 구간은 업스트림 UCS 그대로 동작합니다.

🔴 만료는 retention 이 담당합니다 — TTL 이 아닙니다​

retention 을 주지 않으면 아무것도 만료되지 않습니다. 행 단위 TTL 을 걸어 두었더라도 TSCS 의 창 삭제와는 다른 이야기입니다.

창 단위 삭제가 좋은 이유는 컴팩션을 하지 않고 파일을 지우기 때문입니다. TTL 로 만료시키면 툼스톤을 만들고 컴팩션으로 걷어내야 하는데, 시계열처럼 «오래된 것은 통째로 버리는» 데이터에 그 비용은 낭비입니다.

지각 데이터 격리​

통신이 끊겼던 엣지가 며칠치를 한꺼번에 올려도, 플러시와 스트리밍이 창 경계에서 갈라집니다. 그래서 지각분은 자기가 속한 과거 창에 따로 내려앉고, 최근 창을 건드려 다시 컴팩션하게 만들지 않습니다. 창을 걸치고 있는 옛 SSTable 은 자동으로 쪼개집니다.

파킹된 창 — 진척을 못 내는 창​

창이 동결로 넘어가지 못하고 멈춰 있는 것을 «파킹» 이라고 합니다. 원인은 하나 — 라우팅 버퍼 오버플로 입니다. 진단과 값 조정은 운영자 문서에 있습니다.

확인​

-- 지금 이 테이블에 걸린 컴팩션 설정
SELECT compaction FROM system_schema.tables
WHERE keyspace_name = 'pp' AND table_name = 'tm_tag_point';

함께 보기​