Публикувана версия на библиотеката 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, строга сериализация на промените и неблокирано четене с линейно мащабиране по ядра на ЦПУ. Поддържа се автоуплътняване, автоматично управление на размера на базата данни, оценка на обема на проби по диапазони (оценка на заявки по диапазони).
Основни промени:
- Промяна в поведението: При невъзможност да се отвърже курсора от текущата му транзакция, функцията 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 е променен редът на указване на атрибутите на функциите.
Източник: opennet.ru
