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: AntiCollisionParentDir

Implementations§

source§

impl<K, V> LSMTree<K, V>
where K: Serializable + Ord + Clone, OptDatum<V>: Serializable,

source

pub fn maybe_run_gc(&mut self) -> Result<()>

source

fn flush_memtable(&mut self) -> Result<()>

source

fn compact_sstables(&mut self) -> Result<()>

For now, always compact all SSTables into one SSTable.

source§

impl<K, V> LSMTree<K, V>
where K: Serializable + Ord + Clone, OptDatum<V>: Serializable,

source

pub fn put(&mut self, k: K, v: Option<V>) -> Result<()>

source

pub fn get_one<'a, Q>(&'a self, k: &'a Q) -> Option<Entry<'a, K, V>>
where K: Borrow<Q> + PartialOrd<Q>, Q: Ord,

source

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>,

source

pub fn get_whole_range<'a>( &'a self ) -> impl 'a + Iterator<Item = Entry<'a, K, V>>

source§

impl<K, V> LSMTree<K, V>
where K: Serializable + Ord + Clone, OptDatum<V>: Serializable,

source

pub fn load_or_new<P: AsRef<Path>>(lsm_dir_path: P) -> Result<Self>

Auto Trait Implementations§

§

impl<K, V> RefUnwindSafe for LSMTree<K, V>

§

impl<K, V> Send for LSMTree<K, V>
where K: Send, V: Send,

§

impl<K, V> Sync for LSMTree<K, V>
where K: Sync, V: Sync,

§

impl<K, V> Unpin for LSMTree<K, V>
where K: Unpin, V: Unpin,

§

impl<K, V> UnwindSafe for LSMTree<K, V>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Erased for T