Struct bonsaidb_local::config::KeyValuePersistence
source · [−]pub struct KeyValuePersistence(_);Expand description
Rules for persisting key-value changes. Default persistence is to immediately persist all changes. While this ensures data integrity, the overhead of the key-value store can be significantly reduced by utilizing lazy persistence strategies that delay writing changes until certain thresholds have been met.
Immediate persistence
The default persistence mode will trigger commits always:
assert!(!KeyValuePersistence::default().should_commit(0, Duration::ZERO));
assert!(KeyValuePersistence::default().should_commit(1, Duration::ZERO));Lazy persistence
Lazy persistence allows setting multiple thresholds, allowing for customized behavior that can help tune performance, especially under write-heavy loads.
It is good practice to include one PersistenceThreshold that has no
duration, as it will ensure that the in-memory cache cannot exceed a certain
size. This number is counted for each database indepenently.
let persistence = KeyValuePersistence::lazy([
PersistenceThreshold::after_changes(1).and_duration(Duration::from_secs(120)),
PersistenceThreshold::after_changes(10).and_duration(Duration::from_secs(10)),
PersistenceThreshold::after_changes(100),
]);
// After 1 change and 60 seconds, no changes would be committed:
assert!(!persistence.should_commit(1, Duration::from_secs(60)));
// But on or after 120 seconds, that change will be committed:
assert!(persistence.should_commit(1, Duration::from_secs(120)));
// After 10 changes and 10 seconds, changes will be committed:
assert!(persistence.should_commit(10, Duration::from_secs(10)));
// Once 100 changes have been accumulated, this ruleset will always commit
// regardless of duration.
assert!(persistence.should_commit(100, Duration::ZERO));Implementations
sourceimpl KeyValuePersistence
impl KeyValuePersistence
sourcepub fn lazy<II>(rules: II) -> Self where
II: IntoIterator<Item = PersistenceThreshold>,
pub fn lazy<II>(rules: II) -> Self where
II: IntoIterator<Item = PersistenceThreshold>,
Returns a ruleset that lazily commits data based on a list of thresholds.
sourcepub fn should_commit(
&self,
number_of_changes: usize,
elapsed_since_last_commit: Duration
) -> bool
pub fn should_commit(
&self,
number_of_changes: usize,
elapsed_since_last_commit: Duration
) -> bool
Returns true if these rules determine that the outstanding changes should be persisted.
Trait Implementations
sourceimpl Clone for KeyValuePersistence
impl Clone for KeyValuePersistence
sourcefn clone(&self) -> KeyValuePersistence
fn clone(&self) -> KeyValuePersistence
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source. Read more
sourceimpl Debug for KeyValuePersistence
impl Debug for KeyValuePersistence
sourceimpl Default for KeyValuePersistence
impl Default for KeyValuePersistence
sourcefn default() -> Self
fn default() -> Self
Returns KeyValuePersistence::immediate().
Auto Trait Implementations
impl RefUnwindSafe for KeyValuePersistence
impl Send for KeyValuePersistence
impl Sync for KeyValuePersistence
impl Unpin for KeyValuePersistence
impl UnwindSafe for KeyValuePersistence
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<T> Pointable for T
impl<T> Pointable for T
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into)Uses borrowed data to replace owned data, usually by cloning. Read more
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
pub fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber to this type, returning a
WithDispatch wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber to this type, returning a
WithDispatch wrapper. Read more