Bol to vydaný výstup knižnice libmdbx 0.13.3 (MDBX) s implementáciou vysoko výkonných kompaktných vstavaných databáz triedy kľúč-hodnota. Kód libmdbx je distribuovaný pod licenciou Apache 2.0. Podporujú sa všetky aktuálne operačné systémy a architektúry, ako aj ruský Elbrus 2000. Pre libmdbx je k dispozícii rozsiahle API pre C++, ako aj podporované prepojenia pre jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Historicky libmdbx predstavuje hĺbkovú rekonštrukciu DBMS LMDB a prevyšuje svojho predchodcu v spoľahlivosti, sade funkcií a výkonnosti. V porovnaní s LMDB sa v libmdbx kladie veľký dôraz na kvalitu kódu, stabilnú prácu API, testovanie a automatické kontroly. Dodávaný je nástroj na kontrolu integrity štruktúry databázy s niektorými možnosťami obnovy. Technologicky libmdbx ponúka ACID, prísnu serializáciu zmien a neblokujúce čítanie s lineárnym škálovaním podľa CPU jadier. Podporovaná je automatická kompakcia, automatické riadenie veľkosti databázy a odhad objemu výberov podľa rozsahov (range query estimation).
Hlavné zmeny:
- Veta 0.13.x získala status stabilnej. Začala sa vývojová práca na vete 0.14.x.
- Do C API bola pridaná funkcia mdbx_cursor_count_ex(), ktorá umožňuje získať počet viacnásobných hodnôt zodpovedajúcich aktuálnemu kľúču, ako aj informácie o vnorenom strome, ktorý tieto hodnoty uchováva.
- Do C++ API bola pridaná metóda mdbx::txn::make_broken(), ktorá je analógom mdbx_txn_break().
- V nástrojoch mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat bolo implementované logovanie chýb, upozornení a dôležitých správ od libmdbx.
- Zmenené správanie:
- Pri zapnutí profilovania zberu odpadu (sestavenie s voľbou MDBX_ENABLE_PROFGC=ON) sa teraz počítajú náklady na CPU na zlúčenie zoznamov stránok, t.j. na prácu funkcie pnl_merge().
- V testovacej utilite bola hodnota režimu dát premenovaná z data.dups na data.multi.
- Vylepšená kontrola dĺžky kľúča v rámci cursor_seek().
- Ak nie je používateľom prostredníctvom mdbx_env_set_option(MDBX_opt_txn_dp_limit) zadaná vlastná hodnota, potom sa nastaví dirty-pages-limit pri spustení každej nevnorenej zapisovacej transakcie na základe objemu dostupnej RAM a veľkosti databázy.
- V režime MDBX_NOSTICKYTHREADS je povolené commit/abort vnorených transakcií z akéhokoľvek vlákna.
- Pri pokuse o spustenie vnorených transakcií v režime MDBX_WRITEMAP sa vykonáva logovanie a vrátenie chyby MDBX_INCOMPATIBLE.
- V C++ API sa v konštruktoroch/init inicializátoroch a metódach, súvisiacich s formovaním geometrie databázy, predvolene používajú len predvolené hodnoty.
- V rámci mdbx_env_set_geometry() boli vylepšené heuristiky na prispôsobenie parametrov geometrie databázy, ktoré si používateľ požaduje ako „predvolené“.
- Opravy:
- Bol odstránený regres ned unlocking mutexu pri pokuse o opätovné uzavretie dbi-deskriptoru, vrátane pokusu o explicitné uzavretie deskriptoru po odstránení s ním súvisiacej tabuľky.
- Bol odstránený regres stavu vnoreného/dupsort kurzora po vložení údajov v režime MDBX_APPEND.
- Podpora získania boot_id pri práci vo vnútri LXC kontajnera.
- Opravená chyba nesprávneho spracovania pokusu o spustenie vnútorných čítacích transakcií. Teraz sa v takýchto situáciách vracia chyba MDBX_EINVAL, pretože vnorenie je podporované iba pre transakcie čítania-zápisu.
- Opravený regres SIGSEGV pri prístupe na nulovú adresu pri práci v režime iba na čítanie bez použitia LCK súboru, napríklad pri umiestnení databázy na médiu, ktoré je dostupné iba na čítanie.
Zdroj: opennet.ru
