libmdbx 0.9.1 compact embedded database release

Released version 0.9.1 of the library libmdbx (MDBX) implementation of a high-performance, compact key-value embedded database. The libmdbx code is licensed OpenLDAP Public License.

The current version is a compromise between the intention to release a long-term stable 1.0 version with full C++ support and the reluctance to delay releases because the new C++ API is not ready to be frozen. The presented release is the result of 9 months of work aimed at stabilizing the library and improving its usability, and also includes a preliminary version C++ API.

The libmdbx library is not just a "fork", but a radically redesigned descendant LMDB - transactional embedded DBMS of the "key-value" class based on tree B+ without proactive logging, which allows multi-threaded processes to concurrently and efficiently work with a locally shared (not network) database without a dedicated server process. libmdbx fundamentally extends the capabilities of its progenitor, while eliminating or mitigating shortcomings. At the same time, according to the developers, libmdbx is slightly faster and much more reliable than LMDB.

libmdbx offers ACID, strict serialization of changes, and non-blocking reads with linear scaling across CPU cores. Performance testing results (sending parallel read/search requests in 1-2-4-8 threads on CPU i7-4600U with 2 physical cores in 4-thread HyperThread mode):

libmdbx 0.9.1 compact embedded database release

The most important differences between MDBX and LMDB are:

  • Fundamentally, more attention is paid to the quality of the code, the "non-falling" API, testing and automatic checks.
  • Significantly more control during operation, from parameter checking to internal audit of database structures.
  • Auto-compactification and automatic database size management.
  • A single database format for 32-bit and 64-bit assemblies.
  • Estimation of the volume of samples by ranges (range query estimation).
  • Support for twice the length keys and user-selectable database page size.
  • A utility for checking the integrity of the database structure with some recovery options.

Main innovations and improvements after previous news with the introduction of version 0.5 in January 2020:

  • For prompt support and answers to questions, an open group in telegram.
  • Over a dozen bugs and shortcomings have been fixed (see. change log).
  • Fixed a lot of typos and spelling errors, multiple cosmetic improvements.
  • Expanded test scenarios.
  • Implemented support for iOS, Android, buildroot, musl, uclibc, WSL1 ΠΈ Wine.
  • C++ API preview released in one header file.
  • Built-in documentation in Doxygen format and automatic generation Online documentation.
  • Automatic generation of archives with amalgamated source texts is provided.
  • Added support for preparing transactions and cursors, user contexts for transactions and cursors.
  • Implemented additional referential integrity control methods in B+tree MVCC snapshots.
  • Added support for checking the MVCC snapshot of the database, available through any meta page with the ability to switch to restore.
  • Implemented support for reopening the database from one process for testing purposes, etc.
  • Implemented automatic processing of the MDBX_NOSUBDIR option when opening a database.
  • Functions have been added to generate integer keys from JavaScript floating point values ​​and "universal" numbers.
  • A total of 430 changes were made affecting 93 files, more than 25 thousand lines were added, more than 8.5 thousand lines were deleted.

Future development of libmdbx will focus on building the final C++ API, further stabilizing the core code, improving the usability of the library, and packaging for popular Linux distributions. Of the proposed improvements, it is worth noting the support for keys in the format message pack.

Source: opennet.ru

Add a comment