Опубликован выпуск библиотеки libmdbx 0.13.6 (MDBX) с реализацией высокопроизводительной компактной встраиваемой базы данных класса ключ-значение. Код libmdbx распространяется под лицензией Apache 2.0. Поддерживаются все актуальные операционные системы и архитектуры, а также российский Эльбрус 2000. Для libmdbx предлагается развитое API для C++, а также поддерживаемые энтузиастами привязки к языкам Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala. Из проектов, использующих libmdbx, можно отметить Isar, Erigon и Reth, а также разработки компаний StarkWare и Positive Technologies.
Исторически libmdbx является глубокой переработкой СУБД LMDB и превосходит своего прародителя по надёжности, набору возможностей и производительности. В сравнении с LMDB, в libmdbx большое внимание уделяется качеству кода, стабильной работе API, тестированию и автоматическим проверкам. Поставляется утилита проверки целостности структуры БД с некоторыми возможностями восстановления. Технологически libmdbx предлагает ACID, строгую сериализацию изменений и неблокирующее чтение с линейным масштабированием по ядрам ЦПУ. Поддерживается автоуплотнение, автоматическое управление размером БД, оценка объёма выборок по диапазонам (range query estimation).
Основные изменения:
- Изменение поведения: При невозможности отвязки курсора от его текущей транзакции функция mdbx_cursor_bind() теперь возвращает MDBX_EINVAL вместо MDBX_BAD_TXN.
- Во избежание потенциальных проблем отключено использование copy_file_range() на ядрах Linux 5.3 – 5.18.
- Вброс std::invalid_argument теперь производится явным сообщением MDBX_EINVAL.
- Устранён регресс при использовании курсоров для DBI=0 (aka GC/FreeDB) в читающих транзакциях.
- Устранён регресс в виде ошибки EAGAIN при копировании БД на NFS и CIFS/SMB.
- При доработках/развитии API в функции копирования был добавлен захват файловой блокировки посредством как fcntl(), так и flock(). Однако, в зависимости от версии локального ядра, версии удалённого сервера NFS и опций монтирования, это могло приводить к возврату POSIX-ошибки EAGAIN (11 на большинстве платформ, включая Linux).
- Устранена ошибка merge/rebase внутри mdbx_txn_release_all_cursors_ex(), что могло приводить к последующим неожиданным ошибкам MDBX_EBADSIGN и утечкам памяти.
- Исправлена assert-проверка в пути завершения вложенных транзакций.
- Устранена возможность возврата неожиданной ошибки MDBX_BUSY из mdbx_txn_lock(dont_wait=false).
- Для совместимости с GCC 15.x в режиме C23 изменён порядок указания атрибутов функций.