Byla vydána verze knihovny libmdbx 0.13.3 (MDBX) s implementací vysoce výkonné kompaktní vestavěné databáze typu klíč-hodnota. Kód libmdbx je distribuován pod licencí Apache 2.0. Podporovány jsou všechny aktuální operační systémy a architektury, včetně ruského Elbrus 2000. Pro libmdbx je k dispozici rozvinuté API pro C++, jakož i podporované vazby pro jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno a Scala.
Historicky je libmdbx hlubokou přepracováním SGBD LMDB a převyšuje svého předchůdce z hlediska spolehlivosti, funkčnosti a výkonu. Ve srovnání s LMDB se v libmdbx klade velký důraz na kvalitu kódu, stabilitu API, testování a automatické kontroly. Dodávána je utilita pro kontrolu integrity struktury databáze s některými možnostmi obnovy. Technologie libmdbx nabízí ACID, přísnou serializaci změn a neblokující čtení s lineárním škálováním podle jader CPU. Podporována je automatická kompaktifikace, automatické řízení velikosti databáze a odhad objemu dotazů podle rozsahů (range query estimation).
Hlavní změny:
- Větev 0.13.x získala status stabilní. Bylo zahájeno vyvíjení větve 0.14.x.
- Do C API byla přidána funkce mdbx_cursor_count_ex(), která umožňuje získat jak počet více hodnot odpovídajících aktuálnímu klíči, tak informace o vnořeném stromu, který tyto hodnoty uchovává.
- Do C++ API byla přidána metoda mdbx::txn::make_broken(), která odpovídá mdbx_txn_break().
- V utilitách mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat bylo implementováno logování chyb, varování a důležitých zpráv od libmdbx.
- Změna chování:
- Při zapnutí profilování sběrače odpadu (sestavení s volbou MDBX_ENABLE_PROFGC=ON) se nyní počítají náklady na čas CPU na sloučení seznamů stránek, tj. na práci funkce pnl_merge().
- V testovací utilitě byl režim dat přejmenován z data.dups na data.multi.
- Byla vylepšena kontrola délky klíče uvnitř cursor_seek().
- Pokud užživatel pomocí mdbx_env_set_option(MDBX_opt_txn_dp_limit) nenastavil konkrétní hodnotu, provádí se přizpůsobení dirty-pages-limit při startu každé nepodřízené zapisovací transakce na základě objemu dostupné RAM a velikosti databáze.
- V režimu MDBX_NOSTICKYTHREADS je povoleno commit/abort vnořených transakcí z libovolného vlákna.
- Při pokusu o spuštění vnořených transakcí v režimu MDBX_WRITEMAP dojde k logování a vrácení chyby MDBX_INCOMPATIBLE.
- V C++ API se v konstruktorech/initilizátorech a metodách souvisejících se formováním geometrie databáze výchozí hodnoty používají pouze defaultní hodnoty.
- Uvnitř mdbx_env_set_geometry() byly vylepšeny heuristiky pro výběr parametrů geometrie databáze požadovaných uživatelem „výchozí hodnotou“.
- Opravy:
- Byl odstraněn regres neodblokování mutexu při pokusu o opětovné uzavření dbi-deskriptoru, včetně pokusu o explicitní uzavření deskriptoru po odstranění s ním spojené tabulky.
- Byl odstraněn regres stavu vnořeného/dupsort kurzoru po vložení dat v režimu MDBX_APPEND.
- Podpora získávání boot_id při práci uvnitř kontejneru LXC.
- Byla odstraněna chyba nesprávného zpracování pokusu o spuštění vnořené čtecí transakce. Nyní se v takových situacích vrací chyba MDBX_EINVAL, protože vnoření je podporováno pouze pro transakce čtení-zápisu.
- Byl odstraněn regres SIGSEGV při pokusu o přístup k nulové adrese při práci v režimu pouze pro čtení bez použití LCK souboru, například při umístění databáze na médiu, které je dostupné pouze pro čtení.
Zdroj: opennet.ru
