С Как удаляются данные?
Cassandra позволяет вам установить свойство default_time_to_live для всей таблицы. Столбцы и строки, помеченные обычными TTL, обрабатываются, как описано выше; но когда запись превышает TTL на уровне таблицы, Cassandra удаляет ее немедленно, без захоронения или уплотнения .
Это также ответ здесь
Если в таблице есть default_time_to_live, то строки, превышающие этот временной предел, удаляются немедленно, без надписей надгробий .
И прокомментировал в посте LastPickle Об удалениях и надгробиях
Еще один ключ к исследованию - использовать TTL в качестве значения по умолчанию, если это хорошо подходит. TTL, установленные на уровне таблицы с параметром default_time_to_live , вообще не должны создавать никаких надгробий в C * 3.0 + . Не проверял на моей руке, но я читал об этом.
Я сделал самый простой тест, который я мог себе представить, используя LeveledCompactionStrategy
:
CREATE KEYSPACE IF NOT EXISTS temp WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'};
CREATE TABLE IF NOT EXISTS temp.test_ttl (
key text,
value text,
PRIMARY KEY (key)
) WITH compaction = { 'class': 'LeveledCompactionStrategy'}
AND default_time_to_live = 180;
INSERT INTO temp.test_ttl (key,value) VALUES ('k1','v1');
nodetool flush temp
sstabledump mc-1-big-Data.db
- ждать 180 секунд (default_time_to_live)
sstabledump mc-1-big-Data.db
Надгробная плита еще не создана
nodetool compact temp
sstabledump mc-2-big-Data.db
Надгробная плита создается (и не удаляется при сжатии из-за gc_grace_seconds)
Тест проводился с использованием Apache Cassandra 3.0.13
.
Из примера я заключаю, что неверно, что default_time_to_live
не требуют надгробий, по крайней мере для версии 3.0.13.
Однако это очень простой тест, и я заставляю его выполнять сжатие nodetool compact
, поэтому я, возможно, не буду воссоздавать сценарий, когда в игру вступает магия default_time_to_live.
Но как бы C * удалить без надгробий? Почему это должно отличаться от сценария использования TTL для каждой вставки?