2022-12-23 15:52:09 -05:00
|
|
|
# LSM in a Week
|
|
|
|
|
|
2022-12-23 21:14:11 -05:00
|
|
|
[](https://github.com/skyzh/mini-lsm/actions/workflows/main.yml)
|
|
|
|
|
|
2022-12-23 15:52:09 -05:00
|
|
|
Build a simple key-value storage engine in a week!
|
|
|
|
|
|
2022-12-23 21:14:11 -05:00
|
|
|
## Tutorial
|
|
|
|
|
|
|
|
|
|
The tutorial is available at [https://skyzh.github.io/mini-lsm](https://skyzh.github.io/mini-lsm). You can use the provided starter
|
|
|
|
|
code to kick off your project, and follow the tutorial to implement the LSM tree.
|
|
|
|
|
|
2022-12-23 15:52:09 -05:00
|
|
|
## Development
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cargo x install-tools
|
|
|
|
|
cargo x check
|
|
|
|
|
cargo x book
|
|
|
|
|
```
|
2022-12-23 22:35:38 -05:00
|
|
|
|
|
|
|
|
If you changed public API in the reference solution, you might also need to synchronize it to the starter crate.
|
|
|
|
|
To do this, use `cargo x sync`.
|
2022-12-24 00:19:29 -05:00
|
|
|
|
|
|
|
|
## Progress
|
|
|
|
|
|
|
|
|
|
The tutorial has 8 parts (which can be finished in 7 days):
|
|
|
|
|
|
|
|
|
|
* Day 1: Block encoding. SSTs are composed of multiple data blocks. We will implement the block encoding.
|
|
|
|
|
* Day 2: SST encoding.
|
2022-12-24 15:34:34 -05:00
|
|
|
* Day 3: MemTable and Merge Iterators.
|
|
|
|
|
* Day 4: Block cache and Engine. To reduce disk I/O and maximize performance, we will use moka-rs to build a block cache
|
2022-12-24 19:38:36 -05:00
|
|
|
for the LSM tree. In this day we will get a functional (but not persistent) key-value engine with `get`, `put`, `scan`,
|
2022-12-24 15:34:34 -05:00
|
|
|
`delete` API.
|
2022-12-24 00:19:29 -05:00
|
|
|
* Day 5: Compaction. Now it's time to maintain a leveled structure for SSTs.
|
|
|
|
|
* Day 6: Recovery. We will implement WAL and manifest so that the engine can recover after restart.
|
|
|
|
|
* Day 7: Bloom filter and key compression. They are widely-used optimizations in LSM tree structures.
|
|
|
|
|
|
2022-12-24 19:38:36 -05:00
|
|
|
We have reference solution up to day 4 and tutorial up to day 3 for now.
|