Izdaja DBMS libmdbx 0.11.7. Premaknite razvoj na GitFlic po zaklepanju na GitHub

Knjižnica libmdbx 0.11.7 (MDBX) je bila izdana z implementacijo visoko zmogljive kompaktne vdelane baze podatkov ključ-vrednost. Koda libmdbx se distribuira pod javno licenco OpenLDAP. Podprti so vsi trenutni operacijski sistemi in arhitekture ter ruski Elbrus 2000.

Izdaja je pomembna zaradi selitve projekta na storitev GitFlic, potem ko je uprava GitHub odstranila libmdbx skupaj z množico drugih projektov 15. aprila 2022 brez kakršnega koli opozorila ali pojasnila, hkrati pa je blokirala dostop številnim razvijalcem, povezanim s padlimi podjetji pod sankcijami ZDA. Z vidika uporabnika so se vse strani, repozitorij in forki projekta nenadoma spremenili v stran »404«, brez možnosti kakršne koli komunikacije in ugotavljanja vzrokov.

Na žalost so se izgubile skoraj vse številke, v katerih je bilo veliko vprašanj s podrobnimi odgovori, pa tudi veliko razprav. Izguba teh informacij je edina objektivna škoda, ki jo je uprava GitHub uspela povzročiti projektu. Delne kopije razprav so na voljo v arhivu archive.org.

Izguba vgrajenih CI skript in infrastrukture (na voljo brezplačno za odprtokodne projekte) nas je prisilila v revizijo, poenotenje in odpravo majhnega tehničnega dolga. Zdaj je bil CI obnovljen v skoraj enakem obsegu, z izjemo gradenj in testnih zagonov za vse različice BSD in Solaris. Zanimivo je, da po dejanjih GitHub ni bilo prejetih nobenih pojasnil ali obvestil, razen opomnika o potrebi po plačilu in poskusov odpisa denarja.

Od zadnje novice o izdaji libmdbx v0.11.3 je poleg obnovitve po dejanjih GitHub vredno omeniti naslednje izboljšave in popravke:

  • Dodana rešitev za zaznan učinek/napako neskladnosti v kombiniranem predpomnilniku strani in medpomnilnika v jedru Linuxa. V sistemih, kjer so predpomnilniki strani in medpomnilniki resnično poenoteni, nima smisla, da jedro zapravlja pomnilnik za dve kopiji podatkov, ko piše v datoteko, ki je že preslikana v pomnilnik. Zato postanejo podatki, ki se zapisujejo, vidni prek preslikave pomnilnika, preden se sistemski klic write() zaključi, tudi če podatki še niso bili zapisani na disk.

    V celoti drugo vedenje ni racionalno, ker morate z zakasnjenim združevanjem še vedno zakleniti sezname strani, kopirati podatke ali prilagoditi PTE. Zato je neizrečeno pravilo skladnosti v veljavi od leta 1989, ko se je v SRV4 pojavil enotni predpomnilnik. Zato je iskanje nenavadnih napak v zasedenih proizvodnih scenarijih libmdbx zahtevalo veliko dela. Najprej z reprodukcijo problema, nato s preverjanjem hipotez in preverjanjem izboljšav.

    Sedaj lahko z gotovostjo trdimo, da je bila težava kljub kompleksnosti in specifičnosti scenarija predvajanja zanesljivo identificirana, lokalizirana in zanesljivo odpravljena. Poleg tega je delo obvodnega mehanizma potrdil eden od razvijalcev Erigona (Ethereum), v njegovem primeru se je pri gradnji za odpravljanje napak zaščita sprožila kot regresija zaradi dodatnega preverjanja trditve.

    Opozoriti je treba, da je v kontekstu široke uporabe libmdbx v delujočih projektih bistveno bolj pomembno zagotoviti zanesljivo delovanje in ne ugotavljati, "ali je to napaka ali funkcija" in ali se je mogoče zanesti na takšno skladnost , še posebej ne iskanje vzrokov za neskladnost znotraj jedra Linuxa. Zato tukaj govorimo o odpravi težave, ki bi lahko vplivala na uporabnike.

  • Odpravljena je regresija napake EXDEV (povezava med napravami) pri vročem kopiranju baze podatkov brez zgoščevanja v drug datotečni sistem, tako prek API-ja kot z uporabo pripomočka mdbx_copy.
  • Kris Zyp je implementiral podporo za libmdbx v Deno. Kai Wetlesen je zapakiral RPM-je za Fedoro. David Bouyssié je implementiral vezave za Scalo.
  • Popravljeno ravnanje z vrednostjo, ki jo nastavi možnost MDBX_opt_rp_augment_limit pri obdelavi ogromnih transakcij v velikih bazah podatkov. Prej so se zaradi napake lahko izvajala nepotrebna dejanja, kar je včasih vplivalo na zmogljivost v implementacijah Ethereum (Erigon/Akula/Silkworm) in projektih Binance Chain.
  • Veliko napak je bilo odpravljenih, vključno s tistimi v C++ API. Odpravljene so številne težave pri gradnji v redkih in eksotičnih konfiguracijah. Celoten seznam vseh pomembnih izboljšav je na voljo v ChangeLog-u.
  • V 185 datotekah je bilo narejenih skupno 89 sprememb, dodanih je bilo ≈3300 vrstic, izbrisanih ≈4100. Več odstranjenih predvsem zaradi izbrisa že neuporabnih tehničnih datotek, povezanih z GitHub in odvisnimi storitvami.

Zgodovinsko gledano je libmdbx globoka prenova LMDB DBMS in presega svojega prednika v smislu zanesljivosti, nabora funkcij in zmogljivosti. V primerjavi z LMDB daje libmdbx velik poudarek kakovosti kode, stabilnosti API-ja, testiranju in samodejnim preverjanjem. Pripomoček za preverjanje celovitosti strukture baze podatkov je opremljen z nekaterimi možnostmi obnovitve.

Tehnološko libmdbx ponuja ACID, strogo serializacijo sprememb in branje brez blokiranja z linearnim skaliranjem po jedrih CPE. Podprto je samodejno zgoščevanje, samodejno upravljanje velikosti baze podatkov in ocena poizvedbe obsega. Od leta 2016 projekt financira Positive Technologies in ga od leta 2017 uporablja v svojih izdelkih.

libmdbx ponuja razvit C++ API, kot tudi za navdušence podprte vezave na Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Vir: opennet.ru

Dodaj komentar