├── mini-lsm-book ├── .gitignore ├── .licensesnip ├── src │ ├── mini-lsm-logo.png │ ├── 09-whats-next.md │ ├── copyright.md │ ├── 08-key-compression.md │ ├── 07-bloom-filter.md │ ├── 06-recovery.md │ ├── 05-compaction.md │ ├── 00-get-started.md │ ├── 00-v1.md │ ├── week1-overview.md │ ├── week4-overview.md │ ├── sitemap.txt │ ├── SUMMARY.md │ ├── discord-badge.svg │ ├── lsm-tutorial │ │ ├── week1-01-single.svg │ │ ├── week2-00-two-extremes-1.svg │ │ ├── week1-01-frozen.svg │ │ ├── week1-01-overview.svg │ │ └── week1-02-overview.svg │ ├── 00-overview.md │ ├── week3-07-compaction-filter.md │ ├── week3-04-watermark.md │ └── week2-06-wal.md ├── README.md ├── theme │ └── head.hbs._ ├── sitemap.sh ├── licensesnip.config.jsonc ├── custom.css └── book.toml ├── mini-lsm-starter ├── src │ ├── tests │ │ └── .gitkeep │ ├── tests.rs │ ├── bin │ │ └── wrapper.rs │ ├── lib.rs │ ├── debug.rs │ ├── iterators.rs │ ├── mvcc │ │ ├── watermark.rs │ │ └── txn.rs │ ├── block.rs │ ├── compact │ │ ├── tiered.rs │ │ ├── leveled.rs │ │ └── simple_leveled.rs │ ├── wal.rs │ ├── manifest.rs │ ├── block │ │ ├── builder.rs │ │ └── iterator.rs │ ├── iterators │ │ ├── two_merge_iterator.rs │ │ ├── concat_iterator.rs │ │ └── merge_iterator.rs │ ├── mvcc.rs │ ├── table │ │ ├── builder.rs │ │ ├── iterator.rs │ │ └── bloom.rs │ └── lsm_iterator.rs ├── README.md └── Cargo.toml ├── mini-lsm ├── src │ ├── debug.rs │ ├── mvcc.rs │ ├── mvcc │ │ ├── txn.rs │ │ └── watermark.rs │ ├── bin │ │ ├── mini-lsm-cli.rs │ │ ├── compaction-simulator.rs │ │ └── wrapper.rs │ ├── tests.rs │ ├── lib.rs │ ├── iterators.rs │ ├── tests │ │ ├── week2_day2.rs │ │ ├── week2_day4.rs │ │ ├── week2_day3.rs │ │ ├── week2_day6.rs │ │ └── week1_day7.rs │ ├── block.rs │ ├── iterators │ │ ├── two_merge_iterator.rs │ │ └── concat_iterator.rs │ ├── manifest.rs │ ├── block │ │ └── builder.rs │ ├── wal.rs │ └── table │ │ ├── iterator.rs │ │ ├── bloom.rs │ │ └── builder.rs ├── README.md └── Cargo.toml ├── mini-lsm-mvcc ├── src │ ├── debug.rs │ ├── tests │ │ ├── harness.rs │ │ ├── week1_day1.rs │ │ ├── week1_day2.rs │ │ ├── week1_day3.rs │ │ ├── week1_day4.rs │ │ ├── week1_day5.rs │ │ ├── week1_day6.rs │ │ ├── week1_day7.rs │ │ ├── week2_day1.rs │ │ ├── week2_day2.rs │ │ ├── week2_day3.rs │ │ ├── week2_day4.rs │ │ ├── week2_day5.rs │ │ ├── week2_day6.rs │ │ ├── week3_day1.rs │ │ ├── week3_day2.rs │ │ ├── week3_day7.rs │ │ └── week3_day5.rs │ ├── bin │ │ ├── mini-lsm-cli.rs │ │ ├── compaction-simulator.rs │ │ └── wrapper.rs │ ├── lib.rs │ ├── tests.rs │ ├── iterators.rs │ ├── mvcc │ │ └── watermark.rs │ ├── block.rs │ ├── mvcc.rs │ ├── iterators │ │ ├── two_merge_iterator.rs │ │ └── concat_iterator.rs │ ├── manifest.rs │ ├── block │ │ └── builder.rs │ └── table │ │ ├── iterator.rs │ │ └── bloom.rs ├── README.md └── Cargo.toml ├── .gitignore ├── .config └── nextest.toml ├── .cargo └── config.toml ├── rust-toolchain.toml ├── licensesnip.config.jsonc ├── rustfmt.toml.nightly ├── xtask └── Cargo.toml ├── Cargo.toml ├── .github └── workflows │ ├── pr.yml │ └── main.yml ├── .licensesnip └── SOLUTIONS.md /mini-lsm-book/.gitignore: -------------------------------------------------------------------------------- 1 | book 2 | -------------------------------------------------------------------------------- /mini-lsm-starter/src/tests/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mini-lsm/src/debug.rs: -------------------------------------------------------------------------------- 1 | ../../mini-lsm-starter/src/debug.rs -------------------------------------------------------------------------------- /mini-lsm/src/mvcc.rs: -------------------------------------------------------------------------------- 1 | ../../mini-lsm-starter/src/mvcc.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/debug.rs: -------------------------------------------------------------------------------- 1 | ../../mini-lsm-starter/src/debug.rs -------------------------------------------------------------------------------- /mini-lsm/src/mvcc/txn.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm-starter/src/mvcc/txn.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/harness.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/harness.rs -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .vscode/ 3 | sync-tmp/ 4 | mini-lsm.db/ 5 | lsm.db/ 6 | -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week1_day1.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week1_day1.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week1_day2.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week1_day2.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week1_day3.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week1_day3.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week1_day4.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week1_day4.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week1_day5.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week1_day5.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week1_day6.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week1_day6.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week1_day7.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week1_day7.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week2_day1.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week2_day1.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week2_day2.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week2_day2.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week2_day3.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week2_day3.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week2_day4.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week2_day4.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week2_day5.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week2_day5.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/tests/week2_day6.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm/src/tests/week2_day6.rs -------------------------------------------------------------------------------- /mini-lsm/src/mvcc/watermark.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm-starter/src/mvcc/watermark.rs -------------------------------------------------------------------------------- /mini-lsm/src/bin/mini-lsm-cli.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm-starter/src/bin/mini-lsm-cli.rs -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/bin/mini-lsm-cli.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm-starter/src/bin/mini-lsm-cli.rs -------------------------------------------------------------------------------- /mini-lsm-starter/README.md: -------------------------------------------------------------------------------- 1 | # mini-lsm-starter 2 | 3 | Starter code for Mini-LSM. 4 | -------------------------------------------------------------------------------- /mini-lsm/src/bin/compaction-simulator.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm-starter/src/bin/compaction-simulator.rs -------------------------------------------------------------------------------- /.config/nextest.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | slow-timeout = { period = "10s", terminate-after = 3 } 3 | -------------------------------------------------------------------------------- /mini-lsm-mvcc/src/bin/compaction-simulator.rs: -------------------------------------------------------------------------------- 1 | ../../../mini-lsm-starter/src/bin/compaction-simulator.rs -------------------------------------------------------------------------------- /mini-lsm/README.md: -------------------------------------------------------------------------------- 1 | # Week 2 Solution 2 | 3 | This is the solution for Mini-LSM week 1 + week 2. 4 | -------------------------------------------------------------------------------- /mini-lsm-book/.licensesnip: -------------------------------------------------------------------------------- 1 | mini-lsm-book © 2022-2025 by Alex Chi Z is licensed under CC BY-NC-SA 4.0 2 | -------------------------------------------------------------------------------- /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [alias] 2 | xtask = "run --package mini-lsm-xtask --" 3 | x = "run --package mini-lsm-xtask --" 4 | -------------------------------------------------------------------------------- /mini-lsm-book/src/mini-lsm-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyzh/mini-lsm/HEAD/mini-lsm-book/src/mini-lsm-logo.png -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "stable" 3 | components = [ "rustfmt", "clippy" ] 4 | profile = "minimal" 5 | -------------------------------------------------------------------------------- /mini-lsm-book/README.md: -------------------------------------------------------------------------------- 1 | # mini-lsm-book 2 | 3 | The mini-lsm course in mdbook. This part of the repo is licensed under CC BY-NC-SA 4.0. 4 | -------------------------------------------------------------------------------- /licensesnip.config.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "use_gitignore": true, 3 | "file_types": { 4 | "rs": { 5 | "before_line": "// " 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /mini-lsm-book/theme/head.hbs._: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /mini-lsm-book/sitemap.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mdbook build 4 | sscli -b https://skyzh.github.io/mini-lsm -r book -f xml -o > src/sitemap.xml 5 | sscli -b https://skyzh.github.io/mini-lsm -r book -f txt -o > src/sitemap.txt 6 | -------------------------------------------------------------------------------- /mini-lsm-book/licensesnip.config.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "use_gitignore": true, 3 | "file_types": { 4 | "md": { 5 | "before_block": "" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /mini-lsm-book/custom.css: -------------------------------------------------------------------------------- 1 | .content img { 2 | margin-left: auto; 3 | margin-right: auto; 4 | display: block; 5 | } 6 | 7 | .caption { 8 | text-align: center; 9 | font-size: smaller; 10 | color: gray; 11 | } 12 | -------------------------------------------------------------------------------- /mini-lsm-book/src/09-whats-next.md: -------------------------------------------------------------------------------- 1 | 4 | 5 | # What's Next 6 | 7 | We did not finish this chapter as part of Mini-LSM v1. 8 | 9 | {{#include copyright.md}} 10 | -------------------------------------------------------------------------------- /mini-lsm-book/book.toml: -------------------------------------------------------------------------------- 1 | [book] 2 | authors = ["Alex Chi Z"] 3 | language = "en" 4 | multilingual = false 5 | src = "src" 6 | title = "LSM in a Week" 7 | 8 | [preprocessor.toc] 9 | command = "mdbook-toc" 10 | renderer = ["html"] 11 | 12 | [output.html] 13 | additional-css = ["custom.css"] 14 | git-repository-url = "https://github.com/skyzh/mini-lsm" 15 | -------------------------------------------------------------------------------- /rustfmt.toml.nightly: -------------------------------------------------------------------------------- 1 | comment_width = 120 2 | format_code_in_doc_comments = true 3 | format_macro_bodies = true 4 | format_macro_matchers = true 5 | normalize_comments = true 6 | normalize_doc_attributes = true 7 | imports_granularity = "Module" 8 | group_imports = "StdExternalCrate" 9 | reorder_impl_items = true 10 | reorder_imports = true 11 | tab_spaces = 4 12 | wrap_comments = true -------------------------------------------------------------------------------- /xtask/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "mini-lsm-xtask" 3 | version = { workspace = true } 4 | edition = { workspace = true } 5 | homepage = { workspace = true } 6 | keywords = { workspace = true } 7 | license = { workspace = true } 8 | repository = { workspace = true } 9 | publish = false 10 | 11 | [dependencies] 12 | anyhow = "1" 13 | console = "0.15" 14 | clap = { version = "4", features = ["derive"] } 15 | duct = "0.13" 16 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = ["mini-lsm", "xtask", "mini-lsm-starter", "mini-lsm-mvcc"] 3 | resolver = "3" 4 | 5 | [workspace.package] 6 | version = "0.2.0" 7 | edition = "2024" 8 | homepage = "https://github.com/skyzh/mini-lsm" 9 | keywords = ["storage", "database", "tutorial", "course"] 10 | license = "Apache-2.0" 11 | repository = "https://github.com/skyzh/mini-lsm" 12 | 13 | [workspace.dependencies] 14 | anyhow = "1" 15 | bytes = "1" 16 | -------------------------------------------------------------------------------- /mini-lsm-book/src/copyright.md: -------------------------------------------------------------------------------- 1 | 4 | 5 |
Your feedback is greatly appreciated. Welcome to join our Discord Community.
Found an issue? Create an issue / pull request on github.com/skyzh/mini-lsm.
mini-lsm-book © 2022-2025 by Alex Chi Z is licensed under CC BY-NC-SA 4.0.