Выпуск убудаванай СКБД libmdbx 0.13.2

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

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