Vydání embedded DBMS libmdbx 0.13.2

Byla zveřejněna verze libmdbx 0.13.2 (MDBX), která implementuje vysoce výkonnou kompaktní vestavěnou databázi klíč-hodnota. Kód libmdbx je distribuován pod licencí Apache 2.0. Všechny současné operační systémy a architektury jsou podporovány, stejně jako ruský Elbrus 2000. libmdbx nabízí vyvinuté API pro C++ a také nadšence podporované vazby na jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim , Deno, Scala.

Historicky je libmdbx hlubokým přepracováním LMDB DBMS a je lepší než jeho předchůdce ve spolehlivosti, sadě funkcí a výkonu. Ve srovnání s LMDB klade libmdbx velký důraz na kvalitu kódu, stabilitu API, testování a automatické kontroly. Je dodáván obslužný program pro kontrolu integrity struktury databáze s některými možnostmi obnovy. Z technologického hlediska nabízí libmdbx ACID, silnou serializaci změn a neblokující čtení s lineárním škálováním napříč jádry CPU. Je podporována automatická kompaktifikace, automatická správa velikosti databáze a odhad dotazů na rozsah.

Hlavní změny:

  • Urychlete aktualizaci GC při vracení/vkládání seznamů stránek ve složitých scénářích. Dříve deaktivovaný experimentální korekční režim zpětné vazby byl vylepšen a aktivován. To zásadně zlepšilo konvergenci (snížil se počet opakování) a také odstranilo defekt, který vedl k „zacyklení“ při provádění transakcí (s návratem chyby MDBX_PROBLEM) ve vzácných specifických podmínkách.
  • Sestavovací skripty CMake zahrnují standard C23.
  • Přidána T-makra pro spárované funkce char/wchar_t.
  • Přidána podpora pro vnořené transakce zápisu do C++ API.
  • Přechod na druhé vydání specifikace sémantického verzování („Sémantické verzování 2“) byl dokončen a byl zajištěn export informací o verzi do VERSION.json.
  • Pro reprodukovatelnost sestavení byla přidána podpora pro proměnnou prostředí SOURCE_DATE_EPOCH. Podpora MDBX_BUILD_TIMESTAMP je zachována a tato proměnná má přednost.
  • Přidána možnost zadat další informace o sestavení libmdbx prostřednictvím volby MDBX_BUILD_METADATA. Nyní jsou zadané informace jednoduše zahrnuty do knihovny jako hodnota mdbx_build.metadata a v budoucnu se budou používat také při vytváření balíčků atd.
  • Přidáno protokolování chyb vrácených z API. Nyní k tomu stačí nastavit úroveň protokolování MDBX_LOG_DEBUG (pro chyby protokolování mínus MDBX_NOTFOUND) nebo MDBX_LOG_TRACE (pro protokolování všech chyb, stejně jako MDBX_RESULT_TRUE).
  • Změna chování:
    • Přidána metoda mdbx::cursor::get_multiple_samelength() a přejmenována na mdbx::txn::put_multiple_samelength().
    • Pro konzistenci C++ API nyní operace MDBX_GET_MULTIPLE také vrací hodnotu samotného klíče.
    • U konstant velikosti mdbx::env::geometry byl základní typ změněn z unsigned size_t na signed intptr_t.
    • Volba použít ntdll místo CRT se nyní provádí pouze při explicitním zakázání C++ API.
    • Zajistí, že se uvolní paměť přerušených/přerušených transakcí čtení předávaných mdbx_txn_commit(). Konvence API vyžaduje, aby takové transakce byly uvolněny pomocí mdbx_txn_abort(), což způsobí, že mdbx_txn_commit() v takových případech vrátí chybu, aniž by samotné transakce přerušilo. To vedlo k únikům paměti kvůli chybám v aplikacích, což vyvolalo změny chování.
    • Použití makra __deprecated_enum, pokud je definováno.
    • Při vytváření pomocí CMake je nyní standard jazyka C vybrán na základě CMAKE_C_STANDARD.

Zdroj: opennet.ru

Přidat komentář