Vydání vestavěné databázového systému libmdbx 0.13.7.

Byla vydána verze knihovny libmdbx 0.13.7 (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 rozsáhlé API pro C++, stejně jako podporované vazby pro jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno a Scala. Mezi projekty, které využívají libmdbx, patří Isar, Erigon a Reth, stejně jako vývojové projekty firem StarkWare a Positive Technologies.

Historicky je libmdbx hlubokou přepracováním databázového systému LMDB a překonává svého předchůdce v spolehlivosti, sadě funkcí a výkonu. Ve srovnání s LMDB věnuje libmdbx velkou pozornost kvalitě kódu, stabilnímu fungování API, testování a automatickým kontrolám. Dodává se nástroj pro kontrolu integrity struktury databáze s některými možnostmi obnovení. Technologicky libmdbx nabízí ACID, přísnou serializaci změn a neblokující čtení s lineárním škálováním podle CPU jader. Podporováno je automatické zhuštění, automatické řízení velikosti databáze, odhad objemu dotazů podle rozsahu (range query estimation).

Hlavní změny:

  • Byla odstraněna kritická chyba ve funkčnosti mdbx_env_resurrect_after_fork() při používání SysV semaforů. Chyba se projevila pouze po vytvoření potomkového procesu pomocí fork() během probíhající zápisové transakce, což vedlo k nesprávnému fungování semaforů a dále k nejrůznějším chybám, včetně poškození databáze. Problém existoval od okamžiku vzniku mdbx_env_resurrect_after_fork() a týkal se macOS a také POSIX platforem při sestavení s volbou MDBX_LOCKING=5.
  • Byl vyřešen problém v API pro kopírování databáze, který se projevoval na systémech POSIX mimo Linux (hlavně na macOS) a také v některých případech při umístění cílového souboru na ne-lokálním souborovém systému. Problém vedl k návratu chyby EWOULDBLOCK/EAGAIN, což bylo způsobeno nedostatkem/kontliktem zámků fcntl(F_SETLK) a flock() v jádru operačního systému. Byla přepracována obsluha chyb při zachycování souborových zámků v API pro kopírování na systémech POSIX.
  • Byla odstraněna chyba, která vedla k nečekanému návratu MDBX_BAD_DBI při současném spuštění několika transakcí uvnitř jednoho procesu po otevření databáze.
  • Byla opravena chyba, která vedla k nečekanému návratu MDBX_DBS_FULL při opětovném otevření již otevřených tabulek a dosažení limitu otevřených DBI deskriptorů.
  • Byla opravena chyba při sestavování pro platformu Android při explicitním určení _FILE_OFFSET_BITS.
  • Byla opravena chyba použití ENOMEM místo MDBX_ENOMEM. To mohlo narušit sestavení na ne-POSIX/Windows platformách v závislosti na konfiguraci a/nebo verzi SDK.
  • Bylo upraveno nebo odstraněno několik nesprávných assert kontrol, které vedly k pádu ladicích sestavení ve specifických situacích. Hlavně v kódu funkcí txn_end(), txn_lock() a txn_unlock() jak na Windows, tak na POSIX.
  • Byly odstraněny drobné upozornění MSVC. Upozornění C5286 a C5287 byla vypnuta.
  • Byla vylepšena logika odmítnutí použití OFD zámků na platebních platformách POSIX. Nyní kromě EINVAL berou v úvahu další chybové kódy (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), což umožní shromážděné knihovně fungovat v některých případech, kdy aktuální jádro/kontejner/emulátor nepodporuje požadované systémové volání.
  • Do testovacího rámce byla přidána podpora volby „—numa “ pro přiřazení stochastického testu k NUMA uzlu. Do battery/tmux skriptu bylo přidáno explicitní rozdělení po NUMA uzlech, což výrazně zvýšilo účinnost při testování na NUMA strojích.
  • Ve stochastickém skriptu byl zaveden náhodný pořadí spuštění jednotlivých testů.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster