Struct pancake_engine_serial::lsm::lsm_tree::LSMTree
source · pub struct LSMTree<K, V> {
memlog: WritableMemLog<K, OptDatum<V>>,
sstables: Vec<SSTable<K, OptDatum<V>>>,
sstables_dir: AntiCollisionParentDir,
}Expand description
An LSMTree is an abstraction of a sorted dictionary.
API:
The exposed operations are: put one, get one, get range.
Values are immutable. They cannot be modified in-place, and must be replaced.
Internals:
One [WritableMemLog] holds the most recently inserted {key: value} in a sorted in-memory table.
The [WritableMemLog] is occasionally flushed into an [SSTable].
Multiple [SSTable]s are occasionally compacted into one [SSTable].
Querying:
A put operation accesses the Memtable of the [WritableMemLog] only.
A get operation generally accesses the [WritableMemLog] and all [SSTable]s.
When the same key exists in multiple internal tables, only the result from the newest table is retrieved.
Fields§
§memlog: WritableMemLog<K, OptDatum<V>>§sstables: Vec<SSTable<K, OptDatum<V>>>From older to newer.
sstables_dir: AntiCollisionParentDirImplementations§
source§impl<K, V> LSMTree<K, V>
impl<K, V> LSMTree<K, V>
pub fn maybe_run_gc(&mut self) -> Result<()>
fn flush_memtable(&mut self) -> Result<()>
sourcefn compact_sstables(&mut self) -> Result<()>
fn compact_sstables(&mut self) -> Result<()>
For now, always compact all SSTables into one SSTable.
source§impl<K, V> LSMTree<K, V>
impl<K, V> LSMTree<K, V>
pub fn put(&mut self, k: K, v: Option<V>) -> Result<()>
pub fn get_one<'a, Q>(&'a self, k: &'a Q) -> Option<Entry<'a, K, V>>
pub fn get_range<'a, Q>(
&'a self,
k_lo: Option<&'a Q>,
k_hi: Option<&'a Q>
) -> impl 'a + Iterator<Item = Entry<'a, K, V>>where
K: PartialOrd<Q>,
pub fn get_whole_range<'a>( &'a self ) -> impl 'a + Iterator<Item = Entry<'a, K, V>>
Auto Trait Implementations§
impl<K, V> RefUnwindSafe for LSMTree<K, V>where
K: RefUnwindSafe,
V: RefUnwindSafe,
impl<K, V> Send for LSMTree<K, V>
impl<K, V> Sync for LSMTree<K, V>
impl<K, V> Unpin for LSMTree<K, V>
impl<K, V> UnwindSafe for LSMTree<K, V>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more