Benedict created CASSANDRA-8737:
-----------------------------------

             Summary: AdjacentDataCompactionStrategy
                 Key: CASSANDRA-8737
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8737
             Project: Cassandra
          Issue Type: Bug
          Components: Core
            Reporter: Benedict
            Assignee: Benedict
             Fix For: 3.0


In the original ticket for dealing with timeseries data that introduced DTCS, 
the first suggestion was for an approach that compacted adjacent data (by 
clustering columns) together until a single page (or some fixed multiple of 
pages) on average contained only one partition's worth of data. The idea would 
be to compact any sstables that overlap their clustering components, so that 
only one (or a fixed number) of sstables need to be queried for any clustering 
range. The upshot of this would be tunable compaction burden to get optimal 
read behaviour, more explicitly defined than the decay in DTCS. 

The basic idea would be to select boundary clustering prefixes based on the 
current data occupancy within those ranges, falling roughly along the 
boundaries of the existing sstables, but so that any overlapping tail falls one 
side or the other. We then compact all overlapping sstables, and split the 
results into one side or another of the boundary (or across multiple 
boundaries). If there are no historical updates, this gives pretty optimal 
behaviour; we only compact files until we get to our packing threshold (so that 
reads are known to be at the configured efficiency), and then stop. If updates 
to older records appear, they would be compacted into their boundary buckets, 
and left there until we had enough files in a boundary (probably following 
normal STCS rules) that it warranted compaction.

The benefit is that such historical updates are still accounted for and bounded 
by comparison to DTCS, and the configuration parameters give more tunable 
characteristics, with explicit expectations (i.e. one seek per X bytes read in 
a partition; higher X may imply more compaction, lower more merges and seeks on 
read). It also may permit us some easy optimisations further up the stack, 
since we can guarantee the boundaries of overlap.



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

Reply via email to