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

Адбыўся выпуск бібліятэкі libmdbx 0.11.3 (MDBX) з рэалізацыяй высокапрадукцыйнай кампактнай убудаванай базы дадзеных класа ключ-значэнне. Код libmdbx распаўсюджваецца пад ліцэнзіяй OpenLDAP Public License. Падтрымліваюцца ўсе актуальныя аперацыйныя сістэмы і архітэктуры, а таксама расійскі Эльбрус 2000. На канец адыходзячага 2021 libmdbx выкарыстоўваецца як бэкенд захоўвання ў двух самых хуткіх кліентах Ethereum – Erigon і новай «Акуле», якая па даступнай інфармацыі з'яўляецца самым высокапрадукцыйным кліентам Ethereum.

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

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

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

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

  • C++ API лічыцца гатовым да ўжывання.
  • Істотна паскорана абнаўленне дадзеных GC пры фіксацыі вялізных транзакцый, што асабліва актуальна пры выкарыстанні libmdbx у экасістэме Ethereum.
  • Зменена ўнутраная сігнатура фармату БД з падтрымкай аўтаматычнага абнаўлення, якое поўнасцю празрыста для карыстальнікаў. Гэта дазваляе выключыць ілжыва-станоўчыя паведамленні аб пашкоджанні БД, калі састарэлыя версіі бібліятэкі выкарыстоўваюцца для чытання транзакцый, зафіксаваных актуальнымі версіямі.
  • Дададзеныя функцыі mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() і mdbx_env_get_syncbytes(). Дададзена падтрымка аперацыі MDBX_SET_UPPERBOUND.
  • Ухілены ўсе папярэджанні пры зборцы ўсімі падтрымоўванымі кампілятарамі ў рэжымах З++ 11/14/17/20. Забяспечана сумяшчальнасць з састарэлымі кампілятарамі: clang пачынальна з 3.9, gcc пачынальна з 4.8, уключаючы зборку пасродкам сdevtoolset-9 для CentOS/RHEL 7.
  • Ухіленая магчымасць канфлікту мета-старонак пасля ручнога пераключэння на вызначаную мета-старонку з дапамогай утыліты mdbx_chk.
  • Выпраўлены зварот нечаканай памылкі MDBX_PROBLEM пры перазапісе састарэлых мета-старонак.
  • Выпраўлены зварот MDBX_NOTFOUND у выпадку недакладнага супадзення пры апрацоўцы запыту MDBX_GET_BOTH.
  • Ухіленая памылка кампіляцыі на Linux пры адсутнасці загалоўкавых файлаў з апісаннямі інтэрфейсаў з ядром.
  • Выпраўлена калізія паміж унутраным сцягам MDBX_SHRINK_ALLOWED і опцыяй MDBX_ACCEDE.
  • Ухілена некалькі залішніх assert-праверак.
  • Выпраўлена нечаканае вяртанне MDBX_RESULT_TRUE з функцыі mdbx_env_set_option().
  • Сумарна занесена больш за 90 змен у 25 файлаў, дададзена ~1300 радкоў, выдалена ~600.

Крыніца: opennet.ru

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