libmdbx v0.9.4 Release NotesRelease Date: 2021-03-18 // 3 months ago
- Engage new terminology (https://github.com/erthink/libmdbx/issues/137).
- Resolve few TODOs (https://github.com/erthink/libmdbx/issues/124, https://github.com/erthink/libmdbx/issues/127, https://github.com/erthink/libmdbx/issues/115).
- Finalize C++ API (few typos and trivia bugs are still likely for now).
- Packages for ROSA Linux, ALT Linux, Fedora/RHEL, Debian/Ubuntu.
- Mahlon E. Smith for Ruby bindings.
- Alex Sharov for mdbx-go and for bug reporting.
- Artem Vorotnikov for bug reporting and PR.
🆕 New features:
MDBX_DISABLE_PAGECHECKSbuild option to disable some checks to reduce an overhead and detection probability of database corruption to a values closer to the LMDB. The
MDBX_DISABLE_PAGECHECKS=1provides a performance boost of about 10% in CRUD scenarios, and conjointly with the
MDBX_TXN_CHECKOWNER=0options can yield up to 30% more performance compared to LMDB.
- Using float point (exponential quantized) representation for internal 16-bit values of grow step and shrink threshold when huge ones (https://github.com/erthink/libmdbx/issues/166). To minimize the impact on compatibility, only the odd values inside the upper half of the range (i.e. 32769..65533) are used for the new representation.
- Added the
mdbx_dropsimilar to LMDB command-line tool to purge or delete (sub)database(s).
- Ruby bindings is available now by Mahlon E. Smith.
MDBX_ENABLE_MADVISEbuild option which controls the use of POSIX
madvise()hints and friends.
- The internal node sizes were refined, resulting in a reduction in large/overflow pages in some use cases and a slight increase in limits for a keys size.
- Fixed performance regression due non-optimal C11 atomics usage (https://github.com/erthink/libmdbx/issues/160).
- Fixed "reincarnation" of subDB after it deletion (https://github.com/erthink/libmdbx/issues/168).
- Fixed (disallowing) implicit subDB deletion via operations on
- Fixed a crash of
mdbx_env_info_ex()in case of a call for a non-open environment (https://github.com/erthink/libmdbx/issues/171).
- Fixed the selecting/adjustment values inside
mdbx_env_set_geometry()for implicit out-of-range cases (https://github.com/erthink/libmdbx/issues/170).
Previous changes from v0.9.3
- Mahlon E. Smith for FreeBSD port of libmdbx.
- 장세연 for bug fixing and PR.
- Clément Renault for Heed fully typed Rust wrapper.
- Alex Sharov for bug reporting.
- Noel Kuntze for bug reporting.
✂ Removed options and features:
MDBX_HUGE_TRANSACTIONSbuild-option (now no longer required).
🆕 New features:
- Package for FreeBSD is available now by Mahlon E. Smith.
- New API functions to get/set various options (https://github.com/erthink/libmdbx/issues/128):
- the maximum number of named databases for the environment;
- the maximum number of threads/reader slots;
- threshold (since the last unsteady commit) to force flush the data buffers to disk;
- relative period (since the last unsteady commit) to force flush the data buffers to disk;
- limit to grow a list of reclaimed/recycled page's numbers for finding a sequence of contiguous pages for large data items;
- limit to grow a cache of dirty pages for reuse in the current transaction;
- limit of a pre-allocated memory items for dirty pages;
- limit of dirty pages for a write transaction;
- initial allocation size for dirty pages list of a write transaction;
- maximal part of the dirty pages may be spilled when necessary;
- minimal part of the dirty pages should be spilled when necessary;
- how much of the parent transaction dirty pages will be spilled while start each child transaction;
- Unlimited/Dynamic size of retired and dirty page lists (https://github.com/erthink/libmdbx/issues/123).
-poption (purge subDB before loading) to
- Reworked spilling of large transaction and committing of nested transactions:
- page spilling code reworked to avoid the flaws and bugs inherited from LMDB;
- limit for number of dirty pages now is controllable at runtime;
- a spilled pages, including overflow/large pages, now can be reused and refunded/compactified in nested transactions;
- more effective refunding/compactification especially for the loosed page cache.
MDBX_PNL_ASCENDINGinternal/advanced build options.
- Better support architectures with a weak/relaxed memory consistency model (ARM, AARCH64, PPC, MIPS, RISC-V, etc) by means C11 atomics.
- Speed up page number lists and dirty page lists (https://github.com/erthink/libmdbx/issues/132).
- Fixed missing cleanup (null assigned) in the C++ commit/abort (https://github.com/erthink/libmdbx/pull/143).
mdbx_realloc()for case of nullptr and
- Fixed the possibility to use invalid and renewed (closed & re-opened, dropped & re-created) DBI-handles (https://github.com/erthink/libmdbx/issues/146).
- Fixed 4-byte aligned access to 64-bit integers, including access to the
bootidmeta-page's field (https://github.com/erthink/libmdbx/issues/153).
- Fixed minor/potential memory leak during page flushing and unspilling.
- Fixed handling states of cursors's and subDBs's for nested transactions.
- Fixed page leak in extra rare case the list of retired pages changed during update GC on transaction commit.
- Fixed assertions to avoid false-positive UB detection by CLANG/LLVM (https://github.com/erthink/libmdbx/issues/153).
MDBX_KEYEXISTduring large transaction commit with
- Fixed auto-recovery (
weak->steadywith the same boot-id) when Database size at last weak checkpoint is large than at last steady checkpoint.
- Fixed operation on systems with unusual small/large page size, including PowerPC (https://github.com/erthink/libmdbx/issues/157).