Izdanje ugrađenog DBMS-a visokih performansi libmdbx 0.10

Nakon tri mjeseca razvoja, izdat je libmdbx 0.10.0 (MDBX), koji implementira kompaktnu ugrađenu bazu podataka ključ-vrijednost visokih performansi. Libmdbx kod je licenciran pod OpenLDAP javnom licencom. libmdbx je duboka prerada LMDB DBMS-a i, prema riječima programera, superiorna je u odnosu na svog pretka u pouzdanosti, rasponu mogućnosti i performansi. 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 nivoa koji je uporediv sa LMDB-om.

Libmdbx nudi ACID, snažnu serijalizaciju promjena i neblokirajuće čitanje koje se linearno mjeri kroz CPU jezgre. U libmdbx-u se velika pažnja posvećuje kvalitetu koda, stabilnom API radu, testiranju i automatskim provjerama. Podržava automatsku kompaktifikaciju, automatsko upravljanje veličinom baze podataka, jedan 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 projekat je finansiran od strane Positive Technologies i koristi se u svojim proizvodima od 2017. godine, a sankcije koje je američka vlada uvela protiv Positive Technologies nemaju nikakav primetan uticaj.

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

  • Ruby povez Mahlona E. Smitha i probna verzija Python poveza Noela Kuntzea su dostupni, a GoLang povezi Alekseja Šarova su ažurirani.
  • Za “MDBX_WRITEMAP” način rada, kada se podaci baze podataka mijenjaju direktno u RAM-u, implementirano je “transparentno prelivanje” 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 isprazniti promijenjene stranice na disk, a izvršavanje transakcije neće zahtijevati njihovu modifikaciju. Kao rezultat toga, u zauzetim scenarijima s nedostatkom RAM-a, volumen diskovnih operacija može se smanjiti do 2 puta.
  • Implementirano izbacivanje dugo neiskorištenih sjenčanih kopija modificiranih stranica, s preferencijom za izbacivanje stranica sa velikim/dugim vrijednostima, koje se u velikoj većini scenarija mijenjaju samo jednom po transakciji. Rezultat je smanjen promet diska i poboljšane performanse u scenarijima s vrlo velikim transakcijama.
  • Implementiran "pametni" način za podjelu stranica prilikom umetanja ključeva. Sada, prilikom umetanja uređenih sekvenci, stranice se automatski potpuno popunjavaju, au drugim slučajevima stablo je optimalnije izbalansirano. Kao rezultat toga, u prosjeku se stranice baze podataka popunjavaju optimalnije i B-stablo je uravnoteženije, što ima pozitivan učinak na performanse.
  • Dodata je statistika operacija sa stranicama, što vam omogućava da precizno procenite troškove modifikacije operacija sa bazom podataka.
  • Ispravljeno je više od desetak grešaka i grešaka, uključujući: probleme sa izgradnjom pomoću MinGW-a, korištenjem `std::filesystem::path` u iOS-u <= 13.0, ciljanjem izgradnje na starije verzije Windows-a, itd.
  • Ukupno je napravljeno više od 200 izmjena u 66 datoteka, ~6500 linija je dodano, ~4500 je obrisano.

Odvojeno, želeo bih da napomenem izbor Turbo-Geth projekta (turbo fork Go-Ethereuma) libmdbx kao novog pozadina za skladištenje, i takođe da se zahvalim timu projekta (posebno Alekseju Šarovu, Artjomu Vorotnikovu i Alekseju Akhunovu) na njihovom velika pomoć u testiranju u ekstremnim scenarijima upotrebe. Konkretno, otkriven je i eliminisan defekt u kontroli čitanja unapred/keširanja, što je dovelo do degradacije performansi u teško reproduciranim scenarijima sa velikim bazama podataka.

izvor: opennet.ru

Dodajte komentar