mmtkvdb
is a crate for Rust which provides a memory-mapped key-value
database. It uses LMDB and links with an existing liblmdb
on the system.
Because of how memory-mapped I/O is being used and also because of certain
assumptions of the underlying LMDB API, opening environments and databases
requires unsafe
Rust (i.e. the programmer must ensure that certain
preconditions are met that cannot be enforced by the compiler to avoid
undefined behavior). If you aim to program in safe Rust only, this Rust
library is not suitable for you.
For documentation on how to use this crate, refer to the example in
src/lib.rs
.
See contained LICENSE
file (MIT License).
Txn::cursor_get_current_value_count
must only be called for
databases with KeysDuplicate
. This is enforced by the methods
signature now and could have been resulting in UB previously.EnvRw::drop_db
has been fixed and code has been
cleaned up and properly documented to avoid this in the future.mdb_cursor_close
being called after
mdb_dbi_close
, which is not allowed for write transaction by LMDB's
API specification. This has been fixed.Send
and Sync
have been added for
EnvRo
, EnvRw
, Db
, and Cursor
.EnvRw::drop_db
will require &mut self
in future.unsafe_op_in_unsafe_fn
lint and added corresponding unsafe
blocksSAFETY
comments in src/lib.rs
unsafe
and documented
their use properlyTxnRo
is now !Sync
(but still Send
); users are expected to use a
mutex where synchronization is requiredTxn::cursor_search_key_get_key
Txn
trait, which allow moving cursors
without retrieving dataStorable
for ()
(use NoKey
and/or NoValue
instead of ()
)NoKey
and NoValue
unit structs to replace ()
as type for
databases which have no key or no value, respectively (this deprecates
the implementation of Storable
for ()
)TxnRw::on_commit
allows registering a closure that will be
executed on Txn::commit
before the transaction is actually committedFor older changes, refer to the CHANGELOG.md
file.