libmdbx 0.11.3 high-performance embedded database release

The libmdbx 0.11.3 (MDBX) library was released with the implementation of a high-performance compact embedded key-value database. The libmdbx code is licensed under the OpenLDAP Public License. All current operating systems and architectures are supported, as well as the Russian Elbrus 2000. At the end of 2021, libmdbx is used as a storage backend in the two fastest Ethereum clients - Erigon and the new β€œShark”, which, according to available information, is the highest-performance Ethereum client.

Historically, libmdbx is a deep redesign of the LMDB DBMS and surpasses its progenitor in terms of reliability, feature set and performance. Compared to LMDB, libmdbx puts a lot of emphasis on code quality, API stability, testing, and automated checks. A utility for checking the integrity of the database structure is supplied with some recovery options.

Technology-wise, libmdbx offers ACID, strong change serialization, and non-blocking reads with linear scaling across CPU cores. Auto-compactification, automatic database size management, and range query estimation are supported. Since 2016, the project has been funded by Positive Technologies and has been used in its products since 2017.

libmdbx offers a C++ API, as well as enthusiast-supported language bindings for Rust, Haskell, Python, NodeJS, Ruby, Go, and Nim.

Major innovations, improvements and corrections added since the previous news on October 11:

  • The C++ API is considered ready for use.
  • The update of GC data when committing huge transactions has been significantly accelerated, which is especially important when using libmdbx in the Ethereum ecosystem.
  • The internal signature of the database format has been changed to support automatic updating, which is completely transparent to users. This allows you to eliminate false-positive messages about database corruption when outdated versions of the library are used to read transactions recorded by current versions.
  • Added functions mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() and mdbx_env_get_syncbytes(). Added support for the MDBX_SET_UPPERBOUND operation.
  • All warnings when building with all supported compilers in C++ 11/14/17/20 modes have been eliminated. Compatibility with legacy compilers is ensured: clang starting from 3.9, gcc starting from 4.8, including assembly using cdevtoolset-9 for CentOS/RHEL 7.
  • Fixed the possibility of a meta page conflict after manually switching to a specific meta page using the mdbx_chk utility.
  • Fixed unexpected MDBX_PROBLEM error being returned when overwriting legacy meta pages.
  • Fixed returning MDBX_NOTFOUND in case of an inexact match when processing an MDBX_GET_BOTH request.
  • Fixed a compilation error on Linux in the absence of header files with descriptions of interfaces with the kernel.
  • Fixed a conflict between the MDBX_SHRINK_ALLOWED internal flag and the MDBX_ACCEDE option.
  • Several unnecessary assert checks have been eliminated.
  • Fixed unexpected return of MDBX_RESULT_TRUE from mdbx_env_set_option() function.
  • In total, more than 90 changes were made to 25 files, ~1300 lines were added, ~600 were deleted.

Source: opennet.ru

Add a comment