Публикуван е релиз на библиотеката libmdbx 0.13.3 (MDBX) с реализация на високопроизводителна компактна вградена база данни от тип ключ-стойност. Кодът на libmdbx се разпространява под лицензията Apache 2.0. Поддържат се всички актуални операционни системи и архитектури, както и руският Елбрус 2000. За libmdbx е предложено развито API за C++, както и поддържани от ентусиасти обвързвания към язиците Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Исторически libmdbx е дълбока переработка на СУБД LMDB и превъзхожда своя предшественик по надеждност, набор от възможности и производителност. В сравнение с LMDB, в libmdbx се обръща голямо внимание на качеството на кода, стабилната работа на API-то, тестването и автоматичните проверки. Поставя се утилита за проверка на целостта на структурата на БД с някои възможности за възстановяване. Технологично libmdbx предлага ACID, строга сериализация на промените и неблокирано четене с линейно мащабиране по ядра на ЦПУ. Поддържа се автоматична компактификация, автоматично управление на размера на БД, оценка на обема на изборите по диапазони (range query estimation).
Основни промени:
- Клон 0.13.x получи статус на стабилен. Започна разработката на клона 0.14.x.
- В C API е добавена функцията mdbx_cursor_count_ex(), позволяваща получаване както на броя на мулти-стойностите, отговарящи на текущия ключ, така и информация за вложеното дърво, съхраняващо тези стойности.
- В C++ API е добавен методът mdbx::txn::make_broken(), аналогичен на mdbx_txn_break().
- В утилитите mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat е реализирано логиране на грешки, предупреждения и важни съобщения от libmdbx.
- Промяна на поведението:
- При активиране на профилирането на събирача на боклук (с активация на опцията MDBX_ENABLE_PROFGC=ON), вече се отчитат разходите за време на ЦПУ при обединяване на списъците с страници, т.е. при работата на функцията pnl_merge().
- В утилитата за тестване, стойността на режим данни е преименувана от data.dups на data.multi.
- Доработен е контролът на дължината на ключа в cursor_seek().
- Ако чрез mdbx_env_set_option(MDBX_opt_txn_dp_limit) не е зададена стойност от потребителя, то се извършва настройка на dirty-pages-limit при стартиране на всяка не вложена пишеща транзакция, на базата на обема на наличната RAM и размера на БД.
- В режим MDBX_NOSTICKYTHREADS е позволено commit/abort на вложени транзакции от всеки поток.
- При опит за стартиране на вложени транзакции в режим MDBX_WRITEMAP се извършва логване и се връща грешка MDBX_INCOMPATIBLE.
- В C++ API в конструкторите/инициализаторите и методите, свързани с формирането на геометрията на БД, по подразбиране се използват само default-стойности.
- Вътре в mdbx_env_set_geometry() са подобрени хевристиките за подбиране на параметрите на геометрията на БД, изисквани от потребителя «по подразбиране».
- Поправки:
- Отстранен е регрес при неразблокиране на мютекса при опит за повторно затваряне на dbi-дескриптор, включително при опит за явно затваряне на дескриптора след изтриване на свързаната с него таблица.
- Отстранен е регрес на състоянието на вложен/dupsort курсор след добавяне на данни в режим MDBX_APPEND.
- Поддръжка на получаване на boot_id при работа в LXC-контейнер.
- Отстранена е грешка в неправилната обработка на опита за стартиране на вложена четяща транзакция. Сега в такива ситуации се връща грешка MDBX_EINVAL, тъй като вложеността се поддържа само за транзакции за четене-запис.
- Отстранен е SIGSEGV-регрес при опит за достъп до нулев адрес при работа в режим само за четене без използване на LCK-файл, например при разполагане на БД на носител, достъпен само за четене.
Източник: opennet.ru
