Bol otvorený release knižnice libmdbx 0.11.3 (MDBX), ktorá implementuje vysoko výkonnú kompaktnú embedovanú databázu triedy kľúč-hodnota. Kód libmdbx je distribuovaný pod licenciou OpenLDAP Public License. Podporované sú všetky aktuálne operačné systémy a architektúry, ako aj ruský Elbrus 2000. Na konci roka 2021 sa libmdbx používa ako backend na ukladanie v dvoch z najrýchlejších klientov Ethereum — Erigon a nová „Akula“, ktorá je podľa dostupných informácií najvýkonnejším klientom Ethereum.
Historicky je libmdbx hlbokou prepracovaním databázového systému LMDB a prevyšuje svojho predchodcu v spoľahlivosti, rozsahu funkcionalít 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 overenie integrity štruktúry DB s niektorými obnovovacími možnosťami.
Technologicky libmdbx ponúka ACID, striktne serializované zmeny a neblokujúce čítanie s lineárnym škálovaním naprieč CPU jadrami. Podporovaná je automatická kompakcia, automatické riadenie veľkosti DB, odhad objemu výberov podľa rozsahov (range query estimation). Od roku 2016 je projekt financovaný spoločnosťou Positive Technologies a od roku 2017 je používaný v jej produktoch.
Pre libmdbx je k dispozícii C++ API, ako aj voľne dostupné väzby na jazyky Rust, Haskell, Python, NodeJS, Ruby, Go a Nim.
Hlavné novinky, úpravy a opravy pridané po predchádzajúcej správe z 11. októbra:
- C++ API sa považuje za pripravené na použitie.
- Výrazne sa urýchlilo aktualizovanie dát GC pri uzamknutí obrovských transakcií, čo je obzvlášť dôležité pri používaní libmdbx v ekosystéme Ethereum.
- Zmenila sa vnútorná signatúra formátu DB s podporou automatických aktualizácií, ktoré sú úplne transparentné pre používateľov. To vylučuje falošne pozitívne správy o poškodení DB pri čítaní transakcií fixovaných aktuálnymi verziami staršími verziami knižnice.
- Pridané funkcie mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() a mdbx_env_get_syncbytes(). Pridaná podpora operácie MDBX_SET_UPPERBOUND.
- Odstránili sme všetky upozornenia pri zostavovaní všetkými podporovanými kompilátormi v režimoch C++ 11/14/17/20. Zabezpečili sme kompatibilitu so staršími kompilátormi: clang od verzie 3.9, gcc od verzie 4.8, vrátane zostavovania prostredníctvom sdevtoolset-9 pre CentOS/RHEL 7.
- Odstránili sme možnosť konfliktu meta-stránok po ručnom prepnutí na konkrétnu meta-stránku pomocou nástroja mdbx_chk.
- Opravené neočakávané vrátenie chyby MDBX_PROBLEM pri prepise zastaraných meta-stránok.
- Opravené vrátenie MDBX_NOTFOUND v prípade nepresného zhody pri spracovaní dotazu MDBX_GET_BOTH.
- Odstránená chyba kompilácie na Linuxe pri absencii hlavičkových súborov s popismi rozhraní s jadrom.
- Opravená kolízia medzi vnútornou vlajkou MDBX_SHRINK_ALLOWED a voľbou MDBX_ACCEDE.
- Odstránených niekoľko nadbytočných assert kontrol.
- Opravené neočakávané vrátenie MDBX_RESULT_TRUE z funkcie mdbx_env_set_option().
- Celkovo bolo vykonaných viac ako 90 zmien v 25 súboroch, pridalo sa ~1300 riadkov a odstránilo sa ~600.
Zdroj: opennet.ru
