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,
is_deprecated: bool,
) -> Result<Self, TypedStoreError>
pub fn reopen( db: &Arc<RocksDB>, opt_cf: Option<&str>, rw_options: &ReadWriteOptions, is_deprecated: bool, ) -> 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 core::fmt::Error;
use std::sync::Arc;
use prometheus::Registry;
use tempfile::tempdir;
use typed_store::{metrics::DBMetrics, rocks::*};
#[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(),
false,
)
.expect("Failed to open storage");
let db_cf_2 = DBMap::<u32, u32>::reopen(
&rocks,
Some("Second_CF"),
&ReadWriteOptions::default(),
false,
)
.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 delete_file_in_range(&self, from: &K, to: &K) -> Result<(), TypedStoreError>
fn delete_file_in_range(&self, from: &K, to: &K) -> Result<(), TypedStoreError>
Deletes a range of keys between from
(inclusive) and to
(non-inclusive) by immediately deleting any sst files whose key
range overlaps with the range. Files whose range only partially
overlaps with the range are not deleted. This can be useful for
quickly removing a large amount of data without having
to delete individual keys. Only files at level 1 or higher are
considered ( Level 0 files are skipped). It doesn’t guarantee that
all keys in the range are deleted, as there might be keys in files
that weren’t entirely within the range.
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 overridden 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>
Source§type Error = TypedStoreError
type Error = TypedStoreError
impl<K: Send, V: Send> Send for DBMap<K, V>
Auto Trait Implementations§
impl<K, V> Freeze for DBMap<K, V>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§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.