Izdanje DBMS libmdbx 0.11.7. Premještanje razvoja na GitFlic nakon blokiranja na GitHubu

Biblioteka libmdbx 0.11.7 (MDBX) objavljena je sa implementacijom kompaktne ugrađene baze podataka ključ/vrijednost visokih performansi. Libmdbx kod je licenciran pod OpenLDAP javnom licencom. Podržani su svi aktuelni operativni sistemi i arhitekture, kao i ruski Elbrus 2000.

Izdanje je značajno po migraciji projekta na uslugu GitFlic nakon što je 15. aprila 2022. GitHub administracija, bez ikakvog upozorenja ili objašnjenja, izbrisala libmdbx zajedno sa nizom drugih projekata, dok je istovremeno blokirala pristup mnogim programerima povezanim sa kompanije koje su pod američkim sankcijama. Sa stanovišta korisnika, sve stranice, repozitorij i forkovi projekta odjednom su se pretvorili u stranicu 404, bez mogućnosti bilo kakve komunikacije i saznanja razloga.

Nažalost, izgubljena su gotovo sva izdanja, u kojima je bilo mnogo pitanja sa detaljnim odgovorima, kao i mnoge rasprave. Gubitak ovih informacija jedina je objektivna šteta koju je GitHub administracija uspjela nanijeti projektu. Djelomične kopije diskusija ostaju dostupne na archive.org.

Gubitak izgrađenih CI scenarija i infrastrukture (dostupne za OpenSource projekte besplatno) primorao nas je da preduzmemo reviziju, objedinjavanje i eliminaciju malog tehničkog duga. Sada je CI vraćen u gotovo istoj mjeri, s izuzetkom testova izgradnje i pokretanja za sve BSD i Solaris varijante. Obično nakon akcija GitHub nije dobio nikakva pojašnjenja ili obavještenja, osim podsjetnika o potrebi plaćanja i pokušaja otpisa novca.

Od posljednje vijesti o izdavanju libmdbx v0.11.3, osim oporavka od GitHub akcija, vrijedi napomenuti i sljedeća poboljšanja i popravke:

  • Dodato zaobilazno rešenje za otkriveni efekat/defekt nekoherentnosti u kombinovanoj keš memoriji stranice i bafera u Linux kernelu. U sistemima u kojima su kešovi stranica i bafera zaista kombinovani, nema smisla da kernel troši memoriju za dvije kopije podataka prilikom pisanja u datoteku koja je već mapirana u memoriju. Stoga podaci koji se upisuju postaju vidljivi kroz memorijsko mapiranje prije nego što se sistemski poziv write() završi, čak i ako podaci još nisu upisani na disk.

    Općenito, drugo ponašanje nije racionalno, jer s odgođenim spajanjem i dalje ćete morati pribaviti zaključavanje za liste stranica, kopirati podatke ili prilagoditi PTE. Stoga je neizgovoreno pravilo koherentnosti na snazi ​​od 1989. godine, kada se u SRV4 pojavio objedinjeni bafer keš. Stoga je otkrivanje čudnih padova u učitanim scenarijima eksploatacije libmdbx-a zahtijevalo puno posla. Prvo da se reproducira problem, a zatim da se verificiraju hipoteze i testiraju poboljšanja.

    Sada možemo sa sigurnošću reći da je problem pouzdano identificiran, lokaliziran i pouzdano eliminiran, unatoč složenosti i specifičnosti scenarija reprodukcije. Dodatno, rad mehanizma zaobilaženja potvrdio je jedan od programera Erigona (Ethereum); u njegovom slučaju, na debug build-u, zaštita je pokrenuta kao regresija zbog nepotrebne provjere assert-a.

    Treba napomenuti da je u kontekstu raširene upotrebe libmdbx-a u produkcijskim projektima, osiguravanje pouzdanog rada fundamentalno važnije od otkrivanja da li je riječ o grešci ili osobini i da li se na takvu koherentnost može osloniti, a još manje tražiti uzroci nekoherentnosti unutar Linux kernela. Stoga, ovdje govorimo o rješavanju problema koji je mogao utjecati na korisnike.

  • Regresija greške EXDEV (Cross-device link) prilikom vrućeg kopiranja baze podataka bez kompaktifikacije na drugi sistem datoteka, kako putem API-ja tako i pomoću uslužnog programa mdbx_copy, je eliminisana.
  • Kris Zyp je implementirao podršku za libmdbx u Deno. Kai Wetlesen je dizajnirao RPM pakovanje za Fedoru. David Bouyssié je implementirao veze za Scalu.
  • Fiksna obrada vrijednosti specificirane opcijom MDBX_opt_rp_augment_limit prilikom obrade velikih transakcija u velikim bazama podataka. Ranije su se zbog greške mogle izvršiti nepotrebne radnje, koje su ponekad uticale na performanse u Ethereum implementacijama (Erigon/Akula/Silkworm) i projektima Binance Chain.
  • Mnoge greške su ispravljene, uključujući i C++ API. Popravljeni su mnogi problemi sa gradnjom u rijetkim i egzotičnim konfiguracijama. Kompletna lista svih značajnih poboljšanja dostupna je u ChangeLog-u.
  • Urađeno je ukupno 185 izmjena na 89 datoteka, dodano je ≈3300 linija, ≈4100 je obrisano. Više je uklonjeno uglavnom zbog čišćenja već beskorisnih tehnoloških datoteka povezanih s GitHub-om i zavisnim servisima.

Istorijski gledano, libmdbx je duboki redizajn LMDB DBMS-a i nadmašuje svog prethodnika u smislu pouzdanosti, skupa karakteristika i performansi. U poređenju sa LMDB, libmdbx stavlja veliki naglasak na kvalitet koda, stabilnost API-ja, testiranje i automatizovane provere. Pomoćni program za provjeru integriteta strukture baze podataka se isporučuje s nekim opcijama oporavka.

Tehnološki gledano, libmdbx nudi ACID, snažnu serijalizaciju promjena i neblokirajuće čitanje s linearnim skaliranjem kroz CPU jezgre. Podržana je automatska kompaktifikacija, automatsko upravljanje veličinom baze podataka i procjena opsega upita. Od 2016. godine projekat je finansiran od strane Positive Technologies i koristi se u svojim proizvodima od 2017. godine.

libmdbx nudi razvijen C++ API, kao i entuzijasti podržana povezivanja za jezike Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

izvor: opennet.ru

Dodajte komentar