Издадена версия на вградена СУБД libmdbx 0.13.7

Публикувана версия на библиотеката libmdbx 0.13.7 (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_env_resurrect_after_fork() при използване на SysV-семафори. Грешката се проявяваше само след създаване на дъщерен процес чрез fork() на фона на изпълняваща се пишеща транзакция, което водеше до неправилна работа на семафорите и по-нататък до разнообразни грешки, вкл. и до повреждане на базата данни. Проблемът съществуваше от момента на появата на mdbx_env_resurrect_after_fork() и засягаше macOS, а също и POSIX-платформите при компилация с опцията MDBX_LOCKING=5.
  • Отстранен е проблем в API за копиране на бази данни, проявяващ се на системи POSIX, различни от Linux (главно на macOS), както и в някои случаи при разполагане на целевия файл на не-локална файлова система. Проблемът водеше до връщане на грешка EWOULDBLOCK/EAGAIN, която е причинена от недочет/конфликт на блокировките fcntl(F_SETLK) и flock() в ядрото на ОС. Преработена е обработката на грешките при захващане на файловите блокировки в API за копиране на системи POSIX.
  • Отстранена е грешка, водеща до неочаквано връщане на MDBX_BAD_DBI при едновременно стартиране на няколко транзакции в рамките на един процес след отваряне на базата данни.
  • Отстранена грешка, която предизвикваше неочаквано връщане на MDBX_DBS_FULL при повторно отваряне на вече отворени таблици и вече достигнат лимит на отворени DBI-дескриптори.
  • Поправена грешка в компилацията за платформата Android при явно определяне на _FILE_OFFSET_BITS.
  • Поправена грешка при използването на ENOMEM вместо MDBX_ENOMEM. Това можеше да наруши компилацията на не-POSIX\/Windows платформи, в зависимост от конфигурацията и\/или версията на SDK.
  • Поправени или премахнати са няколко неверни проверки с assert, поради които се случваха сривове на отладъчните компилации в специфични ситуации. Главно в кода на функциите txn_end(), txn_lock() и txn_unlock() както на Windows, така и на POSIX.
  • Отстранени са незначителни предупреждения от MSVC. Изключени са предупрежденията C5286 и C5287.
  • Променена е логиката за отказ от използване на OFD-блокировки на POSIX-платформите. Сега, освен EINVAL, се вземат предвид и допълнителни кодове за грешки (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), което ще позволи на компилираната библиотека да работи в някои случаи, когато актуалното ядро\/контейнер\/емулатор не поддържа необходимите системни повиквания.
  • В тестовия фреймворк е добавена поддръжка за опцията «—numa » за привързване на стохастичния тест към NUMA-възел. В скрипта battery\/tmux е добавено явно разпределение по NUMA-възли, което значително увеличи ефективността при тестване на NUMA-машини.
  • В стохастичния скрипт е реализиран случаен ред на стартиране на отделни тестове.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster