Versionen av libmdbx-biblioteket 0.13.3 (MDBX) har publicerats, vilket implementerar en högpresterande kompakt inbÀddad nyckel-vÀrde-databas. Koden för libmdbx distribueras under Apache 2.0-licensen. Alla aktuella operativsystem och arkitekturer stöds, inklusive den ryska Elbrus 2000. För libmdbx erbjuds ett omfattande API för C++, samt stödda bindningar till sprÄk som Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno och 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:
- Version 0.13.x har fÄtt status som stabil. Utvecklingen av version 0.14.x har pÄbörjats.
- Funktionen mdbx_cursor_count_ex() har lagts till i C API, vilket gör det möjligt att fÄ bÄde antalet multipla vÀrden som motsvarar den aktuella nyckeln och information om det inre trÀdet som lagrar dessa vÀrden.
- Metoden mdbx::txn::make_broken() har lagts till i C++ API, motsvarande mdbx_txn_break().
- I verktygen mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat har loggning av fel, varningar och viktiga meddelanden frÄn libmdbx implementerats.
- Ăndring av beteende:
- NÀr profilering av skrÀpsamlare (kompilering med alternativet MDBX_ENABLE_PROFGC=ON) Àr aktiverat rÀknas nu CPU-tid för sammanslagning av sidlistor, dvs. för funktionen pnl_merge().
- I testverktyget har datalÀget Àndrats frÄn data.dups till data.multi.
- Kontrollen av nyckellÀngd i cursor_seek() har förbÀttrats.
- Om inte ett eget vÀrde anges av anvÀndaren via mdbx_env_set_option(MDBX_opt_txn_dp_limit), justeras dirty-pages-limit vid starten av varje icke-nÀstlad skrivtransaktion, baserat pÄ mÀngden tillgÀngligt RAM-minne och storleken pÄ databasen.
- I lÀget MDBX_NOSTICKYTHREADS tillÄts commit/abort av nÀstlade transaktioner frÄn vilken trÄd som helst.
- Vid försök att starta nÀstlade transaktioner i lÀget MDBX_WRITEMAP görs loggning och ett fel MDBX_INCOMPATIBLE returneras.
- I C++ API anvÀnds som standard endast standardvÀrden i konstruktorer/initierare och metoder relaterade till databashantering.
- Inuti mdbx_env_set_geometry() har heuristiker för att vÀlja de av anvÀndaren begÀrda databashanteringsalternativen "som standard" förbÀttrats.
- Buggfixar:
- En regression av oblockering av mutex vid försök att stÀnga dbi-deskriptoren igen, inklusive försök att uttryckligen stÀnga deskriptoren efter att den relaterade tabellen har raderats, har ÄtgÀrdats.
- En regression av den interna tillstÄndet för nÀstlade/dupsort-cursorer efter att ha infogat data i MDBX_APPEND-lÀge har ÄtgÀrdats.
- Stöd för att hÀmta boot_id vid arbete inom en LXC-container.
- Fel av invalid hantering av försök att starta en inbÀddad lÀsande transaktion har ÄtgÀrdats. Nu returneras ett felmeddelande MDBX_EINVAL i sÄdana situationer, eftersom nÀstlade transaktioner endast stöds för lÀs- och skrivtransaktioner.
- Regression av SIGSEGV som hÀnvisar till nulladress i lÀslÀge utan att anvÀnda LCK-fil har ÄtgÀrdats, till exempel nÀr databasen Àr placerad pÄ en lÀsbar enhet.
KĂ€lla: opennet.ru
