Struct bonsaidb::local::config::KeyValuePersistence
source · 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
impl KeyValuePersistence
sourcepub const fn immediate() -> KeyValuePersistence
pub const fn immediate() -> KeyValuePersistence
Returns a ruleset that commits all changes immediately.
sourcepub fn lazy<II>(rules: II) -> KeyValuePersistencewhere
II: IntoIterator<Item = PersistenceThreshold>,
pub fn lazy<II>(rules: II) -> KeyValuePersistencewhere
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§
source§impl Clone for KeyValuePersistence
impl Clone for KeyValuePersistence
source§fn clone(&self) -> KeyValuePersistence
fn clone(&self) -> KeyValuePersistence
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for KeyValuePersistence
impl Debug for KeyValuePersistence
source§impl Default for KeyValuePersistence
impl Default for KeyValuePersistence
source§fn default() -> KeyValuePersistence
fn default() -> KeyValuePersistence
Returns KeyValuePersistence::immediate()
.