Trait kvdb::KeyValueDB
source · [−]pub trait KeyValueDB: Sync + Send {
fn get(&self, col: Option<u32>, key: &[u8]) -> Result<Option<DBValue>>;
fn get_by_prefix(
&self,
col: Option<u32>,
prefix: &[u8]
) -> Option<Box<[u8]>>;
fn write_buffered(&self, transaction: DBTransaction);
fn flush(&self) -> Result<()>;
fn iter<'a>(
&'a self,
col: Option<u32>
) -> Box<dyn Iterator<Item = (Box<[u8]>, Box<[u8]>)> + 'a>;
fn iter_from_prefix<'a>(
&'a self,
col: Option<u32>,
prefix: &'a [u8]
) -> Box<dyn Iterator<Item = (Box<[u8]>, Box<[u8]>)> + 'a>;
fn restore(&self, new_db: &str) -> Result<()>;
fn transaction(&self) -> DBTransaction { ... }
fn write(&self, transaction: DBTransaction) -> Result<()> { ... }
}
Expand description
Generic key-value database.
This makes a distinction between “buffered” and “flushed” values. Values which have been written can always be read, but may be present in an in-memory buffer. Values which have been flushed have been moved to backing storage, like a RocksDB instance. There are certain operations which are only guaranteed to operate on flushed data and not buffered, although implementations may differ in this regard.
The contents of an interior buffer may be explicitly flushed using the flush
method.
The KeyValueDB
also deals in “column families”, which can be thought of as distinct
stores within a database. Keys written in one column family will not be accessible from
any other. The number of column families must be specified at initialization, with a
differing interface for each database. The None
argument in place of a column index
is always supported.
The API laid out here, along with the Sync
bound implies interior synchronization for
implementation.
Required methods
Get a value by partial key. Only works for flushed data.
fn write_buffered(&self, transaction: DBTransaction)
fn write_buffered(&self, transaction: DBTransaction)
Write a transaction of changes to the buffer.
Iterate over flushed data for a given column.
Iterate over flushed data for a given column, starting from a given prefix.
Provided methods
fn transaction(&self) -> DBTransaction
fn transaction(&self) -> DBTransaction
Helper to create a new transaction.
fn write(&self, transaction: DBTransaction) -> Result<()>
fn write(&self, transaction: DBTransaction) -> Result<()>
Write a transaction of changes to the backing store.