Апублікаваны выпуск бібліятэкі libmdbx 0.13.2 (MDBX) з рэалізацыяй высокапрадукцыйнай кампактнай убудаванай базы дадзеных класа ключ-значэнне. Код libmdbx распаўсюджваецца пад ліцэнзіяй Apache 2.0. Падтрымліваюцца ўсе актуальныя аперацыйныя сістэмы і архітэктуры, а таксама расійскі Эльбрус 2000. Для libmdbx прапануецца развітае API для C++, а таксама падтрымліваюцца энтузіястамі прывязкі да моў Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Гістарычна libmdbx з'яўляецца глыбокай перапрацоўкай СКБД LMDB і пераўзыходзіць свайго прабацьку па надзейнасці, набору магчымасцяў і прадукцыйнасці. У параўнанні з LMDB, у libmdbx вялікая ўвага надаецца якасці кода, стабільнай працы API, тэставанню і аўтаматычным праверкам. Пастаўляецца ўтыліта праверкі цэласнасці структуры БД з некаторымі магчымасцямі аднаўлення. Тэхналагічна libmdbx прапануе ACID, строгую серыялізацыю змен і неблакавальнае чытанне з лінейным маштабаваннем па ядрах ЦПУ. Падтрымліваецца аўтакампактыфікацыя, аўтаматычнае кіраванне памерам БД, ацэнка аб'ёму выбарак па дыяпазонах (range query estimation).
Асноўныя змены:
- Паскорана абнаўленне GC пры звароце/змяшчэнні спісаў старонак у складаных сцэнарах. Дапрацаваны і актываваны раней адключаны эксперыментальны рэжым карэкціруючай зваротнай сувязі. Гэтым прынцыпова палепшылася збежнасць (скарацілася колькасць паўторных спроб), а таксама ўхілены дэфект які прыводзіць да «зацыклявання» пры фіксацыі транзакцый (з зваротам памылкі MDBX_PROBLEM) у рэдкіх спецыфічных умовах.
- У зборачных скрыптах CMake уключаны стандарт C23.
- Дададзеныя T-макрасы для парных функцый char/wchar_t.
- У C++ API дададзена падтрымка ўкладзеных якія пішуць транзакцый.
- Выкананы пераход на другую рэдакцыю спецыфікацыі семантычнага версіявання ("Semantic Versioning 2") і забяспечаны экспарт інфармацыі аб версіі ў VERSION.json.
- Для ўзнаўляльнасці зборак дададзена падтрымка зменнай асяроддзя SOURCE_DATE_EPOCH.
- Дададзена магчымасць паказваць дадатковую інфармацыю аб зборцы libmdbx праз опцыю MDBX_BUILD_METADATA. Зараз задаецца інфармацыя проста ўключаецца ўнутр бібліятэкі ў якасці значэння mdbx_build.metadata, а ў далейшым таксама будзе выкарыстоўвацца пры фармаванні пакетаў і да т.п.
- Дададзена лагіраванне памылак, якія вяртаюцца з API. Цяпер для гэтага дастаткова задаць узровень лагавання MDBX_LOG_DEBUG (для лагавання памылак за вылікам MDBX_NOTFOUND) або MDBX_LOG_TRACE (для лагавання ўсіх памылак, а таксама MDBX_RESULT_TRUE).
- Змяненне паводзін:
- Дададзены метад mdbx::cursor::get_multiple_samelength() і перайменаваны mdbx::txn::put_multiple_samelength().
- Для аднастайнасці C++ API пры выкананні аперацыі MDBX_GET_MULTIPLE зараз таксама вяртаецца значэнне самага ключа.
- Для памерных канстант mdbx::env::geometry базавы тып зменены з беззнакавага size_t на знакавы intptr_t.
- Выбар у карысць выкарыстання ntdll замест CRT зараз робіцца толькі пры відавочным адключэнні C++ API.
- Забяспечана вызваленне памяці скінутых/перапыненых якія чытаюць транзакцый, якія перадаюцца ў mdbx_txn_commit(). Пагадненне па API патрабуе, каб такія транзакцыі вызваляліся з дапамогай mdbx_txn_abort(), з-за чаго функцыя mdbx_txn_commit() вяртала памылку ў такіх выпадках, не руйнуючы самі транзакцыі. Гэта прыводзіла да ўцечак памяці з-за памылак у дадатках, што заахвоціла змяніць паводзіны.
- Выкарыстанне макраса __deprecated_enum, калі ён вызначаны.
- Пры зборцы з дапамогай CMake выбар стандарту мовы C зараз выконваецца з улікам CMAKE_C_STANDARD.
Крыніца: opennet.ru
