Vydanie DBMS libmdbx 0.11.7. Presuňte vývoj na GitFlic po uzamknutí na GitHub

Knižnica libmdbx 0.11.7 (MDBX) bola vydaná s implementáciou vysokovýkonnej kompaktnej vstavanej databázy kľúč-hodnota. Kód libmdbx je licencovaný v rámci verejnej licencie OpenLDAP. Podporované sú všetky súčasné operačné systémy a architektúry, ako aj ruský Elbrus 2000.

Vydanie je pozoruhodné migráciou projektu na službu GitFlic po tom, čo 15. apríla 2022 administrácia GitHubu bez akéhokoľvek varovania alebo vysvetlenia odstránila libmdbx spolu s množstvom ďalších projektov, pričom súčasne zablokovala prístup mnohým vývojárom spojeným s spoločnosti, na ktoré sa vzťahujú sankcie USA. Z pohľadu používateľov sa zrazu všetky stránky, úložisko a forky projektu zmenili na 404 stránku, bez možnosti akejkoľvek komunikácie a zisťovania dôvodov.

Žiaľ, takmer všetky čísla, v ktorých bolo veľa otázok s podrobnými odpoveďami, ako aj veľa diskusií, sa stratili. Strata týchto informácií je jedinou objektívnou škodou, ktorú sa správe GitHubu podarilo projektu spôsobiť. Čiastočné kópie diskusií zostávajú dostupné na archive.org.

Strata vybudovaných CI scenárov a infraštruktúry (dostupnej pre OpenSource projekty zadarmo) nás prinútila pristúpiť k revízii, zjednoteniu a odstráneniu malého technického dlhu. Teraz bolo CI obnovené takmer v rovnakom rozsahu, s výnimkou testov zostavenia a spustenia pre všetky varianty BSD a Solaris. Po akciách GitHub zvyčajne nedostal žiadne vysvetlenia ani upozornenia, okrem pripomenutí o potrebe platby a pokusov o odpísanie peňazí.

Od posledných správ o vydaní libmdbx v0.11.3, okrem obnovy z akcií GitHub, stojí za zmienku nasledujúce vylepšenia a opravy:

  • Pridané riešenie pre zistený nekoherentný efekt/defekt v kombinovanej stránke a vyrovnávacej pamäti v jadre Linuxu. V systémoch, kde sú vyrovnávacia pamäť stránok a vyrovnávacej pamäte skutočne kombinované, nemá jadro zmysel plytvať pamäťou na dve kópie údajov pri zápise do súboru, ktorý je už namapovaný v pamäti. Preto sa zapisované údaje stanú viditeľnými prostredníctvom mapovania pamäte pred dokončením systémového volania write(), aj keď údaje ešte neboli zapísané na disk.

    Vo všeobecnosti iné správanie nie je racionálne, pretože pri odloženom zlúčení budete musieť stále získavať zámky pre zoznamy stránok, kopírovať údaje alebo upravovať PTE. Preto pravidlo nevyslovenej koherencie platí od roku 1989, keď sa v SRV4 objavila jednotná vyrovnávacia pamäť. Zisťovanie podivných zlyhaní v načítaných scenároch využívania libmdbx si preto vyžadovalo veľa práce. Najprv na reprodukovanie problému, potom na overenie hypotéz a testovanie zlepšení.

    Teraz môžeme s istotou povedať, že problém bol spoľahlivo identifikovaný, lokalizovaný a spoľahlivo odstránený, a to aj napriek zložitosti a špecifickosti scenára reprodukcie. Fungovanie obtokového mechanizmu navyše potvrdil jeden z vývojárov Erigonu (Ethereum); v jeho prípade pri zostavovaní ladenia bola ochrana spustená ako regresia kvôli zbytočnej kontrole tvrdenia.

    Treba poznamenať, že v kontexte rozšíreného používania libmdbx v produkčných projektoch je zabezpečenie spoľahlivej prevádzky zásadne dôležitejšie ako zisťovanie, či ide o chybu alebo funkciu a či sa na takúto koherenciu možno spoľahnúť, a ešte menej hľadať príčin nesúdržnosti v jadre Linuxu. Preto tu hovoríme o odstránení problému, ktorý mohol ovplyvniť používateľov.

  • Odstránila sa regresia chyby EXDEV (Cross-device link) pri horúcom kopírovaní databázy bez zhutnenia do iného súborového systému, a to ako cez API, tak aj s utilitou mdbx_copy.
  • Kris Zyp implementoval podporu libmdbx v Deno. Kai Wetlesen navrhol RPM balenie pre Fedoru. David Bouyssié implementoval väzby pre Scala.
  • Opravené spracovanie hodnoty špecifikovanej voľbou MDBX_opt_rp_augment_limit pri spracovaní veľkých transakcií vo veľkých databázach. Predtým sa kvôli chybe mohli vykonávať zbytočné akcie, ktoré niekedy ovplyvnili výkon v implementáciách Ethereum (Erigon/Akula/Silkworm) a projektoch Binance Chain.
  • Bolo opravených veľa chýb, vrátane C++ API. Opravených veľa problémov so zostavou v zriedkavých a exotických konfiguráciách. Kompletný zoznam všetkých významných vylepšení je dostupný v ChangeLog.
  • Celkovo bolo vykonaných 185 zmien v 89 súboroch, ≈3300 riadkov bolo pridaných, ≈4100 bolo odstránených. Ďalšie boli odstránené najmä kvôli vyčisteniu už nepotrebných technologických súborov spojených s GitHubom a závislými službami.

Historicky je libmdbx hlbokým prepracovaním LMDB DBMS a je lepší ako jeho predchodca v spoľahlivosti, sade funkcií a výkonu. V porovnaní s LMDB kladie libmdbx veľký dôraz na kvalitu kódu, stabilitu API, testovanie a automatické kontroly. Dodáva sa pomocný program na kontrolu integrity databázovej štruktúry s niektorými schopnosťami obnovy.

Z technologického hľadiska ponúka libmdbx ACID, silnú serializáciu zmien a neblokujúce čítanie s lineárnym škálovaním medzi jadrami CPU. Podporovaná je automatická kompaktifikácia, automatická správa veľkosti databázy a odhad dotazu na rozsah. Od roku 2016 je projekt financovaný spoločnosťou Positive Technologies a vo svojich produktoch sa používa od roku 2017.

libmdbx ponúka vyvinuté C++ API, ako aj väzby podporované nadšencami na jazyky Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Zdroj: opennet.ru

Pridať komentár