본문 바로가기

빅데이터/cassandra

카산드라 TimeWindowCompactionStrategy 설명

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

 

Time Window CompactionStrategy | Apache Cassandra Documentation

TimeWindowCompactionStrategy (TWCS) is designed specifically for workloads where it’s beneficial to have data on disk grouped by the timestamp of the data, a common goal when the workload is time-series in nature or when all data is written with a TTL. I

cassandra.apache.org

 

관련 영상

https://www.youtube.com/watch?v=PWtekUWCIaw 

https://www.youtube.com/watch?v=P8jPlppa_8I 

 

반응형