Bol zverejnený release knižnice libmdbx 0.13.7 (MDBX) s implementáciou vysoko výkonej kompaktnej zabudovanej databázy typu 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, ako aj ruský Elbrus 2000. pre libmdbx je k dispozícii rozvinuté API pre C++, ako aj podporované nadšencami väzby na jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala. Z projektov využívajúcich libmdbx možno 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:
- Bola odstránená kritická chyba vo funkcii mdbx_env_resurrect_after_fork() pri používaní SysV semaforov. Chyba sa prejavila iba po vytvorení dcérskeho procesu prostredníctvom fork() na pozadí prebiehajúcej písacej transakcie, čo viedlo k nesprávnej práci semaforov a ďalej k najrozličnejším chybám, vrátane poškodenia DB. Problém existoval od vzniku mdbx_env_resurrect_after_fork() a zasahoval do macOS, ako aj do platformy POSIX pri zostavení s voľbou MDBX_LOCKING=5.
- Bola odstránená problém v API kopírovania DB, ktorý sa prejavoval na systémoch POSIX odlišných od Linuxu (najmä v macOS), ako aj v niektorých prípadoch, keď sa cieľový súbor nachádzal na ne-lokálnom súborovom systéme. Problém viedol k vráteniu chyby EWOULDBLOCK/EAGAIN, čo bolo spôsobené nedostatkom/kolíziou blokovaní fcntl(F_SETLK) a flock() v jadre OS. Prepracovala sa správa chýb zachytávania súborových blokovaní v API kopírovania na systémoch POSIX.
- Opravená chyba, ktorá spôsobovala neočakávané vrátenie MDBX_BAD_DBI pri súčasnom spustení viacerých transakcií v rámci jedného procesu po otvorení DB.
- Opravená chyba, ktorá spôsobovala neočakávané vrátenie MDBX_DBS_FULL pri opätovnom otvorení už otvorených tabuliek a dosiahnutí limitu otvorených DBI-deskriptorov.
- Opravená chyba kompilácie pre platformu Android pri explicitnom určení _FILE_OFFSET_BITS.
- Opravená chyba používania ENOMEM namiesto MDBX_ENOMEM. To mohlo nefungovať na ne-POSIX/Windows platformách v závislosti od konfigurácie a/alebo verzie SDK.
- Opravených alebo odstránených niekoľko nepresných assert-kontrol, ktoré spôsobovali pády odladených zostáv v špecifických situáciách. Predovšetkým v kóde funkcií txn_end(), txn_lock() a txn_unlock() na Windows aj POSIX.
- Odstránené bezvýznamné varovania MSVC. Vypnuté varovania C5286 a C5287.
- Vylepšená logika zrušenia používania OFD-zamknutí na POSIX-platformách. Teraz okrem EINVAL berieme do úvahy aj ďalšie kódy chýb (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), čo umožní fungovanie zostavenej knižnice v niektorých prípadoch, keď aktuálne jadro/kontajner/emulátor nepodporuje požadované systémové volania.
- Do testovacieho rámca pridaná podpora možnosti „—numa “ na viazanie stochastického testu k NUMA-uzlu. Do battery/tmux skriptu pridané explicitné rozdelenie medzi NUMA-uzly, čo výrazne zvýšilo účinnosť pri testovaní na NUMA-strojoch.
- V stochastickom skripte implementovaný náhodný poriadok spustenia jednotlivých testov.
Zdroj: opennet.ru
