Struct typed_store::rocks::DBMap
source · pub struct DBMap<K, V> {
pub rocksdb: Arc<RocksDB>,
pub opts: ReadWriteOptions,
/* private fields */
}
Expand description
An interface to a rocksDB database, keyed by a columnfamily
Fields§
§rocksdb: Arc<RocksDB>
§opts: ReadWriteOptions
Implementations§
source§impl<K, V> DBMap<K, V>
impl<K, V> DBMap<K, V>
sourcepub fn open<P: AsRef<Path>>(
path: P,
metric_conf: MetricConf,
db_options: Option<Options>,
opt_cf: Option<&str>,
rw_options: &ReadWriteOptions
) -> Result<Self, TypedStoreError>
pub fn open<P: AsRef<Path>>( path: P, metric_conf: MetricConf, db_options: Option<Options>, opt_cf: Option<&str>, rw_options: &ReadWriteOptions ) -> Result<Self, TypedStoreError>
Opens a database from a path, with specific options and an optional column family.
This database is used to perform operations on single column family, and parametrizes
all operations in DBBatch
when writing across column families.
sourcepub fn reopen(
db: &Arc<RocksDB>,
opt_cf: Option<&str>,
rw_options: &ReadWriteOptions
) -> Result<Self, TypedStoreError>
pub fn reopen( db: &Arc<RocksDB>, opt_cf: Option<&str>, rw_options: &ReadWriteOptions ) -> Result<Self, TypedStoreError>
Reopens an open database as a typed map operating under a specific column family. if no column family is passed, the default column family is used.
use typed_store::rocks::*;
use typed_store::metrics::DBMetrics;
use tempfile::tempdir;
use prometheus::Registry;
use std::sync::Arc;
use core::fmt::Error;
#[tokio::main]
async fn main() -> Result<(), Error> {
/// Open the DB with all needed column families first.
let rocks = open_cf(tempdir().unwrap(), None, MetricConf::default(), &["First_CF", "Second_CF"]).unwrap();
/// Attach the column families to specific maps.
let db_cf_1 = DBMap::<u32,u32>::reopen(&rocks, Some("First_CF"), &ReadWriteOptions::default()).expect("Failed to open storage");
let db_cf_2 = DBMap::<u32,u32>::reopen(&rocks, Some("Second_CF"), &ReadWriteOptions::default()).expect("Failed to open storage");
Ok(())
}
pub fn batch(&self) -> DBBatch
pub fn compact_range<J: Serialize>( &self, start: &J, end: &J ) -> Result<(), TypedStoreError>
pub fn compact_range_raw( &self, cf_name: &str, start: Vec<u8>, end: Vec<u8> ) -> Result<(), TypedStoreError>
pub fn compact_range_to_bottom<J: Serialize>( &self, start: &J, end: &J ) -> Result<(), TypedStoreError>
pub fn cf(&self) -> Arc<BoundColumnFamily<'_>>
pub fn iterator_cf(&self) -> RocksDBIter<'_> ⓘ
pub fn flush(&self) -> Result<(), TypedStoreError>
pub fn set_options(&self, opts: &[(&str, &str)]) -> Result<(), Error>
pub fn transaction(&self) -> Result<DBTransaction<'_>, TypedStoreError>
pub fn transaction_without_snapshot( &self ) -> Result<DBTransaction<'_>, TypedStoreError>
pub fn checkpoint_db(&self, path: &Path) -> Result<(), TypedStoreError>
pub fn snapshot(&self) -> Result<RocksDBSnapshot<'_>, TypedStoreError>
pub fn table_summary(&self) -> Result<TableSummary>
Trait Implementations§
source§impl<'a, K, V> Map<'a, K, V> for DBMap<K, V>
impl<'a, K, V> Map<'a, K, V> for DBMap<K, V>
source§fn unsafe_clear(&self) -> Result<(), TypedStoreError>
fn unsafe_clear(&self) -> Result<(), TypedStoreError>
This method first drops the existing column family and then creates a new one with the same name. The two operations are not atomic and hence it is possible to get into a race condition where the column family has been dropped but new one is not created yet
source§fn schedule_delete_all(&self) -> Result<(), TypedStoreError>
fn schedule_delete_all(&self) -> Result<(), TypedStoreError>
Writes a range delete tombstone to delete all entries in the db map If the DBMap is configured with ignore_range_deletions set to false, the effect of this write will be visible immediately i.e. you won’t see old values when you do a lookup or scan. But if it is configured with ignore_range_deletions set to true, the old value are visible until compaction actually deletes them which will happen sometime after. By default ignore_range_deletions is set to true on a DBMap (unless it is overriden in the config), so please use this function with caution
source§fn unbounded_iter(&'a self) -> Self::Iterator
fn unbounded_iter(&'a self) -> Self::Iterator
Returns an unbounded iterator visiting each key-value pair in the map. This is potentially unsafe as it can perform a full table scan
source§fn iter_with_bounds(
&'a self,
lower_bound: Option<K>,
upper_bound: Option<K>
) -> Self::Iterator
fn iter_with_bounds( &'a self, lower_bound: Option<K>, upper_bound: Option<K> ) -> Self::Iterator
Returns an iterator visiting each key-value pair in the map. By proving bounds of the scan range, RocksDB scan avoid unnecessary scans. Lower bound is inclusive, while upper bound is exclusive.
source§fn range_iter(&'a self, range: impl RangeBounds<K>) -> Self::Iterator
fn range_iter(&'a self, range: impl RangeBounds<K>) -> Self::Iterator
Similar to iter_with_bounds
but allows specifying inclusivity/exclusivity of ranges explicitly.
TODO: find better name
source§fn multi_get_raw_bytes<J>(
&self,
keys: impl IntoIterator<Item = J>
) -> Result<Vec<Option<Vec<u8>>>, TypedStoreError>where
J: Borrow<K>,
fn multi_get_raw_bytes<J>(
&self,
keys: impl IntoIterator<Item = J>
) -> Result<Vec<Option<Vec<u8>>>, TypedStoreError>where
J: Borrow<K>,
Returns a vector of raw values corresponding to the keys provided.
source§fn multi_get<J>(
&self,
keys: impl IntoIterator<Item = J>
) -> Result<Vec<Option<V>>, TypedStoreError>where
J: Borrow<K>,
fn multi_get<J>(
&self,
keys: impl IntoIterator<Item = J>
) -> Result<Vec<Option<V>>, TypedStoreError>where
J: Borrow<K>,
Returns a vector of values corresponding to the keys provided.
source§fn chunked_multi_get<J>(
&self,
keys: impl IntoIterator<Item = J>,
chunk_size: usize
) -> Result<Vec<Option<V>>, TypedStoreError>where
J: Borrow<K>,
fn chunked_multi_get<J>(
&self,
keys: impl IntoIterator<Item = J>,
chunk_size: usize
) -> Result<Vec<Option<V>>, TypedStoreError>where
J: Borrow<K>,
Returns a vector of values corresponding to the keys provided.
source§fn multi_insert<J, U>(
&self,
key_val_pairs: impl IntoIterator<Item = (J, U)>
) -> Result<(), Self::Error>
fn multi_insert<J, U>( &self, key_val_pairs: impl IntoIterator<Item = (J, U)> ) -> Result<(), Self::Error>
Convenience method for batch insertion
source§fn multi_remove<J>(
&self,
keys: impl IntoIterator<Item = J>
) -> Result<(), Self::Error>where
J: Borrow<K>,
fn multi_remove<J>(
&self,
keys: impl IntoIterator<Item = J>
) -> Result<(), Self::Error>where
J: Borrow<K>,
Convenience method for batch removal
source§fn try_catch_up_with_primary(&self) -> Result<(), Self::Error>
fn try_catch_up_with_primary(&self) -> Result<(), Self::Error>
Try to catch up with primary when running as secondary
type Error = TypedStoreError
type Iterator = Iter<'a, K, V>
type SafeIterator = SafeIter<'a, K, V>
type Keys = Keys<'a, K>
type Values = Values<'a, V>
source§fn contains_key(&self, key: &K) -> Result<bool, TypedStoreError>
fn contains_key(&self, key: &K) -> Result<bool, TypedStoreError>
source§fn multi_contains_keys<J>(
&self,
keys: impl IntoIterator<Item = J>
) -> Result<Vec<bool>, Self::Error>where
J: Borrow<K>,
fn multi_contains_keys<J>(
&self,
keys: impl IntoIterator<Item = J>
) -> Result<Vec<bool>, Self::Error>where
J: Borrow<K>,
source§fn get(&self, key: &K) -> Result<Option<V>, TypedStoreError>
fn get(&self, key: &K) -> Result<Option<V>, TypedStoreError>
source§fn get_raw_bytes(&self, key: &K) -> Result<Option<Vec<u8>>, TypedStoreError>
fn get_raw_bytes(&self, key: &K) -> Result<Option<Vec<u8>>, TypedStoreError>
source§fn insert(&self, key: &K, value: &V) -> Result<(), TypedStoreError>
fn insert(&self, key: &K, value: &V) -> Result<(), TypedStoreError>
source§fn remove(&self, key: &K) -> Result<(), TypedStoreError>
fn remove(&self, key: &K) -> Result<(), TypedStoreError>
source§fn safe_iter(&'a self) -> Self::SafeIterator
fn safe_iter(&'a self) -> Self::SafeIterator
iter
but performs status check.fn safe_iter_with_bounds( &'a self, lower_bound: Option<K>, upper_bound: Option<K> ) -> Self::SafeIterator
fn safe_range_iter(&'a self, range: impl RangeBounds<K>) -> Self::SafeIterator
source§impl<J, K, U, V> TryExtend<(J, U)> for DBMap<K, V>
impl<J, K, U, V> TryExtend<(J, U)> for DBMap<K, V>
§type Error = TypedStoreError
type Error = TypedStoreError
impl<K: Send, V: Send> Send for DBMap<K, V>
Auto Trait Implementations§
impl<K, V> !RefUnwindSafe for DBMap<K, V>
impl<K, V> Sync for DBMap<K, V>
impl<K, V> Unpin for DBMap<K, V>
impl<K, V> !UnwindSafe for DBMap<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
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.