[ https://issues.apache.org/jira/browse/CASSANDRA-3854?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jonathan Ellis updated CASSANDRA-3854: -------------------------------------- Priority: Minor (was: Major) Affects Version/s: (was: 1.1) 1.0.0 > Lower levels should have higher priority in LeveledCompactionStrategy > --------------------------------------------------------------------- > > Key: CASSANDRA-3854 > URL: https://issues.apache.org/jira/browse/CASSANDRA-3854 > Project: Cassandra > Issue Type: Improvement > Components: Core > Affects Versions: 1.0.0 > Reporter: Stu Hood > Priority: Minor > Labels: compaction, leveled > > In LeveledCompactionStrategy, there is a comment explaining why compactions > prioritize the top levels: > bq. So instead, we force compacting higher levels first. This may not > minimize the number of reads done as quickly in the short term, but it > minimizes the i/o needed to compact optimially which gives us a long term win. > The argument is that compacting the lower levels first causes data to be > re-compacted more frequently. > But the result of compacting the top levels first is that each compaction > pass does less total work, because the number of overlapping files in a > particular level is limited to the number of files that can be generated by a > single compaction pass. > Consider the overload example from that comment: > {quote} > L0: 988 [ideal: 4] > L1: 117 [ideal: 10] > L2: 12 [ideal: 100] > {quote} > Assuming that there are initially no overlapping files in L2 or L1, the > current implementation will: > # Compact 32 files from L0 into L1 (which will cause 32 L0 files and 117 L1 > files to be compacted together) > # Possibly compact L1 and L2 in order to remove overlapping files due to the > L0 compaction > # Repeat > The problem with this strategy is that only every 3rd compaction will be > working to drain L0. Additionally, each compaction that occurs in L1 and L2 > will be doing the minimum possible work that can trigger a compaction (the > equivalent of SizeTieredStrategy triggering the min threshold). > ---- > If we agree that the goal is to ensure that L0 is drained (since a > proliferation of tiny overlapping files means worst case read behavior), then > a better strategy would be to start from the lower levels, and to change > compaction of L0 to not include L1. With this strategy, the steps would be: > # Compact 32 files from L0 (causing them to be partitioned and placed in L1) > # Repeat > # Compact ?? files from LN into LN+1 (existing strategy) > # Repeat > With this approach, L0 is quickly partitioned, considerably shortening the > time during which 988 files need to be checked. Additionally, because each > level is completely drained before moving to the next, compactions occurring > within a level are triggering the equivalent of SizeTieredStrategy's max > threshold (aka, always hitting a cap of 32 involved files.) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira