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 для каждой вставки?