libmdbx v0.10.0 Release Notes

Release Date: 2021-05-09 // almost 3 years ago
  • Acknowledgements:

    🆕 New features:

    • Added mdbx_env_set_option() and mdbx_env_get_option() for controls various runtime options for an environment (announce of this feature was missed in a previous news).
    • Added MDBX_DISABLE_PAGECHECKS build 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=1 provides a performance boost of about 10% in CRUD scenarios, and conjointly with the MDBX_ENV_CHECKPID=0 and MDBX_TXN_CHECKOWNER=0 options 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_drop similar to LMDB command-line tool to purge or delete (sub)database(s).
    • Ruby bindings is available now by Mahlon E. Smith.
    • Added MDBX_ENABLE_MADVISE build 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 to ≈½ of page size.
    • Added to mdbx_chk output number of keys/items on pages.
    • Added explicit install-strip and install-no-strip targets to the Makefile (https://github.com/erthink/libmdbx/pull/180).
    • Major rework page splitting (af9b7b560505684249b76730997f9e00614b8113) for
      • An "auto-appending" feature upon insertion for both ascending and descending key sequences. As a result, the optimality of page filling increases significantly (more densely, less slackness) while inserting ordered sequences of keys,
      • A "splitting at middle" to make page tree more balanced on average.
    • Added mdbx_get_sysraminfo() to the API.
    • Added guessing a reasonable maximum DB size for the default upper limit of geometry (https://github.com/erthink/libmdbx/issues/183).
    • Major rework internal labeling of a dirty pages (958fd5b9479f52f2124ab7e83c6b18b04b0e7dda) for a "transparent spilling" feature with the gist to make a dirty pages be ready to spilling (writing to a disk) without further altering ones. Thus in the MDBX_WRITEMAP mode the OS kernel able to oust dirty pages to DB file without further penalty during transaction commit. As a result, page swapping and I/O could be significantly reduced during extra large transactions and/or lack of memory.
    • Minimized reading leaf-pages during dropping subDB(s) and nested trees.
    • Major rework a spilling of dirty pages to support LRU policy and prioritization for a large/overflow pages.
    • Statistics of page operations (split, merge, copy, spill, etc) now available through mdbx_env_info_ex().
    • Auto-setup limit for length of dirty pages list (MDBX_opt_txn_dp_limit option).
    • Support make options to list available build options.
    • Support make help to list available make targets.
    • Silently make's build by default.
    • Preliminary Python bindings is available now by Noel Kuntze (https://github.com/erthink/libmdbx/issues/147).

    Backward compatibility break:

    • The MDBX_AVOID_CRT build option was renamed to MDBX_WITHOUT_MSVC_CRT. This option is only relevant when building for Windows.
    • The mdbx_env_stat() always, and mdbx_env_stat_ex() when called with the zeroed transaction parameter, now internally start temporary read transaction and thus may returns MDBX_BAD_RSLOT error. So, just never use deprecated mdbx_env_stat()' and callmdbx_env_stat_ex()` with transaction parameter.
    • The build option MDBX_CONFIG_MANUAL_TLS_CALLBACK was removed and now just a non-zero value of the MDBX_MANUAL_MODULE_HANDLER macro indicates the requirement to manually call mdbx_module_handler() when loading libraries and applications uses statically linked libmdbx on an obsolete Windows versions.

    🛠 Fixes: