Byla uvolněna knihovna libmdbx 0.11.3 (MDBX) s implementací vysoce výkonné kompaktní vestavěné databáze typu klíč-hodnota. Kód libmdbx je distribuován pod licencí OpenLDAP Public License. Podporovány jsou všechny aktuální operační systémy a architektury, včetně ruského Elbrus 2000. Na konci roku 2021 se libmdbx používá jako backend úložiště ve dvou nejrychlejších klientech Ethereum — Erigon a nová „Šelma“, která podle dostupných informací je nejvýkonnějším klientem Ethereum.
Historicky je libmdbx hlubokým přerozdělením databázového systému LMDB a překonává svého předchůdce v oblasti spolehlivosti, funkcionality a výkonu. Na rozdíl od LMDB věnuje libmdbx velkou pozornost kvalitě kódu, stabilnímu 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 obnovy.
Technologicky libmdbx nabízí ACID, striktní serializaci změn a neblokující čtení s lineárním škálováním podle jader CPU. Podporována je automatická kompakce, automatické řízení velikosti DB, odhad objemu výběrů podle rozsahů (range query estimation). Od roku 2016 je projekt financován společností Positive Technologies a od roku 2017 se používá v jejích produktech.
Pro libmdbx je nabízena C++ API, stejně jako podporované vazby od nadšenců pro jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim.
Hlavní novinky, úpravy a opravy přidané po předchozí zprávě z 11. října:
- C++ API je považováno za připravené k použití.
- Výrazně bylo zrychleno aktualizování dat GC při zajištění obrovských transakcí, což je zvláště aktuální při použití libmdbx v ekosystému Ethereum.
- Byla změněna vnitřní signatura formátu DB s podporou automatické aktualizace, která je zcela průhledná pro uživatele. To umožňuje vyloučit falešně pozitivní zprávy o poškození DB, když zastaralé verze knihovny jsou používány k přečtení transakcí, které byly zajištěny aktuálními verzemi.
- Byly přidány funkce mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() a mdbx_env_get_syncbytes(). Přidána podpora operace MDBX_SET_UPPERBOUND.
- Byly odstraněny všechny varování při sestavení všemi podporovanými kompilátory v režimech C++ 11/14/17/20. Zajištěna byla kompatibilita se zastaralými kompilátory: clang od verze 3.9, gcc od verze 4.8, včetně sestavení pomocí sdevtoolset-9 pro CentOS/RHEL 7.
- Byla odstraněna možnost konfliktu meta-stránek po ručním přepnutí na určitou meta-stránku pomocí nástroje mdbx_chk.
- Byl opraven návrat neočekávané chyby MDBX_PROBLEM při přepisování zastaralých meta-stránek.
- Opraveno vracení MDBX_NOTFOUND v případě nepřesného shody při zpracování požadavku MDBX_GET_BOTH.
- Odstraněna chyba kompilace na Linuxu při absenci hlavičkových souborů s popisy rozhraní s jádrem.
- Opraven konflikt mezi vnitřní vlajkou MDBX_SHRINK_ALLOWED a volbou MDBX_ACCEDE.
- Odstraněno několik nadbytečných assert kontrol.
- Opraveno nečekané vracení MDBX_RESULT_TRUE z funkce mdbx_env_set_option().
- Celkově bylo provedeno více než 90 změn ve 25 souborech, přidáno ~1300 řádků, odstraněno ~600.
Zdroj: opennet.ru
