Адбыўся выпуск бібліятэкі 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