From How is data deleted?
Cassandra allows you to set a default_time_to_live property for an entire table. Columns and rows marked with regular TTLs a
AFAIK there is no big difference between tombstone records and the ones with expired TTLs. In your case, forcing major compaction transformed TTL expired record to the tombstone, but it was not purged due to gc_grace_seconds. According to this presentation, tombstones/ttl-expired-records go away:
So technically, the tombstone/ttl may go away after gc_grace, but it's not guaranteed.
I have been fooled by the piece of documentation you mentioned when answering this question on our blog (The Last Pickle Blog). I probably answered this one too quickly, even though I wrote this a thing 'to explore', even saying I did not try it explicitly.
Another clue to explore would be to use the TTL as a default value if that's a good fit. TTLs set at the table level with 'default_time_to_live' should not generate any tombstone at all in C*3.0+. Not tested on my hand, but I read about this.
So my sentence above is wrong. Basically, the default can be overwritten by the TTL at the query level and I do not see how Cassandra could handle this without tombstones.
From the example I conclude that isn't true that
default_time_to_live
not require tombstones, at least for version 3.0.13.
Also, I am glad to see you did not believe me or Datastax documentation but tried it by yourself. This is definitively the right approach.
But how would C* delete without tombstones? Why this should be a different scenario to using TTL per insert?
Yes, exactly this,
C*heers.
Alain Rodriguez - @arodream - alain@thelastpickle.com France / Spain
The Last Pickle - Apache Cassandra Consulting http://www.thelastpickle.com