Bola vydaná knižnica libmdbx 0.11.7 (MDBX) s implementáciou vysoko výkonej kompaktnej embedded databázy 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, vrátane ruského Elbrus 2000.
Tento release je pozoruhodný migráciou projektu na službu GitFlic po tom, čo 15. apríla 2022 administrácia GitHub bez akýchkoľvek varovaní a vysvetlenia dôvodov odstránila libmdbx spolu s množstvom ďalších projektov, pričom zároveň zablokovala prístup mnohým vývojárom spojeným so spoločnosťami, ktoré spadli pod sankcie USA. Z pohľadu používateľov sa všetky stránky, repozitár a forky projektu náhle premenili na stránku „404“, bez možnosti akejkoľvek komunikácie a zistenia dôvodov.
Žiaľ, takmer všetky issues sa stratili, v ktorých bolo veľa otázok s podrobnými odpoveďami, ako aj množstvo diskusií. Strata týchto informácií je jedinou objektívnou škodou, ktorú administrácia GitHub dokázala spôsobiť projektu. Čiastočne zostávajú kópie diskusií prístupné v archíve archive.org.
Strata vybudovaných CI scénarov a infraštruktúry (sprístupnenej pre OpenSource projekty zadarmo) nás prinútila venovať sa revízii, unifikácii a odstráneniu malého technického dlhu. Aktuálne je CI obnovené takmer v pôvodnej podobe, okrem zostavenia a testov pre všetky varianty BSD a Solaris. Čo je charakteristické, po krokoch zo strany GitHub neprišlo žiadne vysvetlenie ani oznámenia, okrem pripomienky o potrebe platby a pokusoch o zobrazenie peňazí.
Od poslednej správy o vydaní libmdbx v0.11.3, okrem obnovy po krokoch GitHub, stojí za zmienku nasledovné doplnky a opravy:
- Bola pridaná obchádzajúca funkcia pre zistený efekt/defekt nekompatibility v zlúčenom cache stránok a bufferov v jadre Linux. V systémoch, kde sú cache stránok a bufferov skutočne zlúčené, nemá zmysel pre jadro míňať pamäť na dve kópie dát pri zápise do už zobrazeného súboru v pamäti. Preto sa zapisované dáta stávajú viditeľnými prostredníctvom zobrazenia v pamäti pred dokončením systémového volania write(), aj keď dáta ešte nie sú zapísané na disk.
Celkovo iné správanie nie je racionálne, pretože pri oneskorenom zlúčení bude rovnako potrebné získať zámky pre zoznamy stránok, kopírovať údaje alebo upraviť PTE. Preto neformálne pravidlo koherencie platilo od roku 1989, keď sa v SRV4 objavil unified buffer cache. Preto vyžadovalo odhalenie podivných výpadkov v zaťažených scenároch využitia libmdbx veľa práce. Najprv pri reprodukcii problému, potom pri overovaní hypotéz a kontrole úprav.
Teraz môžeme s istotou povedať, že problém bol presne identifikovaný, lokalizovaný a spoľahlivo odstránený, napriek všetkým ťažkostiam a špecifickosti scenára reprodukcie. Ďalší vývoj mechanizmu obídenia bol potvrdený jedným z vývojárov Erigon (Ethereum), v jeho prípade sa na debugovacej zostave ochrana prejavovala ako regresia v dôsledku zbytočnej assert-kontroly.
Je potrebné poznamenať, že v kontexte širokého použitia libmdbx v pracovných projektoch je principiálne dôležitejšie zabezpečenie spoľahlivej práce než zisťovanie „či ide o chybu alebo zvláštnosť“ a či sa dá na takú koherenciu spoľahnúť, nieto hľadanie príčin nekoherencie v jadre Linuxu. Preto je tu reč o odstránení problému, ktorý mohol zasiahnuť používateľov.
- Bol odstránený regres vyskytovania chyby EXDEV (Cross-device link) pri horúcom kopírovaní DB bez kompakcie na iný súborový systém, ako prostredníctvom API, tak aj utilitou mdbx_copy.
- Kris Zyp implementoval podporu libmdbx v Deno. Kai Wetlesen vytvoril balík RPM pre Fedora. David Bouyssié realizoval väzby pre Scala.
- Opravené spracovanie hodnoty určenej možnosťou MDBX_opt_rp_augment_limit pri spracovaní obrovských transakcií vo veľkých DB. Predtým kvôli chybe mohli byť vykonávané zbytočné akcie, čo niekedy ovplyvnilo výkon v implementáciách Ethereum (Erigon/Akula/Silkworm) a projektoch Binance Chain.
- Opravených množstvo nedostatkov, vrátane v C++ API. Odstránených veľa problémov so zostavovaním v raritných a exotických konfiguráciách. Kompletný zoznam všetkých významných úprav je dostupný v ChangeLog.
- Celkom bolo vykonaných 185 zmien v 89 súboroch, pridaných ≈3300 riadkov, odstránených ≈4100. Viac bolo odstránených hlavne kvôli čistenie od už zbytočných technologických súborov súvisiacich s GitHubom a závislými službami.
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, prísnu serializáciu zmien a neblokujúce čítanie s lineárnym škálovaním na jadrá CPU. Podporuje sa automatická kompaktnosť, automatické riadenie veľkosti DB, odhad objemu výberov podľa rozsahov (odhad rozsahu dotazov). Od roku 2016 je projekt financovaný spoločnosťou Positive Technologies a od roku 2017 sa používa v jej produktoch.
Pre libmdbx je k dispozícii rozvinuté C++ API, ako aj podporované nadšencami väzby na jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Zdroj: opennet.ru
