Zverejnené vydanie knižnice libmdbx 0.13.6 (MDBX) s implementáciou vysoko výkonných kompaktných embedded databáz typu kľúč-hodnota. Kód libmdbx je šírený pod licenciou Apache 2.0. Podporované sú všetky aktuálne operačné systémy a architektúry, ako aj ruský Elbrus 2000. Pre libmdbx je k dispozícii vyspelé API pre C++, ako aj podpory pre jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala podporované nadšencami. Z projektov, ktoré používajú libmdbx, môžeme spomenúť Isar, Erigon a Reth, ako aj vývoj spoločností StarkWare a Positive Technologies.
Historicky je libmdbx hlbokou rekonštrukciou DB LMDB a prevyšuje svojho predchodcu z hľadiska spoľahlivosti, sady funkcií a výkonu. 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áva sa nástroj na kontrolu integrity štruktúry DB 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 jadier CPU. Podporuje automatické zhušťovanie, automatické riadenie veľkosti DB, odhad objemu výberov podľa rozsahu (range query estimation).
Hlavné zmeny:
- Zmena správania: Pri neschopnosti odpojiť kurzor od jeho aktuálnej transakcie funkcia mdbx_cursor_bind() teraz vracia MDBX_EINVAL namiesto MDBX_BAD_TXN.
- Aby sa predišlo potenciálnym problémom, bolo zakázané používanie copy_file_range() na jadrach Linux 5.3 — 5.18.
- Vhadzovanie std::invalid_argument sa teraz vykonáva s jasnou správou MDBX_EINVAL.
- Bola odstránená regresia pri použití kurzorov pre DBI=0 (aka GC/FreeDB) v čítacích transakciách.
- Bola odstránená regresia vo forme chyby EAGAIN pri kopírovaní databázy na NFS a CIFS/SMB.
- Pri úpravách/rozvoji API v funkcii kopírovania bola pridaná ochrana súborovej zámky prostredníctvom fcntl() aj flock(). Avšak v závislosti od verzie lokálneho jadra, verzie vzdialeného servera NFS a možností montovania, to mohlo viesť k návratu POSIX chyby EAGAIN (11 na väčšine platforiem vrátane Linuxu).
- Bola opravená chyba merge/rebase v mdbx_txn_release_all_cursors_ex(), ktorá mohla viesť k následným neočakávaným chybám MDBX_EBADSIGN a únikom pamäte.
- Opravená assert kontrola v ceste dokončenia vnorených transakcií.
- Bola odstránená možnosť vrátenia neočakávanej chyby MDBX_BUSY z mdbx_txn_lock(dont_wait=false).
- Pre kompatibilitu s GCC 15.x v režime C23 bol zmenený poriadok uvádzania atribútov funkcií.
Zdroj: opennet.ru
