= Size Tiered Compaction Strategy

[[stcs]]
The basic idea of `SizeTieredCompactionStrategy` (STCS) is to merge
sstables of approximately the same size. All sstables are put in
different buckets depending on their size. An sstable is added to the
bucket if size of the sstable is within `bucket_low` and `bucket_high`
of the current average size of the sstables already in the bucket. This
will create several buckets and the most interesting of those buckets
will be compacted. The most interesting one is decided by figuring out
which bucket's sstables takes the most reads.

== Major compaction

When running a major compaction with STCS you will end up with two
sstables per data directory (one for repaired data and one for
unrepaired data). There is also an option (-s) to do a major compaction
that splits the output into several sstables. The sizes of the sstables
are approximately 50%, 25%, 12.5%... of the total size.

[[stcs_options]]
== STCS options

`min_sstable_size` (default: 50MB)::
  Sstables smaller than this are put in the same bucket.
`bucket_low` (default: 0.5)::
  How much smaller than the average size of a bucket a sstable should be
  before not being included in the bucket. That is, if
  `bucket_low * avg_bucket_size < sstable_size` (and the `bucket_high`
  condition holds, see below), then the sstable is added to the bucket.
`bucket_high` (default: 1.5)::
  How much bigger than the average size of a bucket a sstable should be
  before not being included in the bucket. That is, if
  `sstable_size < bucket_high * avg_bucket_size` (and the `bucket_low`
  condition holds, see above), then the sstable is added to the bucket.

== Defragmentation

Defragmentation is done when many sstables are touched during a read.
The result of the read is put in to the memtable so that the next read
will not have to touch as many sstables. This can cause writes on a
read-only-cluster.
