[ 
https://issues.apache.org/jira/browse/CASSANDRA-7019?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15095937#comment-15095937
 ] 

Branimir Lambov commented on CASSANDRA-7019:
--------------------------------------------

My understanding of the problem is that since we only remove deleted content 
when we compact together the data and its tombstone, there is not much chance 
tombstones or data can actually be removed without a global (major) compaction. 
This is far from ideal for levelled, and also a problem for any other 
compaction method due to the size of the operation.

To enable smaller-sized transformations that do delete data (which would later 
enable the removal of tombstones as well), I made a [work-in-progress 
patch|https://github.com/blambov/cassandra/tree/7019-tombstone-compaction] of 
an option to use all overlapping sstables as sources of tombstones when doing 
compaction. These tombstones are used only to filter out deleted content, and 
will not appear in the resulting tables. The process will slow the compactions 
to which it is applied down as it does have to read from a lot of sstables, but 
hopefully the slowdown will be acceptable with the 8099 improvements.

The patch is uploaded with that option turned permanently on (for testing). I 
am not yet sure how best to use it, but I can see several possibilities:
- as an option that can be generally turned on (via -D and yaml option, best 
via JMX as well) for a node and applies to all compactions. This will trade 
compaction performance for improved dataset size and read performance and may 
not be suitable for all scenarios.
- as an option that is turned on by strategy, e.g. specifically for the 
levelled compaction strategy.
- as a flag that can be turned on when applying specific compactions (e.g. 
cleanup).
- as a new compaction type that is applied to one sstable at a time to remove 
deleted content from that table.
- as above, but triggered automatically when a tombstone compaction identifies 
tables with deleted content.

I personally think the first option with a default value of "on" for the 
levelled strategy makes most sense, but I want to hear other opinions.

[~krummas], could you take a look and tell me what you think of the approach 
and code, and which of the above makes most sense to you?

> Improve tombstone compactions
> -----------------------------
>
>                 Key: CASSANDRA-7019
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7019
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Compaction
>            Reporter: Marcus Eriksson
>            Assignee: Branimir Lambov
>              Labels: compaction
>             Fix For: 3.x
>
>
> When there are no other compactions to do, we trigger a single-sstable 
> compaction if there is more than X% droppable tombstones in the sstable.
> In this ticket we should try to include overlapping sstables in those 
> compactions to be able to actually drop the tombstones. Might only be doable 
> with LCS (with STCS we would probably end up including all sstables)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to