최근에 나는 카산드라에 익숙해 지려고 노력했지만 데이터가 삭제 된 후에 디스크에서 언제 제거되는지에 대해서는 잘 모릅니다. 특히 관심이있는 유스 케이스는 DTCS를 사용하여 시계열 데이터를 만료하는 것입니다.카산드라는 삭제 된 후 언제 데이터를 제거합니까?
CREATE TABLE metrics (
metric_id text,
time timestamp,
value double,
PRIMARY KEY (metric_id, time),
) WITH CLUSTERING ORDER BY (time DESC) AND
default_time_to_live = 86400 AND
gc_grace_seconds = 3600 AND
compaction = {
'class': 'DateTieredCompactionStrategy',
'timestamp_resolution':'MICROSECONDS',
'base_time_seconds':'3600',
'max_sstable_age_days':'365',
'min_threshold':'4'
};
나는 카산드라 24 시간 (86,400초) 이후이 테이블에 삽입 된 모든 행에 대한 삭제 표시를 만듭니다 이해 : 예를 들어, 다음 표를 고려하십시오. 이러한 삭제 표시는 먼저 메모리 내 Memtable에 쓰여지고 Memtable이 특정 크기에 도달하면 SSTable로 디스크로 플러시됩니다. 내 질문은 언제 만료 된 데이터가 디스크에서 제거 될 것입니까? 다음 번에 데이터가 포함 된 SSTable이 압축 될 예정입니까? 따라서 DTCS와 min_threshold
을 4로 설정하면 만료 된 데이터와 동일한 시간대에 다른 SSTable이 3 개 이상있을 때까지 기다렸다가 해당 SSTables가 SSTable로 압축됩니다. 이 압축 과정에서 데이터가 제거 될 것입니까? 저에게 이것은 Cassandra가 새로운 삭제 표시가 압축되는 오래된 SSTables에 없을 가능성이 있으므로 행이 삭제 된 일부 메타 데이터를 유지해야 할 것으로 보입니다.
또는 삭제 표시 할 데이터의 만료 된 데이터가 포함 된 SSTables로 삭제 표시가 포함 된 SSTable을 압축해야합니까? 이것은 새로운 삭제 표시가 오래되어 만료 된 데이터로 압축되기를 기다리고 있기 때문에 만료 된 데이터를 보유한 카산드라가 오랫동안 보유 할 수있는 것으로 보입니다.
마침내 나는 삭제 표시 자체가 제거 될 때도 확신하지 못했습니다. 나는 Cassandra가 gc_grace_seconds
이후까지 삭제하지 않는다는 것을 알고 있지만 만료 된 데이터가 삭제 된 것임을 확신 할 때까지 삭제 표시를 삭제할 수 없습니까? 그렇지 않으면 유효 기간이 만료 된 데이터를 볼 수 있습니다. 결과적으로 삭제 표시가 삭제되는 문제는 위의 질문과 밀접한 관련이 있습니다. 감사!
내가 도움이된다면 2.0.15 버전을 직접 사용해 보았습니다.
감사합니다.두 번째 요점을 명확히하기 위해 만료 된 데이터는 압축되는 다른 SSTables에 삭제 표시가 포함되는지 여부에 관계없이 SSTable이 압축 될 때 제거됩니다. 그렇다면 Cassandra는 삭제할 데이터를 알기 위해 SSTable 외부에서 삭제 된 행을 추적해야합니다. 또한 DTCS를 사용하면 세 개의 다른 SSTables가 만료 된 데이터가있는 SSTable과 같은 시간 창에 압축 될 때까지 기다려야합니다. 그렇다면 24 시간 이상 걸릴 수 있습니다. – jeromefroe
두 경우는 실제로 하나입니다. 주요 압축은'gc_grace_seconds'가 초과 된 모든 삭제 된 데이터를 제거합니다. [이 스레드] (http://stackoverflow.com/questions/23346698/should-compaction-within-gc-grace-seconds-preserve-tombstones/23361873#23361873)도 참조하십시오. – Ralf
헤이 랄프, 도와 줘서 고마워! 나는 사소한 다짐에 더 관심이있다. 주요 압축을 통해 카산드라는 모든 데이터를 압축하므로 만료 된 데이터가있는 SSTable과 삭제 표시가있는 SSTable이 함께 압축됩니다. 그러나 사소한 컴팩 션을 사용하면 SSTables가 DTCS가 함께 압축하는 시간 창과 같지 않을 수 있기 때문에 그렇지 않을 수 있습니다. – jeromefroe