Издание на високопродуктивна вградена СУБД libmdbx 0.10

След три месеца разработка, библиотеката libmdbx 0.10.0 (MDBX) беше пусната с реализация на високопроизводителна, компактна вградена база данни от клас ключ-стойност. Кодът на libmdbx е разпространен под лицензията OpenLDAP Public License. libmdbx е дълбока преработка на СУБД LMDB и според разработчиците надминава предшественика си по надеждност, набор от възможности и производителност. Заявява се, че libmdbx е до 20% по-бърз от LMDB в сценарии CRUD и до 30% по-бърз, ако при компилирането на libmdbx се деактивира вътрешният контрол до нива, съпоставими с LMDB.

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

Основни новини, допълнения и поправки, добавени след предишното издание:

  • Налични са връзките за Ruby от Mahlon E. Smith и тестова версия на връзките за Python от Noel Kuntze, актуализирани са връзките за GoLang от Алексей Шаров.
  • За режима «MDBX_WRITEMAP», когато данните на БД се променят директно в RAM, е реализиран «прозрачен пролив» на диска на променените страници на БД. Сега, след завършване на всяка операция, тези страници са веднага напълно подготвени за запис на диска и ядрото на ОС може самостоятелно да записва променените страници на диска, а фиксирането на транзакцията не изисква тяхната модификация. В резултат на това, в натоварени сценарии с недостатък на RAM, обемът на дисковите операции може да бъде намален до 2 пъти.
  • Реализирано изтласкване на стари неизползвани теневи копия на променените страници, с предпочитание към изтласкването на страници с големи/дълги стойности, които в повечето сценарии се променят само веднъж на транзакция. В резултат се намалява обемът на обмена с диска и се увеличава производителността в сценарии с много големи транзакции.
  • Реализиран е „умен“ режим за разпределение на страниците при вмъкване на ключове. Сега при вмъкване на подредени последователности автоматично се осигурява пълно запълване на страниците, а в останалите случаи по-оптимално балансирано дърво. В резултат, в средно, страниците на БД се запълват по-оптимално, а B-деревото става по-балансирано, което положително повлиява на производителността.
  • Добавена е статистика на операциите със страниците, което позволява точно оценяване на разходите за модифициращи операции с БД.
  • Премахнати са повече от десет недостатъка и грешки, включително: решени проблеми със сборката посредство MinGW, използването на `std::filesystem::path` в iOS <= 13.0, сборка с таргетиране на стари версии на Windows и т.н.
  • Общо са извършени над 200 изменения в 66 файла, добавени са ~6500 реда, премахнати са ~4500.

Особено искаме да отбележим избора на проекта Turbo-Geth (турбо-форк Go-Ethereum) libmdbx като нов бекенд за съхранение, както и да благодарим на екипа на проекта (в частност на Алекси Шаров, Артем Воротников и Алексей Ахунов) за голямата помощ в тестването в екстремни сценарии на употреба. По-конкретно, така бе открит и отстранен дефект в управлението на предварителното четене/кеширане, който водеше до деградация на производителността в трудно възпроизвеждащи се сценарии с големи БД.

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

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