Выпуск высокапрадукцыйнай убудаванай СКБД libmdbx 0.10.4 і libfpta 0.3.9

Адбыўся выпуск бібліятэк libmdbx 0.10.4 (MDBX) з рэалізацыяй высокапрадукцыйнай кампактнай убудаванай базы дадзеных класа ключ-значэнне, і злучанай бібліятэкі libfpta 0.3.9 (FPTA), якая рэалізуе па-над MDBX таблічнае паданне дадзеных з другаснымі і складовымі азначнікамі. Абедзве бібліятэкі распаўсюджваюцца пад ліцэнзіямі адобранымі OSI. Падтрымліваюцца ўсе актуальныя аперацыйныя сістэмы і архітэктуры, а таксама расейскі Эльбрус 2000.

Гістарычна libmdbx з'яўляецца глыбокай перапрацоўкай СКБД LMDB і пераўзыходзіць свайго прабацьку па надзейнасці, набору магчымасцяў і прадукцыйнасці. У параўнанні з LMDB, у libmdbx вялікая ўвага надаецца якасці кода, стабільнай працы API, тэставанню і аўтаматычным праверкам. Пастаўляецца ўтыліта праверкі цэласнасці структуры БД з некаторымі магчымасцямі аднаўлення.

Тэхналагічна libmdbx прапануе ACID, строгую серыялізацыю змен і неблакавальнае чытанне з лінейным маштабаваннем па ядрах ЦПУ. Падтрымліваецца аўтакампактыфікацыя, аўтаматычнае кіраванне памерам БД, ацэнка аб'ёму выбарак па дыяпазонах (range query estimation). З 2016 года праекты фінансуецца кампаніяй Positive Technologies і з 2017 года выкарыстоўваецца ў яе прадуктах.

Для libmdbx прапануецца C++ API, а таксама падтрымліваюцца энтузіястамі прывязкі да моў Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. Для libfpta публічна даступна толькі апісанне API у выглядзе загалоўкавых файлаў C/C++.

Асноўныя навіны, дапрацоўкі і выпраўленні, дададзеныя пасля папярэдняй навіны ад 9 траўня:

  • Забяспечана магчымасць прайграваных зборак.
  • Ухіленая памылка, з-за якой пры вельмі рэдкім збегу абставінаў падчас фіксацыі транзакцыі магло адбывацца зацыкльванне/завісанне. Праблема выяўлена спецыялістамі Positive Tecnologies пры ўнутраным тэсціраванні ўласных прадуктаў.
  • Дапрацаваны тэсты і пашыраны тэставыя сцэнары для праверкі ўсіх дасягальных ня ізаморфных станаў дрэва старонак і змесціва GC ўнутры БД.
  • У C++ API выпраўлены лішні "noexcept", дададзены дадатковыя перагрузкі для метаду "cursor::erase()", рэалізацыя буфераў пазбаўлена ад выкарыстання "std::string" для забеспячэння выраўноўвання (актуальна для CLANG libstdc++).
  • Ухілены рэгрэс у алгарытме спілінгу брудных старонак (выбарчае выцясненне змененых старонак БД) выяўлялася рэдкай нечаканай памылкай MDBX_PROBLEM пры змене дадзеных у велізарных транзакцыях.
  • Праведзена праверка фазінгам з дабаўленнем шэрагу праверак для забеспячэння стабільнасці пры наўмысным пашкоджанні БД.
  • Ухілены малаважныя папярэджанні UndefinedBehaviorSanitizer і Coverity Scan issues.
  • Выпраўлена праверка састарэлага і ўжо невыкарыстоўваемага ўнутранага сцяга «P_DIRTY» ва ўкладзеных старонках усярэдзіне вобразаў БД створаных старымі версіямі бібліятэкі.
  • У скрыптах CMake дапрацаваны пошук кампанентаў кампілятара неабходных для LTO (link-time optimization).
  • Максімальная колькасць адначасовых чытачоў павялічана да 32767.
  • Паскорана праца пры выкарыстанні Valgrind і AddressSanitizer.
  • На Windows ухіленае рэкурсіўнае выкарыстанне SRW-lock пры працы ў рэжыме MDBX_NOTLS (без выкарыстання thread local storage), выпраўлена генерацыя bootid у выпадку змены сістэмнага часу, дапрацавана дэтэктаванне WSL1 і WSL2, дададзеная магчымасць адкрыцця БД на Plan 9 змантаванай пасродкам DrvFS.
  • Сумарна занесена больш за 160 змен у 57 файлаў, дададзена ~5000 радкоў, выдалена ~2500.

Асобна хочацца падзякаваць камандзе праекта Erigon (экасістэма Ethereum) за дапамогу ў тэсціраванні ў экстрэмальных сцэнарах выкарыстання. Паказальна, што за пяць месяцаў з моманту выхаду libmdbx v0.10.0, пры аб'ёме БД 1-2 Тб у кожнай усталёўцы Erigon (выкарыстоўваецца на 7% вузлоў Ethereum), паступіла толькі тры паведамленні аб пашкоджанні БД, усё адбыліся з-за вонкавых чыннікаў, а не памылак ПА: у двух выпадках чыннікам былі збоі АЗП, у трэцім памылка абнулення дадзеных у спецыфічнай канфігурацыі падсістэмы захоўвання з выкарыстаннем BTRFS.

Крыніца: opennet.ru

Дадаць каментар