From a95d866cace5d1a44dbdfadf4550b698472ae93e Mon Sep 17 00:00:00 2001 From: Alex Chi Date: Sat, 20 Jan 2024 22:05:39 +0800 Subject: [PATCH] add frozen memtable figure Signed-off-by: Alex Chi --- .../src/lsm-tutorial/00-full-overview.svg | 4 +- .../src/lsm-tutorial/00-lsm-read-flow.svg | 4 +- .../src/lsm-tutorial/00-lsm-write-flow.svg | 4 +- .../src/lsm-tutorial/week1-01-frozen.svg | 70 +++++++++++++++++++ .../src/lsm-tutorial/week1-01-overview.svg | 4 +- .../src/lsm-tutorial/week1-01-single.svg | 49 +++++++++++++ .../src/lsm-tutorial/week1-02-overview.svg | 4 +- .../src/lsm-tutorial/week1-03-overview.svg | 4 +- .../src/lsm-tutorial/week1-04-overview.svg | 4 +- .../src/lsm-tutorial/week1-05-overview.svg | 4 +- .../src/lsm-tutorial/week1-07-overview.svg | 4 +- .../src/lsm-tutorial/week1-overview.svg | 4 +- .../src/lsm-tutorial/week2-01-overview.svg | 4 +- .../src/lsm-tutorial/week2-05-overview.svg | 4 +- .../src/lsm-tutorial/week2-06-overview.svg | 4 +- .../src/lsm-tutorial/week2-overview.svg | 4 +- mini-lsm-book/src/week1-01-memtable.md | 6 +- 17 files changed, 152 insertions(+), 29 deletions(-) create mode 100644 mini-lsm-book/src/lsm-tutorial/week1-01-frozen.svg create mode 100644 mini-lsm-book/src/lsm-tutorial/week1-01-single.svg diff --git a/mini-lsm-book/src/lsm-tutorial/00-full-overview.svg b/mini-lsm-book/src/lsm-tutorial/00-full-overview.svg index 1ade719..18fbce5 100644 --- a/mini-lsm-book/src/lsm-tutorial/00-full-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/00-full-overview.svg @@ -1,6 +1,6 @@ - + @@ -8,7 +8,7 @@ - + 00-full-overview diff --git a/mini-lsm-book/src/lsm-tutorial/00-lsm-read-flow.svg b/mini-lsm-book/src/lsm-tutorial/00-lsm-read-flow.svg index 4d5c9e6..21ac95a 100644 --- a/mini-lsm-book/src/lsm-tutorial/00-lsm-read-flow.svg +++ b/mini-lsm-book/src/lsm-tutorial/00-lsm-read-flow.svg @@ -1,6 +1,6 @@ - + @@ -18,7 +18,7 @@ - + 00-lsm-read-flow diff --git a/mini-lsm-book/src/lsm-tutorial/00-lsm-write-flow.svg b/mini-lsm-book/src/lsm-tutorial/00-lsm-write-flow.svg index 8b18b90..8bb95d2 100644 --- a/mini-lsm-book/src/lsm-tutorial/00-lsm-write-flow.svg +++ b/mini-lsm-book/src/lsm-tutorial/00-lsm-write-flow.svg @@ -1,6 +1,6 @@ - + @@ -13,7 +13,7 @@ - + 00-lsm-write-flow diff --git a/mini-lsm-book/src/lsm-tutorial/week1-01-frozen.svg b/mini-lsm-book/src/lsm-tutorial/week1-01-frozen.svg new file mode 100644 index 0000000..99f4434 --- /dev/null +++ b/mini-lsm-book/src/lsm-tutorial/week1-01-frozen.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + week1-01-frozen + + + Layer 1 + + + + + + On Disk + + + + + In Memory + + + + + + + Current + + + + + + + key + value + + + + + + + + + + Frozen + + + + + + + + + + Frozen + + + + + diff --git a/mini-lsm-book/src/lsm-tutorial/week1-01-overview.svg b/mini-lsm-book/src/lsm-tutorial/week1-01-overview.svg index 94f464b..8ed4b03 100644 --- a/mini-lsm-book/src/lsm-tutorial/week1-01-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week1-01-overview.svg @@ -1,6 +1,6 @@ - + @@ -8,7 +8,7 @@ - + week1-01-overview diff --git a/mini-lsm-book/src/lsm-tutorial/week1-01-single.svg b/mini-lsm-book/src/lsm-tutorial/week1-01-single.svg new file mode 100644 index 0000000..f19b12c --- /dev/null +++ b/mini-lsm-book/src/lsm-tutorial/week1-01-single.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + week1-01-single + + + Layer 1 + + + + + + On Disk + + + + + In Memory + + + + + + + Mem + Table + + + + + + + key + value + + + + + + + + diff --git a/mini-lsm-book/src/lsm-tutorial/week1-02-overview.svg b/mini-lsm-book/src/lsm-tutorial/week1-02-overview.svg index e51b95e..ed2c9e5 100644 --- a/mini-lsm-book/src/lsm-tutorial/week1-02-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week1-02-overview.svg @@ -1,6 +1,6 @@ - + @@ -8,7 +8,7 @@ - + week1-02-overview diff --git a/mini-lsm-book/src/lsm-tutorial/week1-03-overview.svg b/mini-lsm-book/src/lsm-tutorial/week1-03-overview.svg index 0cea498..3d8116f 100644 --- a/mini-lsm-book/src/lsm-tutorial/week1-03-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week1-03-overview.svg @@ -1,6 +1,6 @@ - + @@ -8,7 +8,7 @@ - + week1-03-overview diff --git a/mini-lsm-book/src/lsm-tutorial/week1-04-overview.svg b/mini-lsm-book/src/lsm-tutorial/week1-04-overview.svg index dad25df..af84287 100644 --- a/mini-lsm-book/src/lsm-tutorial/week1-04-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week1-04-overview.svg @@ -1,6 +1,6 @@ - + @@ -8,7 +8,7 @@ - + week1-04-overview diff --git a/mini-lsm-book/src/lsm-tutorial/week1-05-overview.svg b/mini-lsm-book/src/lsm-tutorial/week1-05-overview.svg index 3410f0e..8e86d6c 100644 --- a/mini-lsm-book/src/lsm-tutorial/week1-05-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week1-05-overview.svg @@ -1,6 +1,6 @@ - + @@ -8,7 +8,7 @@ - + week1-05-overview diff --git a/mini-lsm-book/src/lsm-tutorial/week1-07-overview.svg b/mini-lsm-book/src/lsm-tutorial/week1-07-overview.svg index 49eca6e..62abf63 100644 --- a/mini-lsm-book/src/lsm-tutorial/week1-07-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week1-07-overview.svg @@ -1,6 +1,6 @@ - + @@ -8,7 +8,7 @@ - + week1-07-overview diff --git a/mini-lsm-book/src/lsm-tutorial/week1-overview.svg b/mini-lsm-book/src/lsm-tutorial/week1-overview.svg index d107b42..2a7995e 100644 --- a/mini-lsm-book/src/lsm-tutorial/week1-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week1-overview.svg @@ -1,6 +1,6 @@ - + @@ -13,7 +13,7 @@ - + week1-overview diff --git a/mini-lsm-book/src/lsm-tutorial/week2-01-overview.svg b/mini-lsm-book/src/lsm-tutorial/week2-01-overview.svg index aeb1328..1bfa71d 100644 --- a/mini-lsm-book/src/lsm-tutorial/week2-01-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week2-01-overview.svg @@ -1,6 +1,6 @@ - + @@ -8,7 +8,7 @@ - + week2-01-overview diff --git a/mini-lsm-book/src/lsm-tutorial/week2-05-overview.svg b/mini-lsm-book/src/lsm-tutorial/week2-05-overview.svg index 9a93193..cbc9c3b 100644 --- a/mini-lsm-book/src/lsm-tutorial/week2-05-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week2-05-overview.svg @@ -1,6 +1,6 @@ - + @@ -13,7 +13,7 @@ - + week2-05-overview diff --git a/mini-lsm-book/src/lsm-tutorial/week2-06-overview.svg b/mini-lsm-book/src/lsm-tutorial/week2-06-overview.svg index 1a80963..3cc1679 100644 --- a/mini-lsm-book/src/lsm-tutorial/week2-06-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week2-06-overview.svg @@ -1,6 +1,6 @@ - + @@ -8,7 +8,7 @@ - + week2-06-overview diff --git a/mini-lsm-book/src/lsm-tutorial/week2-overview.svg b/mini-lsm-book/src/lsm-tutorial/week2-overview.svg index b59a066..dcb0560 100644 --- a/mini-lsm-book/src/lsm-tutorial/week2-overview.svg +++ b/mini-lsm-book/src/lsm-tutorial/week2-overview.svg @@ -1,6 +1,6 @@ - + @@ -13,7 +13,7 @@ - + week2-overview diff --git a/mini-lsm-book/src/week1-01-memtable.md b/mini-lsm-book/src/week1-01-memtable.md index 3c646fe..8a98b1f 100644 --- a/mini-lsm-book/src/week1-01-memtable.md +++ b/mini-lsm-book/src/week1-01-memtable.md @@ -37,7 +37,9 @@ Now, we will add our first data structure, the memtable, to the LSM state. In `L Taking a look at `lsm_storage.rs`, you will find there are two structures that represents a storage engine: `MiniLSM` and `LsmStorageInner`. `MiniLSM` is a thin wrapper for `LsmStorageInner`. You will implement most of the functionalities in `LsmStorageInner`, until week 2 compaction. -`LsmStorageState` stores the current structure of the LSM storage engine. For now, we will only use the `memtable` field, which stores the current memtable. In this task, you will need to implement `LsmStorageInner::get`, `LsmStorageInner::put`, and `LsmStorageInner::delete`. All of them should directly dispatch the request to the current memtable. +`LsmStorageState` stores the current structure of the LSM storage engine. For now, we will only use the `memtable` field, which stores the current mutable memtable. In this task, you will need to implement `LsmStorageInner::get`, `LsmStorageInner::put`, and `LsmStorageInner::delete`. All of them should directly dispatch the request to the current memtable. + +![one memtable LSM](./lsm-tutorial/week1-01-single.svg) Your `delete` implementation should simply put an empty slice for that key, and we call it a *delete tombstone*. Your `get` implementation should handle this case correspondingly. @@ -52,6 +54,8 @@ src/lsm_storage.rs src/mem_table.rs ``` +![one memtable LSM](./lsm-tutorial/week1-01-frozen.svg) + A memtable cannot continuously grow in size, and we will need to freeze them (and later flush to the disk) when it reaches the size limit. You may find the memtable size limit, which is equal to the SST size limit, in the `LsmStorageOptions`. This is not a hard limit and you should freeze the memtable at best effort. In this task, you will need to compute the approximate memtable size when put/delete a key in the memtable. This can be computed by simply adding the total number of bytes of keys and values when `put` is called. Is a key is put twice, though the skiplist only contains the latest value, you may count it twice in the approximate memtable size. Once a memtable reaches the limit, you should call `force_freeze_memtable` to freeze the memtable and create a new one.