UtgÄvan av biblioteket libmdbx 0.13.1 (MDBX) har publicerats, med implementeringen av 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, inklusive den ryska Elbrus 2000, stöds. För libmdbx erbjuds ett utvecklat API för C++, samt stödjande bindningar för 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:
- Ăndring av licens för koden frĂ„n OpenLDAP Public License till Apache 2.0.
- Utvidgning av API:et för pekare med mer anvÀndarvÀnliga och uppenbara positionsoperationer, liknande villkoren <, =, > för bÄde nycklar och nyckel-vÀrde-par. Funktionerna mdbx_cursor_unbind() och mdbx_txn_release_all_cursors() har lagts till för flexibel hantering av pekare i ÄteranvÀndningsscenarier för att minska overhead. Funktionerna mdbx_cursor_scan() och mdbx_cursor_scan_from() för att skanna tabeller med hjÀlp av en funktionell predikat och för att minska dÀrmed kopplad overhead.
- Omarbetning av pekare för att förena beteendet, mer konsekvent kod och minska antalet förgreningar och maskinoperationer.
- Flytt av funktionaliteten hos verktyget mdbx_chk inuti biblioteket som funktionen mdbx_env_chk() för att kontrollera databasstrukturens integritet, inklusive involverande av applikationslogik.
- Alternativet MDBX_opt_gc_time_limit för mer flexibel kontroll över den tid som spenderas pÄ att söka efter följd av intilliggande fria sidor i GC.
- Betydande minskning av overheadkostnader för att starta transaktioner i scenarier med ett stort antal DBI-handtag, genom fördröjd/lazier initialisering av elementen i hjÀlptabeller. Detta inkluderar en mekanism för att stödja sparade DBI-handtag, som styrs av byggalternativet MDBX_ENABLE_DBI_SPARSE, vilket Àr aktiverat som standard.
- Minskning av overheadkostnader för öppning av DBI-handtag. Detta inkluderar en mekanism för fördröjd frigöring och stöd för snabb öppning utan att anvÀnda lÄs, som styrs av byggalternativet MDBX_ENABLE_DBI_LOCKFREE, vilket Àr aktiverat som standard.
- Stöd för "parkering" av lÀsande transaktioner med deras utryckande för att ÄteranvÀnda gamla MVCC-snapshotar och förhindra problem som uppstÄr vid tillfÀllig fördröjning av skrÀputvinning. Mekanismen för parkering och utryckande av parkerade transaktioner Àr bÄde ett komplement och en enklare alternativ till callbacken Handle-Slow-Readers. För bekvÀmlighet har funktionerna mdbx_txn_park() och mdbx_txn_unpark() ytterligare argument som gör det möjligt att begÀra automatisk "avparkering" av parkerade och omstart av utryckta transaktioner. Relevanta alternativ -d och -p har lagts till i verktyget mdbx_copy.
- Stöd för ÄterstÀllning av en öppen databasarbetsmiljö i ett barnprocess efter förgrening/uppdelning av processen via mdbx_env_resurrect_after_fork().
- Stöd för att döpa om tabeller via mdbx_dbi_rename() och mdbx_dbi_rename2(). En funktion mdbx_enumerate_tables() har lagts till för att fÄ information om namngivna anvÀndartabeller.
- DriftlÀge MDBX_NOSTICKYTHREADS istÀllet för MDBX_NOTLS för att förenkla integrationen med lÀtta trÄdar/multiplexing av dessa tillsammans med operativsystemets trÄdtransaktioner.
- För identifiering av databasen har UUID lagts till, tillgÀngligt i fÀltet mi_dxbid i strukturen MDBX_envinfo, som erhÄlls via mdbx_env_info_ex(). Implementerat att hÀmta databasinformation utan att öppna den via mdbx_preopen_snapinfo().
- Stöd för callback-loggfunktioner utan vprintf()-funktionalitet, vilket avsevÀrt underlÀttar anvÀndningen av loggning i bindningar till andra programmeringssprÄk.
- TillÀgg av funktionerna mdbx_txn_copy2pathname() och mdbx_txn_copy2fd() till API:et.
- Ommöblering av kÀllkoden med refaktorering.
- AnvÀndning av termen "tabell" istÀllet för "subDb".
- FörÄldrade MDBX_COALESCE och MDBX_NOTLS alternativ har meddelats. Byter ut byggalternativet MDBX_USE_VALGRIND mot det allmÀnt accepterade ENABLE_MEMCHECK.
KĂ€lla: opennet.ru
