Prezentácia knižníc libmdbx 0.10.4 (MDBX) so zavedením vysoko výkonnej kompaktnej vstavané databázy typu kľúč-hodnota a súvisiacej knižnice libfpta 0.3.9 (FPTA), ktorá implementuje tabulárne zobrazenie údajov s sekundárnymi a zloženými indexmi nad MDBX. Obe knižnice sú distribuované pod licenciami schválenými OSI. Podporované sú všetky aktuálne operačné systémy a architektúry, ako aj ruský Elbrus 2000.
Historicky je libmdbx hlbokou revíziou DBMS LMDB a prekračuje svojho predchodcu z hľadiska spoľahlivosti, rozsahu funkcií a výkonu. V porovnaní s LMDB dáva libmdbx veľký dôraz na kvalitu kódu, stabilné API, testovanie a automatizované kontroly. Dodáva sa s nástrojom na kontrolu integrity štruktúry databázy s niektorými schopnosťami obnovenia.
Technologicky libmdbx ponúka ACID, prísnu serializáciu zmien a neblokujúce čítanie s lineárnym škálovaním na CPU jadrá. Podporuje sa automatická kompakcia, automatické riadenie veľkosti databázy a odhad objemu dotazov podľa rozsahov (range query estimation). Od roku 2016 je projekt financovaný spoločnosťou Positive Technologies a od roku 2017 sa používa v jej produktoch.
Pre libmdbx sa ponúka C++ API, ako aj podporované nadšencami väzby na jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. Pre libfpta je verejne dostupný iba popis API vo forme hlavičkového súboru C/C++.
Hlavné novinky, vylepšenia a opravy pridané od poslednej správy zo 9. mája:
- Zabezpečená možnosť reprodukovateľných zostavení.
- Opravená chyba, kvôli ktorej sa pri veľmi zriedkavých okolnostiach počas potvrdenia transakcie mohlo vyskytnúť zaseknutie. Problém odhalili odborníci Positive Technologies pri internom testovaní vlastných produktov.
- Vylepšené testy a rozšírené testovacie scenáre na kontrolu všetkých dosiahnuteľných neizomorfických stavov stromu strán a obsahu GC v databáze.
- V C++ API opravené zbytočné „noexcept“, pridané dodatočné preťaženia pre metódu „cursor::erase()“, implementácia búferov zbavená používania „std::string“ na zabezpečenie zarovnania (aktuálne pre CLANG libstdc++).
- Opraven regres v algoritme prepisovania špinavých strán (výberové vytesnenie zmenených stránok DB), ktoré sa prejavovalo zriedkavou neočakávanou chybou MDBX_PROBLEM pri zmene údajov vo veľkých transakciách.
- Bol vykonaný test fázu s pridaním niekoľkých kontrol pre zabezpečenie stability pri zámernom poškodeniu DB.
- Opravené menšie varovania UndefinedBehaviorSanitizer a problémy Coverity Scan.
- Opravená kontrola zastaraného a už nepoužívaného vnútorného pr flagu „P_DIRTY“ vo vnorených stránkach v rámci obrazov DB vytvorených staršími verziami knižnice.
- Vo skriptoch CMake bola vylepšená lokalizácia komponentov pre kompilátor potrebných na LTO (optimalizácia v čase prepojenia).
- Maximálny počet súbežných čitateľov bol zvýšený na 32767.
- Zrýchlená práca pri používaní Valgrindu a AddressSanitizeru.
- Na Windows bolo odstránené rekurzívne používanie SRW-zamku pri práci v režime MDBX_NOTLS (bez použitia lokálneho úložiska threadu), opravená generácia bootid v prípade zmeny systémového času, vylepšené detekovanie WSL1 a WSL2, pridaná možnosť otvorenia DB na Plan 9 pripojenom prostredníctvom DrvFS.
- Celkom bolo vykonaných viac ako 160 zmien v 57 súboroch, pridaných ~5000 riadkov, odstránených ~2500.
Osobitne by som chcel poďakovať tímu projektu Erigon (ekosystém Ethereum) za pomoc pri testovaní v extrémnych scenároch. Je pozoruhodné, že počas piatich mesiacov od vydania libmdbx v0.10.0, pri objeme DB 1-2 TB v každej inštalácii Erigon (používa sa na 7% uzlov Ethereum), boli prijaté iba tri hlásenia o poškodení DB, všetky sa vyskytli z vonkajších príčin, nie z chýb softvéru: v dvoch prípadoch boli príčinou problémy s RAM, v treťom chybné vynulovanie údajov v špecifickej konfigurácii úložného subsystému s využitím BTRFS.
Zdroj: opennet.ru
