Издадено издание на библиотеката libmdbx 0.13.1 (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, строга сериализация на промените и неблокиращо четене с линейно мащабиране по ядра на ЦПУ. Поддържа се автоматична компактификация, автоматично управление на размера на БД и оценка на обема на заявките по диапазони (estimate по диапазони).
Основни промени:
- Смяна на лиценза на кода от OpenLDAP Public License на Apache 2.0.
- Разширяване на API на курсорите с по-удобни и очевидни операции за позициониране в съответствие с условията <, =, > както за ключове, така и за двойки ключ-стойност. Добавени функции mdbx_cursor_unbind() и mdbx_txn_release_all_cursors() за гъвкаво управление на курсорите в сценарии на повторна употреба, за намаляване на разходите. Функции mdbx_cursor_scan() и mdbx_cursor_scan_from() за сканиране на таблици с използване на функционален предикат и намаляване на свързаните разходи.
- Преработка на курсорите за унифициране на поведението, за по-редовен код и намаляване на количеството разклонения и машинни операции.
- Пренос на функционалността на утилитата mdbx_chk в библиотеката под формата на функция mdbx_env_chk() за проверка на целостта на структурата на БД, включително с включването на логиката на приложението.
- Опцията MDBX_opt_gc_time_limit за по-гъвкаво контролиране на времето, изразходвано за търсене на последователности от съседни свободни страници в GC.
- Съществено намаление на разходите за стартиране на транзакции в сценарии с голям брой DBI-хендли, благодарение на отложената/ленивата инициализация на елементите от служебните таблици. Включително, механизъм за поддръжка на разрязаните набори DBI-хендли, управляван от опцията за компилация MDBX_ENABLE_DBI_SPARSE, която е включена по подразбиране.
- Намаление на разходите за отваряне на DBI-хендли. Включително, механизъм за отложено освобождаване и поддръжка на бързия метод за отваряне без използване на заключвания, управляван от опцията за компилация MDBX_ENABLE_DBI_LOCKFREE, която е включена по подразбиране.
- Поддръжка на 'паркиране' на четящите транзакции с тяхното изместване за обработка на стари MVCC-снимки и предотвратяване на проблеми, причинени от забавяне на обработката на боклука. Механизмът за паркиране и изместване на паркираните транзакции е както допълнение, така и по-проста за използване алтернатива на обратния повик Handle-Slow-Readers. За удобство, функциите mdbx_txn_park() и mdbx_txn_unpark() имат допълнителни аргументи, които позволяват искане за автоматична 'распарковка' на паркирани и повторно стартиране на изместените транзакции. В утилитата mdbx_copy са добавени съответните опции -d и -p.
- Поддръжка на възстановяване на отворена работна среда с БД в дъщерен процес след разделяне/разклоняване на процеса чрез mdbx_env_resurrect_after_fork().
- Поддръжка за преномеране на таблиците чрез mdbx_dbi_rename() и mdbx_dbi_rename2(). Добавена е функцията mdbx_enumerate_tables() за получаване на информация за именуваните потребителски таблици.
- Режим на работа MDBX_NOSTICKYTHREADS вместо MDBX_NOTLS за улесняване на интеграцията с леките потоци/нишки, техния мултиплексационен режим заедно с транзакциите на операционната система.
- За идентификация на БД е добавен UUID, наличен в полето mi_dxbid на структурата MDBX_envinfo, получена чрез mdbx_env_info_ex(). Реализирано е получаването на информация за БД без нейното отваряне чрез mdbx_preopen_snapinfo().
- Поддръжка на функции за логване на обратни повиквания без функционалност vprintf(), което значително опростява използването на логването в свързването с други програмни езици.
- Добавяне в API на функциите mdbx_txn_copy2pathname() и mdbx_txn_copy2fd().
- Реструктуриране на изходния код с рефакторинг.
- Използване на термина 'таблица' вместо 'subDb'.
- Обявление на остарели опции MDBX_COALESCE и MDBX_NOTLS. Замяна на сборъчната опция MDBX_USE_VALGRIND с общо приетата ENABLE_MEMCHECK.
Източник: opennet.ru
