Bol zverejnený release knižnice libmdbx 0.13.1 (MDBX) s implementáciou vysoko výkonného kompaktného vstavaného databázového systému triedy kľúč-hodnota. Kód libmdbx je distribuovaný pod licenciou Apache 2.0. Podporované sú všetky aktuálne operačné systémy a architektúry, vrátane ruského Elbrus 2000. Pre libmdbx je k dispozícii rozsiahle API pre C++, ako aj podporované väzby 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:
- Zmena licencie kódu z OpenLDAP Public License na Apache 2.0.
- Rozšírenie API kurzorov o pohodlnejšie a zjavnejšie operácie polohovania podľa podmienok <, =, > pre kľúče aj pre páry kľúč-hodnota. Pridané funkcie mdbx_cursor_unbind() a mdbx_txn_release_all_cursors() pre flexibilné riadenie kurzorov v scenároch opätovného použitia so znížením režijných nákladov. Funkcie mdbx_cursor_scan() a mdbx_cursor_scan_from() na skenovanie tabuliek s použitím funkcionálneho predikátu a znížením príslušných režijných nákladov.
- Prepracovanie kurzorov na zjednotenie správania, pravidelnejší kód, zníženie počtu vetvení a strojových operácií.
- Premiestnenie funkčnosti nástroja mdbx_chk do knižnice vo forme funkcie mdbx_env_chk() na kontrolu integrity štruktúry databázy, vrátane zapojenia logiky aplikácie.
- Možnosť MDBX_opt_gc_time_limit na flexibilnejšiu kontrolu času stráveného hľadaním sekvencií susediacich voľných stránok v GC.
- Významné zníženie prevádzkových nákladov na spustenie transakcií v scenároch s veľkým počtom DBI-hándlov, vďaka oneskorenej/lenej inicializácii prvkov pomocných tabuliek. Vrátane mechanizmu podpory sparsovaných množín DBI-hándlov, spravovaných možnosťou zostavenia MDBX_ENABLE_DBI_SPARSE, ktorá je predvolená.
- Zníženie nákladov na otvorenie DBI-hándlov. Vrátane mechanizmu oneskoreného uvoľnenia a podpory rýchlej cesty otvorenia bez použitia zámkov, spravovaného možnosťou zostavenia MDBX_ENABLE_DBI_LOCKFREE, ktorá je predvolene zapnutá.
- Podpora 'parkovania' čítacích transakcií s ich vytláčaním za účelom spracovania starých MVCC-snímků a zabránenia problémom spôsobeným pozastavením spracovania odpadu. Mechanizmus parkovania a vytláčania zaparkovaných transakcií je doplnkom a zároveň jednoduchšou alternatívou k spúšťaniu Handle-Slow-Readers. Pre pohodlie majú funkcie mdbx_txn_park() a mdbx_txn_unpark() ďalšie argumenty, ktoré umožňujú žiadosť o automatickú 'rozparkovanie' zaparkovaných a reštart vytlačených transakcií. Do utilitky mdbx_copy boli pridané príslušné možnosti -d a -p.
- Podpora obnovenia otvorenej pracovnej prostredia s DB v podprocesoch po rozdelení rozdelenej procesom prostredníctvom mdbx_env_resurrect_after_fork().
- Podpora premenovania tabuliek prostredníctvom mdbx_dbi_rename() a mdbx_dbi_rename2(). Pridaná funkcia mdbx_enumerate_tables() na získanie informácií o pomenovaných užívateľských tabulkách.
- Režim práce MDBX_NOSTICKYTHREADS namiesto MDBX_NOTLS na zjednodušenie integrácie s ľahkými vláknami/niťami a ich multiplexovanie spolu s transakciami podľa operačného systému.
- Na identifikáciu DB bol pridaný UUID prístupný v poli mi_dxbid štruktúry MDBX_envinfo, získanej prostredníctvom mdbx_env_info_ex(). Realizované získanie informácií o DB bez jej otvorenia prostredníctvom mdbx_preopen_snapinfo().
- Podpora funkcií logovania spätnej väzby bez funkčnosti vprintf(), čo výrazne uľahčuje používanie logovania v pripojeniach k iným programovacím jazykom.
- Pridanie do API funkcií mdbx_txn_copy2pathname() a mdbx_txn_copy2fd().
- Reštrukturalizácia zdrojového kódu s refaktoringom.
- Použitie termínu 'tabuľa' namiesto 'subDb'.
- Oznámenie o zastaraných možnostiach MDBX_COALESCE a MDBX_NOTLS. Nahradenie možností zostavy MDBX_USE_VALGRIND bežnou možnosťou ENABLE_MEMCHECK.
Zdroj: opennet.ru
