pub struct KeyValuePersistence(/* private fields */);
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§

source§

impl KeyValuePersistence

source

pub const fn immediate() -> KeyValuePersistence

Returns a ruleset that commits all changes immediately.

source

pub fn lazy<II>(rules: II) -> KeyValuePersistence

Returns a ruleset that lazily commits data based on a list of thresholds.

source

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§

source§

impl Clone for KeyValuePersistence

source§

fn clone(&self) -> KeyValuePersistence

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for KeyValuePersistence

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl Default for KeyValuePersistence

Auto Trait Implementations§

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32 ) -> TaggedParser<'a, Implicit, Self, E>

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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more