Izdanje ugrađenog DBMS-a visokih performansi libmdbx 0.10

Nakon tri mjeseca razvoja, libmdbx 0.10.0 (MDBX) je objavljen, implementirajući visokoučinkovitu, kompaktnu ugrađenu bazu podataka ključ-vrijednost. Kod libmdbx licenciran je pod javnom licencom OpenLDAP. libmdbx je duboka prerada LMDB DBMS-a i, prema programerima, superiorniji je od svog pretka u pouzdanosti, rasponu mogućnosti i performansama. Navedeno je da je libmdbx do 20% brži od LMDB-a u CRUD scenarijima i do 30% brži ako su interne kontrole onemogućene prilikom izgradnje libmdbx-a do razine usporedive s LMDB-om.

Libmdbx nudi ACID, snažnu serijalizaciju promjena i čitanja bez blokiranja koja se skaliraju linearno po CPU jezgrama. U libmdbxu se velika pažnja posvećuje kvaliteti koda, stabilnom radu API-ja, testiranju i automatskim provjerama. Podržava automatsko sažimanje, automatsko upravljanje veličinom baze podataka, jedinstveni format baze podataka za 32-bitne i 64-bitne sklopove i procjenu upita raspona. Isporučuje se uslužni program za provjeru integriteta strukture baze podataka s nekim mogućnostima oporavka. Od 2016. godine projekt financira Positive Technologies i koristi se u svojim proizvodima od 2017. godine, a sankcije koje je američka vlada uvela protiv Positive Technologiesa nemaju zamjetan učinak.

Glavne inovacije, poboljšanja i popravci dodani od posljednjeg izdanja:

  • Ruby uvezivanje Mahlona E. Smitha i probna verzija Python uvezivanja Noela Kuntzea su dostupni, a ažurirana su GoLang uvezivanja Alexeya Sharova.
  • Za način rada “MDBX_WRIITEMAP”, kada se podaci baze podataka mijenjaju izravno u RAM-u, implementira se “transparentno izlijevanje” promijenjenih stranica baze podataka na disk. Sada, nakon završetka svake operacije, takve stranice su odmah potpuno spremne za pisanje na disk i OS kernel može samostalno isprati promijenjene stranice na disk, a commit transakcije neće zahtijevati njihovu modifikaciju. Kao rezultat toga, u prometnim scenarijima s nedovoljno RAM-a, volumen diskovnih operacija može se smanjiti do 2 puta.
  • Implementirano izbacivanje dugo nekorištenih kopija u sjeni modificiranih stranica, s davanjem prednosti izbacivanju stranica s velikim/dugim vrijednostima, koje se u velikoj većini scenarija mijenjaju samo jednom po transakciji. Rezultat je smanjen promet na disku i poboljšana izvedba u scenarijima s vrlo velikim transakcijama.
  • Implementiran je “pametni” način rada za odvajanje stranica prilikom umetanja ključeva. Sada se pri umetanju poredanih nizova stranice automatski u potpunosti popunjavaju, au ostalim slučajevima stablo je optimalnije uravnoteženo. Kao rezultat toga, u prosjeku su stranice baze podataka popunjene optimalnije, a B-stablo je uravnoteženije, što ima pozitivan učinak na performanse.
  • Dodana je statistika operacija sa stranicama, što vam omogućuje točnu procjenu troškova modificiranja operacija s bazom podataka.
  • Ispravljeno je više od desetak grešaka i grešaka, uključujući: probleme s izgradnjom pomoću MinGW-a, korištenjem `std::filesystem::path` u iOS-u <= 13.0, izgradnjom koja cilja na starije verzije Windowsa itd.
  • Ukupno je napravljeno više od 200 izmjena u 66 datoteka, dodano je ~6500 redaka, ~4500 je izbrisano.

Zasebno bih želio napomenuti odabir projekta Turbo-Geth (turbo fork Go-Ethereuma) libmdbx kao nove pozadine za pohranu, a također bih zahvalio projektnom timu (osobito Alexey Sharov, Artyom Vorotnikov i Alexey Akhunov) na njihovom velika pomoć u testiranju u ekstremnim scenarijima upotrebe. Konkretno, otkrivena je i otklonjena greška u kontroli čitanja unaprijed/predmemoriranja, što je dovelo do degradacije performansi u scenarijima s velikim bazama podataka koje je teško reproducirati.

Izvor: opennet.ru

Dodajte komentar