Udgaven version 0.13.3 af libmdbx (MDBX) med implementering af en højtydende, kompakt indbygget nøgle-værdi-database. Koden til libmdbx er distribueret under Apache 2.0-licensen. Det understøtter alle aktuelle operativsystemer og arkitekturer, samt den russiske Elbrus 2000. Til libmdbx tilbydes et udviklet API til C++, samt understøttede bindinger til sprog som Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Historisk set er libmdbx en dybgenarbejdning af DBMS LMDB og overgår sin forgænger i pålidelighed, funktionssæt og ydeevne. Sammenlignet med LMDB lægges der i libmdbx stor vægt på kodekvalitet, stabil drift af API, testning og automatiserede kontroller. Der leveres et værktøj til kontrol af databasens integritet med nogle genopretningsmuligheder. Teknologisk tilbyder libmdbx ACID, streng serialisering af ændringer og ikke-blokerende læsning med lineær skalering på CPU-kerner. Auto-komprimering, automatisk management af databasedimensioner og estimering af udvalg over områder (range query estimation) understøttes.
Vigtige ændringer:
- Version 0.13.x er blevet stabil. Udviklingen af version 0.14.x er begyndt.
- C API har fået funktionen mdbx_cursor_count_ex(), som muliggør at få både antallet af multi-værdier, der svarer til den nuværende nøgle, samt information om det indlejrede træ, der gemmer disse værdier.
- C++ API har fået metoden mdbx::txn::make_broken(), som svarer til mdbx_txn_break().
- I værktøjerne mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat er der implementeret logging af fejl, advarsler og vigtige meddelelser fra libmdbx.
- Ændring af adfærd:
- Når profilering af garbage collection aktiveres (kompilering med optionen MDBX_ENABLE_PROFGC=ON), tælles CPU-tidens omkostninger til sammenlægning af side-lister, dvs. arbejdet af funktionen pnl_merge().
- I testværktøjet er datatilstandsindstillingen omdøbt fra data.dups til data.multi.
- Kontrollen af nøglelængden er forbedret inden i cursor_seek().
- Hvis der ikke er angivet en specifik værdi af brugeren via mdbx_env_set_option(MDBX_opt_txn_dp_limit), justeres dirty-pages-limit ved starten af hver ikke-nestede skrive-transaktion, baseret på mængden af tilgængeligt RAM og størrelsen på databasen.
- I tilstanden MDBX_NOSTICKYTHREADS tillades commit/abort af indlejrede transaktioner fra enhver tråd.
- Ved forsøg på at starte indlejrede transaktioner i MDBX_WRITEMAP-tilstand foretages der logging, og der returneres en fejl, MDBX_INCOMPATIBLE.
- I C++ API anvendes der som standard kun standardværdier i konstruktører/initieringsmetoder og metoder relateret til dannelse af databasedimensioner.
- Inden i mdbx_env_set_geometry() er heuristikkerne forbedret til valg af standarddatabasegeometri parametre anmodet af brugeren.
- Fejlrettelser:
- Regressionen ved låsning af mutex er blevet rettet ved forsøget på at lukke dbi-deskriptoren igen, herunder ved forsøget på eksplicit at lukke deskriptoren efter sletning af den tilknyttede tabel.
- Regressionen af tilstanden for indlejrede/dupsort cursorer efter indsættelse af data i MDBX_APPEND-tilstand er blevet rettet.
- Understøttelse af at hente boot_id ved arbejde inden i en LXC-container.
- Fejlen ved forkert behandling af forsøg på at starte en indlejret læse-transaktion er blevet løst. I sådanne tilfælde returneres nu fejlen MDBX_EINVAL, da indlejring kun understøttes for læse-skrive-transaktioner.
- SIGSEGV-regression ved adgang til nuladresse i skrivebeskyttet tilstand uden brug af LCK-fil er blevet løst, f.eks. ved placering af databasen på et medie, der kun er tilgængeligt for læsning.
Kilde: opennet.ru
