Files
mini_lsm/mini-lsm-book/src/week2-03-tiered.md

37 lines
1.9 KiB
Markdown
Raw Normal View History

# Tiered Compaction Strategy
![Chapter Overview](./lsm-tutorial/week2-01-overview.svg)
In this chapter, you will:
* Implement a tiered compaction strategy and simulate it on the compaction simulator.
* Incorporate tiered compaction strategy into the system.
The tiered compaction we talk about in this chapter is the same as RocksDB's universal compaction. We will use these two terminologies interchangeably.
## Task 1: Universal Compaction
In this chapter, you will implement RocksDB's universal compaction, which is of the tiered compaction family compaction strategies. Similar to the simple leveled compaction strategy, we only use number of files as the indicator in this compaction strategy. And when we trigger the compaction jobs, we always include a full sorted run (tier) in the compaction job.
### Task 1.1: Triggered by Space Amplification Ratio
### Task 1.2: Triggered by Size Ratio
### Task 1.3: Reduce Sorted Runs
**Note: we do not provide fine-grained unit tests for this part. You can run the compaction simulator and compare with the output of the reference solution to see if your implementation is correct.**
## Task 2: Integrate with the Read Path
As tiered compaction does not use the L0 level of the LSM state, you should directly flush your memtables to a new tier instead of as an L0 SST. You can use `self.compaction_controller.flush_to_l0()` to know whether to flush to L0. You may use the first output SST id as the level/tier id for your new sorted run.
## Test Your Understanding
* What are the pros/cons of universal compaction compared with simple leveled/tiered compaction?
* How much storage space is it required (compared with user data size) to run universal compaction without using up the storage device space?
* The log-on-log problem.
We do not provide reference answers to the questions, and feel free to discuss about them in the Discord community.
{{#include copyright.md}}