Objavljena je bila izdaja libmdbx 0.13.3 (MDBX), ki izvaja visoko zmogljivo kompaktno vdelano bazo podatkov ključ-vrednost. Koda libmdbx se distribuira pod licenco Apache 2.0. Podprti so vsi trenutni operacijski sistemi in arhitekture, pa tudi ruski Elbrus 2000. libmdbx ponuja razvit API za C++, kot tudi za navdušence podprte vezave na jezike Rust, Haskell, Python, NodeJS, Ruby, Go, Nim , Deno, Scala.
Zgodovinsko gledano je libmdbx globoka predelava LMDB DBMS in je boljši od svojega prednika v zanesljivosti, naboru funkcij in zmogljivosti. V primerjavi z LMDB libmdbx daje velik poudarek kakovosti kode, stabilnosti API-ja, testiranju in samodejnim preverjanjem. Priložen je pripomoček za preverjanje celovitosti strukture baze podatkov z nekaterimi zmožnostmi obnovitve. Tehnološko gledano ponuja libmdbx ACID, močno serializacijo sprememb in branje brez blokiranja z linearnim skaliranjem po jedrih CPE. Podprto je samodejno zgoščevanje, samodejno upravljanje velikosti baze podatkov in ocena poizvedbe obsega.
Večje spremembe:
- Veja 0.13.x je dobila stabilen status. Začel se je razvoj veje 0.14.x.
- Funkcija mdbx_cursor_count_ex() je bila dodana API-ju C, ki vam omogoča, da dobite število več vrednosti, ki ustrezajo trenutnemu ključu, in informacije o ugnezdenem drevesu, ki shranjuje te vrednosti.
- Metoda mdbx::txn::make_broken(), podobna mdbx_txn_break(), je bila dodana API-ju C++.
- Pripomočki mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat izvajajo beleženje napak, opozoril in pomembnih sporočil iz libmdbx.
- Sprememba vedenja:
- Ko je omogočeno profiliranje GC (gradnja z možnostjo MDBX_ENABLE_PROFGC=ON), se zdaj izračuna čas CPE, porabljen za združevanje seznamov strani, tj. da funkcija pnl_merge() deluje.
- V pripomočku za testiranje je bila vrednost podatkovnega načina preimenovana iz data.dups v data.multi.
- Izboljšan nadzor dolžine ključa znotraj cursor_seek().
- Če uporabnik ne poda dejanske vrednosti z mdbx_env_set_option(MDBX_opt_txn_dp_limit), se omejitev umazanih strani prilagodi na začetku vsake neugnezdene pisalne transakcije glede na količino razpoložljivega RAM-a in velikosti baze podatkov.
- V načinu MDBX_NOSTICKYTHREADS je dovoljena potrditev/prekinitev ugnezdenih transakcij iz katere koli niti/niti.
- Pri poskusu izvajanja ugnezdenih transakcij v načinu MDBX_WRIITEMAP se izvede beleženje in vrne napaka MDBX_INCOMPATIBLE.
- V API-ju C++ se v konstruktorjih/inicializatorjih in metodah, povezanih z oblikovanjem geometrije baze podatkov, privzeto uporabljajo samo privzete vrednosti.
- Znotraj mdbx_env_set_geometry() je bila izboljšana hevristika za izbiro parametrov geometrije baze podatkov, ki jih zahteva uporabnik »privzeto«.
- Popravki:
- Odpravljena je regresija, ko se mutex ne odklene, ko poskušate znova zapreti deskriptor dbi, vključno s poskusom izrecnega zapiranja deskriptorja po izbrisu tabele, povezane z njim.
- Odpravljena regresija stanja kazalca ugnezdenega/dupsort po vstavljanju podatkov v načinu MDBX_APPEND.
- Podpora za pridobivanje boot_id pri delu v vsebniku LXC.
- Odpravljena je težava z nepravilno obdelavo poskusa zagona ugnezdene transakcije branja. V teh situacijah je zdaj vrnjena napaka MDBX_EINVAL, ker je gnezdenje podprto samo za transakcije branja in pisanja.
- Regresija SIGSEGV dostopanja do ničelnega naslova pri delu v načinu samo za branje brez uporabe datoteke LCK je bila odpravljena, na primer pri postavitvi baze podatkov na medij samo za branje.
Vir: opennet.ru
