mmtkvdb 0.1.0

Memory-mapped key-value database using LMDB
Documentation

mmtkvdb

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.

Safety

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.

API Documentation

For documentation on how to use this crate, refer to the example in src/lib.rs.

License

See contained LICENSE file (MIT License).

Changelog

  • 2022-05-08: Version 0.1.0
    • Removed 'static bound from Storable trait
    • Improved documentation regarding required unsafe use of this library
  • 2022-05-05: Version 0.0.7
    • Fixed method cursor_set_key_search_value_get_value, which was wrongly defined and documented
    • Added test function with various tests for cursors
  • 2022-05-01: Version 0.0.6
    • Fixed build error on nightly Rust by importing core::ffi::{c_size_t, c_int, c_uint} for now instead of using std::ffi (see commit 07ea143f96 in Rust for explanation)
  • 2022-04-30: Version 0.0.5
    • Method EnvRo::txn moved to Env trait and renamed to Env::txn_ro.
    • Method EnvRw::txn renamed to EnvRw::txn_rw.
    • Improved documentation of EnvRo and EnvRw (doc comment explains how to create them now, i.e. how to start a transaction)
  • 2022-04-22: Version 0.0.4
    • No longer use PhantomData to store unit-like structs which indicate constraints on key uniqueness in DbOptions and Db (KeysUnique and KeysDuplicate are Copy now and contained directly)
    • Minor fixes in documentation
      • Changed argument name for passing DbOptions to Env::open_dbs
      • Added link to Sized in doc comment on private trait IsType
  • 2022-04-16: Version 0.0.3
    • Avoid transmute on references: To avoid issues with (possible) future changes in Rust, the storable module doesn't use transmute on references anymore. Instead, std::slice::from_raw_parts, std::str::from_utf8_unchecked, and str::as_bytes() are used.
  • 2022-04-11: Version 0.0.2
    • Moved Storable, StorableConstBytesLen, and StorableWithOwned traits to new (public) storable module (but Storable gets re-exported by crate-level module)
    • Added method to clear stale readers
    • Improved documentation on (un)safety
    • Avoid unnecessary re-alignment in some cases of u8 and i8
    • Make type bool storable (i.e. implement Storable for bool)
    • Added documentation comments for private items
    • Code cleanup (moved private IsType trait to helpers module)
  • 2022-04-10: Version 0.0.1
    • First release