Izdanje DBMS libmdbx 0.11.7. Premjestite razvoj na GitFlic nakon zaključavanja GitHuba

Biblioteka libmdbx 0.11.7 (MDBX) izdana je s implementacijom kompaktne ugrađene baze podataka ključ-vrijednost visokih performansi. Libmdbx kod se distribuira pod javnom licencom OpenLDAP. Podržani su svi aktualni operativni sustavi i arhitekture, kao i ruski Elbrus 2000.

Izdanje je značajno po migraciji projekta na uslugu GitFlic nakon što je administracija GitHuba uklonila libmdbx zajedno s nizom drugih projekata 15. travnja 2022. bez ikakvog upozorenja ili objašnjenja, dok je istovremeno blokirao pristup mnogim programerima povezanim s tvrtkama koje su pale pod američkim sankcijama. Sa stajališta korisnika, sve stranice, repozitorij i forkovi projekta odjednom su se pretvorili u stranicu "404", bez mogućnosti bilo kakve komunikacije i utvrđivanja razloga.

Nažalost, izgubljeni su gotovo svi brojevi u kojima je bilo mnogo pitanja s detaljnim odgovorima, ali i puno rasprava. Gubitak ovih informacija jedina je objektivna šteta koju je administracija GitHuba uspjela nanijeti projektu. Djelomične kopije rasprava ostaju dostupne u arhivi archive.org.

Gubitak ugrađenih CI skripti i infrastrukture (besplatno dostupne za OpenSource projekte) natjerao nas je na reviziju, unificiranje i eliminaciju malog tehničkog duga. Sada je CI vraćen u gotovo istoj mjeri, s iznimkom nadogradnji i testiranja za sve BSD i Solaris varijante. Značajno je da nakon GitHubovih akcija nisu primljena nikakva pojašnjenja ili obavijesti, osim podsjetnika o potrebi plaćanja i pokušaja otpisa novca.

Od zadnjih vijesti o izdanju libmdbx v0.11.3, osim oporavka od GitHub radnji, vrijedna je pažnje sljedeća poboljšanja i popravke:

  • Dodano zaobilazno rješenje za otkriveni učinak/defekt nekoherentnosti u kombiniranoj predmemorije stranice i međuspremnika u jezgri Linuxa. Na sustavima gdje su predmemorije stranice i međuspremnika doista unificirane, nema smisla da kernel troši memoriju na dvije kopije podataka kada piše u datoteku koja je već mapirana u memoriji. Stoga podaci koji se zapisuju postaju vidljivi putem mapiranja memorije prije nego što sistemski poziv write() završi, čak i ako podaci još nisu zapisani na disk.

    Sve u svemu, drugo ponašanje nije racionalno, jer s odgođenim spajanjem još uvijek morate uhvatiti brave za popise stranica, kopirati podatke ili prilagoditi PTE. Stoga je neizgovoreno pravilo koherencije na snazi ​​od 1989., kada se u SRV4 pojavio objedinjeni međuspremnik. Stoga je pronalaženje čudnih kvarova u zauzetim libmdbx proizvodnim scenarijima zahtijevalo puno posla. Prvo, reprodukcijom problema, zatim provjerom hipoteza i provjerom poboljšanja.

    Sada s pouzdanjem možemo reći da je problem pouzdano identificiran, lokaliziran i pouzdano otklonjen, unatoč složenosti i specifičnosti scenarija reprodukcije. Dodatno, rad zaobilaznog mehanizma potvrdio je jedan od programera Erigona (Ethereum), u njegovom slučaju, na debug buildu, zaštita se aktivirala kao regresija zbog dodatne provjere tvrdnje.

    Treba napomenuti da je u kontekstu raširene upotrebe libmdbx-a u radnim projektima fundamentalno važnije osigurati pouzdan rad, a ne otkrivati ​​"je li ovo greška ili značajka" i može li se pouzdati u takvu koherentnost , pogotovo ne tražeći uzroke nekoherentnosti unutar Linux kernela. Stoga, ovdje govorimo o rješavanju problema koji bi mogao utjecati na korisnike.

  • Ispravljena je regresija pogreške EXDEV (Cross-device link) prilikom kopiranja baze podataka bez sažimanja u drugi datotečni sustav, i putem API-ja i korištenjem uslužnog programa mdbx_copy.
  • Kris Zyp implementirao je podršku za libmdbx u Denu. Kai Wetlesen je pakirao RPM-ove za Fedoru. David Bouyssié implementirao je povezivanja za Scalu.
  • Popravljeno rukovanje vrijednošću postavljenom opcijom MDBX_opt_rp_augment_limit prilikom obrade velikih transakcija u velikim bazama podataka. Prethodno su se zbog pogreške mogle izvesti nepotrebne radnje, što je ponekad utjecalo na performanse u implementacijama Ethereuma (Erigon/Akula/Silkworm) i projektima Binance Chain.
  • Mnogo je grešaka ispravljeno, uključujući one u C++ API-ju. Popravljeni su mnogi problemi s gradnjom u rijetkim i egzotičnim konfiguracijama. Potpuni popis svih značajnih poboljšanja dostupan je u ChangeLog-u.
  • Ukupno je napravljeno 185 promjena u 89 datoteka, dodano je ≈3300 redaka, ≈4100 je izbrisano. Više uklonjeno uglavnom zbog čišćenja već beskorisnih tehničkih datoteka povezanih s GitHubom i ovisnim uslugama.

Povijesno gledano, libmdbx je dubok redizajn LMDB DBMS-a i nadmašuje svog prethodnika u smislu pouzdanosti, skupa značajki i performansi. U usporedbi s LMDB-om, libmdbx stavlja veliki naglasak na kvalitetu koda, stabilnost API-ja, testiranje i automatizirane provjere. Pomoćni program za provjeru integriteta strukture baze podataka isporučuje se s nekim opcijama oporavka.

Tehnološki, libmdbx nudi ACID, striktnu serijalizaciju promjena i čitanja bez blokiranja s linearnim skaliranjem preko CPU jezgri. Podržani su autokompaktifikacija, automatsko upravljanje veličinom baze podataka i procjena upita raspona. Od 2016. godine projekt financira Positive Technologies i koristi se u svojim proizvodima od 2017. godine.

libmdbx nudi razvijen C++ API, kao i vezanja podržana od strane entuzijasta na Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Izvor: opennet.ru

Dodajte komentar