libmdbx v0.9.4 Release Notes

Release Date: 2021-03-18 // 3 months ago

Previous changes from v0.9.3

  • Acknowledgements:

    ✂ Removed options and features:

    • Drop MDBX_HUGE_TRANSACTIONS build-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).
    • Added -p option (purge subDB before loading) to mdbx_load tool.
    • 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.
    • Added MDBX_ENABLE_REFUND and MDBX_PNL_ASCENDING internal/advanced build options.
    • Added mdbx_default_pagesize() function.
    • 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).
    • Added LIBMDBX_NO_EXPORTS_LEGACY_API build option.

    🛠 Fixes: