Uppdateringen av libmdbx-biblioteket 0.13.2 (MDBX) har offentliggjorts, vilket ger en högpresterande kompakt inbÀddad nyckel-vÀrde-databas. Koden för libmdbx distribueras under Apache 2.0-licensen. Stöd för alla aktuella operativsystem och arkitekturer, samt den ryska Elbrus 2000, erbjuds. För libmdbx finns ett utvecklat API för C++, samt stödjande bindningar till sprÄk som Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Historiskt sett Àr libmdbx en djup omarbetning av databashanteraren LMDB och övertrÀffar sin föregÄngare i pÄlitlighet, funktionalitet och prestanda. I jÀmförelse med LMDB lÀggs det stor vikt vid kodkvalitet, stabilitet i API:et, testning och automatiska kontroller. En verktyg för integritetskontroll av databasstrukturen levereras med vissa ÄterstÀllningsmöjligheter. Teknologiskt erbjuder libmdbx ACID, strikt serialisering av Àndringar och icke-blockerande lÀsning med linjÀr skalning över CPU-kÀrnor. Automatisk komprimering av data, automatisk hantering av databasens storlek samt skattning av urvalsstorlekar baserat pÄ intervall (range query estimation) stödjs.
Huvudsakliga förÀndringar:
- Uppdateringstiden för GC har accelererats vid ÄterlÀmnande/placerande av sidor i komplexa scenarier. Den tidigare inaktiverade experimentella lÀgen för korrigerande feedback har förbÀttrats och aktiverats. Detta har vÀsentligt förbÀttrat konvergensen (minskat antal Äterförsök) och eliminerat ett fel som ledde till 'loopning' vid transaktionsfixering (med felkod MDBX_PROBLEM) under sÀllsynta specifika omstÀndigheter.
- CMake-skriptet inkluderar standarden C23.
- T-makron för par av funktioner char/wchar_t har lagts till.
- Stöd för inre skrivande transaktioner har lagts till i C++ API.
- ĂvergĂ„ngen till den andra upplagan av specifikationen för semantisk versionering ('Semantic Versioning 2') har genomförts och information om versionen exporteras nu till VERSION.json.
- För att sÀkerstÀlla reproducibilitet av byggnader har stöd för miljövariabeln SOURCE_DATE_EPOCH lagts till. Stödet för MDBX_BUILD_TIMESTAMP har sparats och denna variabel har högre prioritet.
- Möjligheten att ange ytterligare information om libmdbx-byggnader har lagts till via alternativet MDBX_BUILD_METADATA. Den angivna informationen inkluderas nu helt i biblioteket som vÀrde för mdbx_build.metadata, och kommer Àven att anvÀndas vid paketformering etc. i framtiden.
- Felsökning av fel som returneras frÄn API har lagts till. Nu rÀcker det att ange loggnivÄn MDBX_LOG_DEBUG (för loggning av fel bortsett frÄn MDBX_NOTFOUND) eller MDBX_LOG_TRACE (för loggning av alla fel, inklusive MDBX_RESULT_TRUE).
- Ăndring av beteende:
- Metoden mdbx::cursor::get_multiple_samelength() har lagts till och mdbx::txn::put_multiple_samelength() har bytt namn.
- För enhetlighet i C++ API Äterkommer nu Àven vÀrdet av sjÀlva nyckeln nÀr operationen MDBX_GET_MULTIPLE utförs.
- För storlekskonstanterna mdbx::env::geometry har den basala typen Àndrats frÄn osignerad size_t till signerad intptr_t.
- Valet att anvÀnda ntdll istÀllet för CRT görs nu endast vid uttrycklig inaktivering av C++ API.
- Minnesutrymme för avbrutna/lÀsta transaktioner som skickats till mdbx_txn_commit() har frigjorts. API-överenskommelsen krÀver att sÄdana transaktioner frigörs via mdbx_txn_abort(), vilket gör att funktionen mdbx_txn_commit() returnerade fel i sÄdana fall utan att förstöra sjÀlva transaktionerna. Detta ledde till minneslÀckor pÄ grund av applikationsfel, vilket motiverade en förÀndring av beteendet.
- AnvÀndning av makrot __deprecated_enum, om det Àr definierat.
- Vid byggnation med CMake vÀljs nu sprÄkstandarden C med hÀnsyn till CMAKE_C_STANDARD.
KĂ€lla: opennet.ru
