Suorituskykyisen sulautetun DBMS:n libmdbx 0.10 julkaisu

Kolmen kuukauden kehitystyön jälkeen julkaistiin libmdbx 0.10.0 (MDBX), joka toteutti tehokkaan, kompaktin sulautetun avainarvotietokannan. Libmdbx-koodi on lisensoitu OpenLDAP Public License -lisenssillä. libmdbx on syvällinen uudistus LMDB DBMS:stä, ja kehittäjien mukaan se ylittää esi-isänsä luotettavuudeltaan, ominaisuuksiltaan ja suorituskyvyltään. On todettu, että libmdbx on jopa 20 % nopeampi kuin LMDB CRUD-skenaarioissa ja jopa 30 % nopeampi, jos sisäiset ohjaimet poistetaan käytöstä, kun libmdbx rakennetaan LMDB:tä vastaavalle tasolle.

Libmdbx tarjoaa ACID:n, voimakkaan muutosserialisoinnin ja estottoman lukemisen, jotka skaalautuvat lineaarisesti prosessoriytimien välillä. Libmdbx:ssä kiinnitetään paljon huomiota koodin laatuun, vakaaseen API-toimintaan, testaukseen ja automaattisiin tarkistuksiin. Tukee automaattista tiivistämistä, automaattista tietokannan koon hallintaa, yhtä tietokantamuotoa 32- ja 64-bittisille kokoonpanoille ja alueen kyselyn arviointia. Mukana toimitetaan apuohjelma tietokantarakenteen eheyden tarkistamiseksi, jossa on joitakin palautusominaisuuksia. Projektia on vuodesta 2016 lähtien rahoittanut Positive Technologies, ja sitä on käytetty sen tuotteissa vuodesta 2017, eikä Yhdysvaltain hallituksen Positive Technologiesia vastaan ​​asettamilla sanktioilla ole havaittavissa olevaa vaikutusta.

Viimeisimmän julkaisun jälkeen lisätyt suuret innovaatiot, parannukset ja korjaukset:

  • Mahlon E. Smithin Ruby-sidos ja Noel Kuntzen Python-sidosten kokeiluversio ovat saatavilla, ja Alexey Sharovin GoLang-sidokset on päivitetty.
  • ”MDBX_WRITEMAP”-tilassa, kun tietokantatietoja muutetaan suoraan RAM-muistissa, muuttuneet tietokantasivut levitetään läpinäkyvästi levylle. Nyt kunkin toiminnon jälkeen tällaiset sivut ovat heti täysin valmiita levylle kirjoitettaviksi ja käyttöjärjestelmän ydin voi itsenäisesti huuhdella muutetut sivut levylle, eikä tapahtuman tekeminen vaadi niiden muokkaamista. Tämän seurauksena kiireisissä skenaarioissa, joissa RAM-muistia ei ole riittävästi, levytoimintojen määrää voidaan vähentää jopa 2 kertaa.
  • Toteutettu muokattujen sivujen pitkään käyttämättömien varjokopioiden häätö, etusijalla suuren/pitkän arvon omaavien sivujen poistaminen, joita useimmissa skenaarioissa muutetaan vain kerran tapahtumaa kohden. Tuloksena on vähentynyt levyliikenne ja parantunut suorituskyky skenaarioissa, joissa on erittäin suuria tapahtumia.
  • Otettiin käyttöön "älykäs" tila sivujen jakamiseen avaimia lisättäessä. Nyt kun lisätään järjestettyjä sarjoja, sivut täyttyvät automaattisesti kokonaan, ja muissa tapauksissa puu on optimaalisesti tasapainotettu. Tämän seurauksena tietokannan sivut täyttyvät keskimäärin optimaalisesti ja B-puu on tasapainoisempi, millä on positiivinen vaikutus suorituskykyyn.
  • Sivujen toimintojen tilastot on lisätty, jonka avulla voit arvioida tarkasti tietokannan muokkauskustannukset.
  • Yli tusina virhettä on korjattu, mukaan lukien: ongelmat rakentamisessa MinGW:llä, `std::filesystem::path`:n käyttämisessä iOS <= 13.0:ssa, rakentaminen, joka kohdistuu Windowsin vanhempiin versioihin jne.
  • Yhteensä yli 200 muutosta tehtiin 66 tiedostoon, ~6500 riviä lisättiin, ~4500 poistettiin.

Haluaisin erikseen mainita Turbo-Geth-projektin (Go-Ethereumin turbohaarukka) libmdbx valinnan uudeksi tallennustaustaksi ja kiittää myös projektitiimiä (erityisesti Aleksei Sharovia, Artyom Vorotnikovia ja Aleksei Akhunovia) heidän työstään. suuri apu testaamiseen äärimmäisissä käyttötapauksissa. Etenkin eteenpäin-/välimuistin ohjauksessa havaittiin ja poistettiin vika, mikä johti suorituskyvyn heikkenemiseen vaikeasti toistettavissa skenaarioissa suurilla tietokannoilla.

Lähde: opennet.ru

Lisää kommentti