| 
									
										
										
										
											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 23:45:53 -05:00
										 |  |  | We have reference solution up to day 4 and tutorial up to day 4 for now. |