Издаване на СУБД libmdbx 0.11.7. Прехвърляне на разработката на GitFlic след блокирането в GitHub

Издаден е библиотеката libmdbx 0.11.7 (MDBX) с реализация на високопроизводителна компактна вградена база данни от клас ключ-стойност. Кодът на libmdbx се разпространява под лиценза OpenLDAP Public License. Поддържат се всички актуални операционни системи и архитектури, както и руският Елбрус 2000.

Релизът е значителен с миграцията на проекта към услугата GitFlic след като на 15 април 2022 година администрацията на GitHub без предупреждение и обяснение на причините изтрива libmdbx заедно с много други проекти, блокирайки достъпа на многобройни разработчици, свързани с компании, попадащи под санкции на САЩ. От гледна точка на потребителите, всички страници, репозитории и форкове на проекта внезапно се трансформираха в страница „404“, без възможност за комуникация и изясняване на причините.

За съжаление, почти всички проблеми са изгубени, в които имаше много въпроси с подробни отговори, както и значителен брой дискусии. Загубата на тази информация е единственият обективен щета, която администрацията на GitHub успя да нанесе на проекта. Частично копия на дискусиите остават достъпни в архива archive.org.

Загубата на установените CI сценарии и инфраструктура (достъпна безплатно за OpenSource проекти) накара да се захванем с ревизия, унификация и отстраняване на малкия технически дълг. В момента CI е възстановен почти в предишния си обем, с изключение на изграждането и тестовете за всички варианти на BSD и Solaris. Интересно е, че след действията на GitHub не бяха подадени никакви разяснения или уведомления, освен напомняния за необходимостта от плащане и опити за удържане на пари.

От момента на предишната новина за релиза на libmdbx v0.11.3, освен възстановяването след действията на GitHub, следва да се отбележат следните подобрения и корекции:

  • Добавено е заобикаляне на открития ефект/дефект на неконсистентност в споделения кеш на страници и буфери в ядрото на Linux. В системи, където кешът на страниците и буферите е наистина комбиниран, ядрото няма смисъл да харчи памет за две копия на данните при запис в вече отразен в паметта файл. Затова записваните данни стават видими чрез отразяване в паметта преди приключване на системния повик write(), дори ако данните все още не са записани на диска.

    Общото поведение не е рационално, тъй като при отложено сливане все пак ще се наложи да се захванат блокировки за списъците със страници, да се копират данни или да се коригират PTE. Затова неформалното правило за кохерентност действа от 1989 г., когато в SRV4 се появи unified buffer cache. Следователно откритията на странни сривове в натоварени сценарии на експлоатация на libmdbx изискваха значителна работа. Първо, по възпроизводството на проблема, след това по верификацията на хипотезите и проверката на подобренията.

    Сега можем уверено да кажем, че проблемът е достоверно идентифициран, локализиран и надеждно отстранен, въпреки сложността и спецификата на сценария за възпроизвеждане. Допълнително, работата на механизма за заобикаляне беше потвърдена от един от разработчиците на Erigon (Ethereum), в неговия случай на отладъчна версия, където реакцията на защитата се проявяваше като регресия поради излишна assert-проверка.

    Следва да се отбележи, че в контекста на широко приложение на libmdbx в работни проекти, принципно по-важно е осигуряването на надеждна работа, а не изясняването на "грешка или особеност" и дали може да се разчита на такава кохерентност, още по-малко търсенето на причините за некохерентността в ядрото на Linux. Следователно, тук става въпрос за отстраняване на проблема, който е могъл да засегне потребителите.

  • Отстранен е регресът на грешката EXDEV (Cross-device link) при горещо копиране на БД без компактиране на друг файлови системи, както през API, така и с утилитата mdbx_copy.
  • Kris Zyp реализира поддръжка на libmdbx в Deno. Kai Wetlesen подготви пакетиране на RPM за Fedora. David Bouyssié реализира свързвания за Scala.
  • Поправена е обработката на стойността, зададена от опцията MDBX_opt_rp_augment_limit, при обработка на огромни транзакции в големи БД. Преди това, поради грешка, можеха да се извършват излишни операции, което понякога се отразяваше на производителността в реализациите на Ethereum (Erigon/Akula/Silkworm) и проектите Binance Chain.
  • Коригирани са множество недочети, включително в C++ API. Отстранени са много проблеми със съгласуването в редки и екзотични конфигурации. Пълен списък на всички значими подобрения е наличен в ChangeLog.
  • Общо са направени 185 изменения в 89 файла, добавени ≈3300 реда, премахнати ≈4100. Най-вече, премахнати са поради почистване от вече ненужни технологични файлове, свързани с GitHub и зависими услуги.

Исторически libmdbx представлява дълбока переработка на базата данни LMDB и превъзхожда своя предшественик по надеждност, набор от възможности и производителност. В сравнение с LMDB, в libmdbx се отделя голямо внимание на качеството на кода, стабилната работа на API, тестването и автоматичните проверки. Предлага се инструмент за проверка на целостта на структурата на БД с някои възможности за възстановяване.

Технологично libmdbx предлага ACID, строга сериализация на промените и неблокиращо четене с линейно мащабиране по ядра на CPU. Поддържа се автоматична компактификация, автоматично управление на размера на БД, оценка на обема на избори по диапазони (range query estimation). От 2016 година проектът се финансира от компанията Positive Technologies и от 2017 година се използва в нейните продукти.

За libmdbx се предлага развито C++ API, както и поддържани от ентусиасти привързвания към езиците Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

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

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