Today's key-value stores are either disk-optimized, focusing on large data
and saturating device IOPS, or memory-optimized, focusing on high throughput
with linear thread scaling assuming plenty of main memory. However, many
practical workloads demand high performance for read and write working sets
that are much larger than main memory, over a total data size that is even
larger. They require judicious use of memory and disk, and today's systems do
not handle such workloads well. We present F2, a new key-value store design
based on compartmentalization -- it consists of five key components that work
together in well-defined ways to achieve high throughput -- saturating disk and
memory bandwidths -- while incurring low disk read and write amplification. A
key design characteristic of F2 is that it separates the management of hot and
cold data, across the read and write domains, and adapts the use of memory to
optimize each case. Through a sequence of new latch-free system constructs, F2
solves the key challenge of maintaining high throughput with linear thread
scalability in such a compartmentalized design. Detailed experiments on
benchmark data validate our design's superiority, in terms of throughput, over
state-of-the-art key-value stores, when the available memory resources are
scarce