TimeWindowCompactionStrategy
TimeWindowCompactionStrategy(TWCS)는 데이터가 디스크에서 timestamp 단위로 묶일 때 유용합니다. 주로 TTL로 쓰여진 데이터를 다룰 경우 사용됩니다. 데이터가 만료되거나 TTL이 도달한 SSTable의 데이터는 대략적으로 비슷한 시간대에 삭제됩니다. 이 전략을 사용하면 이런 데이터를 완전히 삭제시킵니다. SizeTieredCompactionStrategy(STCS) 또는 LeveledCompactionStrategy(LSC)를 사용할 때 보다 디스크 사용량이 줄어들게 됩니다. TWCS의 기본 컨샙은 윈도우(window) 기준으로 sstable 파일을 생성하는 것입니다. 윈도우는 아래 2가지 주요 옵션에 의해 설정됩니다.
- compaction_window_unit(default: DAYS)
자바 타임 유닛 단위(MINUTES, HOURS, DAYS)
- compaction_window_size(default: 1)
타임 유닛 단위 윈도우의 크기
- unsafe_aggressive_sstable_expiration(default: false)
sstable이 만료될 때 다른 sstable과 비교하지 않고 체크를 수행합니다. 이런 방식을 사용하면 데이터가 의도치 않게 삭제될 수도 있고 또는 다시 나타날 수도 있습니다. 이런 이슈 때문에 이 옵션은 반드시 시작할 때 다음과 같은 옵션으로 설정해야만 합니다.
-Dcassandra.unsafe_aggressive_sstable_expiration=true
TSCS를 사용하면 오퍼레이터가 윈도우들을 특정 사이즈로 만들어내고 각 윈도우 단위별로 sstable이 생성됩니다. 신규 데이터가 쓰일 때 가장 신규 윈도우 데이터들은 STCS에 의해 컴팩션이 수행됩니다.
TSCS를 잘 운영하기 위해서는 TTL 범위가 n이라면 윈도우 크기는 n/20 또는 n/30으로 설정해야 합니다. 만약 90일 TTL을 운영한다면 윈도우는 3일로 운영하는 것이 좋습니다.
'compaction_window_unit':'DAYS','compaction_window_size':3
TWCS에서 추가적으로 고려해야할 점
TWCS의 핵심 설계는 시간 단위로 데이터를 구분해서 sstable로 저장하고 만료된 sstable 전체를 모두 expire시키는 것입니다. 이런 동작에서 문제는 sstable에 일부 데이터가 순서가 지켜지지 않은 상태에서 저장될 때입니다. 새로운 데이터와 오래된 데이터가 동일 sstable에 저장된 경우입니다. 순서가 지켜지지 않은 데이터는 다음과 같을 때 나타날 수 있습니다.
- 만약 유저가 신규 데이터와 오래된 데이터를 혼합해서 저장할 경우.
- 유저가 오래된 데이터를 repair 목적으로 읽기 시작했을 때
TWCS는 이런 혼합된 데이터에 대해 최대한 영향을 끼치지 않도록 동작합니다. 사용자는 상기와 같은 작업을 하면 안됩니다. 특히, 사용자가 cql(using timestamp)로 명확히 timestamp를 지정하는 쿼리를 할 경우 이런 이슈가 발생할 수 있습니다. 이런 상태에서 유저는 repair를 꾸준히 해야 합니다.
출처 : https://cassandra.apache.org/doc/latest/cassandra/operating/compaction/twcs.html
관련 영상
https://www.youtube.com/watch?v=PWtekUWCIaw
https://www.youtube.com/watch?v=P8jPlppa_8I
'빅데이터 > cassandra' 카테고리의 다른 글
카산드라 특정 테이블에 TTL 데이터를 넣을 때 적합한 컴팩션 전략은? (0) | 2022.02.07 |
---|---|
카산드라와 TTL, 툼스톤 그리고 관련 동작(컴팩션) (0) | 2022.02.04 |
아파치 카산드라 설정 파일 및 상용 환경 셋팅 (0) | 2022.02.04 |
아파치 카산드라 다이나모, 일관된 해싱, 복제 개념 살펴보기 (0) | 2022.02.03 |
아파치 카산드라 살펴보기, 설명, 기본 개념 (0) | 2022.02.03 |
카산드라 TTL에 따른 데이터 삭제 정리 (0) | 2022.01.20 |