@@ -9,7 +9,11 @@ Build a simple key-value storage engine in a week!
|
|||||||
The tutorial is available at [https://skyzh.github.io/mini-lsm](https://skyzh.github.io/mini-lsm). You can use the provided starter
|
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.
|
code to kick off your project, and follow the tutorial to implement the LSM tree.
|
||||||
|
|
||||||
Join the mini-lsm community: [](https://skyzh.dev/join/discord)
|
## Community
|
||||||
|
|
||||||
|
You may join skyzh's Discord server and study with the mini-lsm community.
|
||||||
|
|
||||||
|
[](https://skyzh.dev/join/discord)
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
|
|||||||
@@ -218,6 +218,9 @@ impl LsmStorage {
|
|||||||
|
|
||||||
let iter = TwoMergeIterator::create(memtable_iter, table_iter)?;
|
let iter = TwoMergeIterator::create(memtable_iter, table_iter)?;
|
||||||
|
|
||||||
Ok(FusedIterator::new(LsmIterator::new(iter, map_bound(upper))?))
|
Ok(FusedIterator::new(LsmIterator::new(
|
||||||
|
iter,
|
||||||
|
map_bound(upper),
|
||||||
|
)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,9 @@ impl LsmStorage {
|
|||||||
let mut iters = Vec::new();
|
let mut iters = Vec::new();
|
||||||
iters.reserve(tables.len());
|
iters.reserve(tables.len());
|
||||||
for table in tables.iter() {
|
for table in tables.iter() {
|
||||||
iters.push(Box::new(SsTableIterator::create_and_seek_to_first(table.clone())?));
|
iters.push(Box::new(SsTableIterator::create_and_seek_to_first(
|
||||||
|
table.clone(),
|
||||||
|
)?));
|
||||||
}
|
}
|
||||||
let mut iter = MergeIterator::create(iters);
|
let mut iter = MergeIterator::create(iters);
|
||||||
|
|
||||||
|
|||||||
@@ -166,8 +166,7 @@ impl LeveledCompactionController {
|
|||||||
.copied()
|
.copied()
|
||||||
.collect::<HashSet<_>>();
|
.collect::<HashSet<_>>();
|
||||||
if let Some(upper_level) = task.upper_level {
|
if let Some(upper_level) = task.upper_level {
|
||||||
let new_upper_level_ssts =
|
let new_upper_level_ssts = snapshot.levels[upper_level - 1]
|
||||||
snapshot.levels[upper_level - 1]
|
|
||||||
.1
|
.1
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|x| {
|
.filter_map(|x| {
|
||||||
|
|||||||
@@ -223,6 +223,9 @@ impl LsmStorage {
|
|||||||
|
|
||||||
let iter = TwoMergeIterator::create(memtable_iter, table_iter)?;
|
let iter = TwoMergeIterator::create(memtable_iter, table_iter)?;
|
||||||
|
|
||||||
Ok(FusedIterator::new(LsmIterator::new(iter, map_bound(upper))?))
|
Ok(FusedIterator::new(LsmIterator::new(
|
||||||
|
iter,
|
||||||
|
map_bound(upper),
|
||||||
|
)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user