mmtkvdb 0.3.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-26: Version 0.3.0
    • Storing owned types differently
      • Removed implementation of Storable for certain smart pointers such as Vec<u8> and String
      • New traits BorrowStorable and StorableRef which handle storing tuples in a more efficient way (without unnecessary cloning/copying)
    • Improved documentation in module storable
    • Minor style change: Renamed type arg from X to T for generic structs in owning_pointer
  • 2022-05-15: Version 0.2.0
    • Trait Env was removed. Instead, EnvRw implements Deref<Target=EnvRo>, which makes all methods of EnvRo available on EnvRw as well. Converting an EnvRw into EnvRo is now simply done by cloning.
    • Methods TxnRw::cursor_delete_current and TxnRw::cursor_delete_current_key did not properly defer closing the affected databases. This might have caused database corruption when the cursor and (all clones of) the database handle are dropped before the transaction commits or aborts. This has been fixed.
    • Added support for nested transactions.
    • Suppress warnings regarding unused macro rules when using rustc 1.62.0-nightly (77652b9ef 2022-05-06) (the unused macro rules are kept for potential future use).
    • Improved documentation:
      • The doc comment for TxnRw contained a misleading (partial) paragraph which was removed.
      • Improved doc comments regarding duplicate keys on methods DbOptions::keys_unique, DbOptions::keys_duplicate, DbOptions::has_duplicate_keys, TxnRw::put, TxnRw::put_unless_key_exists, TxnRw::put_unless_pair_exists.
      • The private doc comment on DbBackend has been extended to explain the mechanism of TxnRw::used_dbs, which defers closing of databases.
    • Internal changes:
      • Method TxnBackend::close_cursors will finish closing the cursor before releasing the lock on the CursorBackend::closed flag (this should not affect runtime behavior).
      • EnvRo is now used in some places where EnvBackend has been used internally (this allows implementing Deref<Target=EnvRo> for EnvRw).
  • 2022-05-08: Version 0.1.0
    • Removed 'static bound from Storable trait
    • Improved documentation regarding required unsafe use of this library

For older changes, refer to the CHANGELOG.md file.