Pas tre muajsh zhvillimi, u lëshua biblioteca libmdbx 0.10.0 (MDBX) me implementimin e një baze të dhënash të integruar, të kompaktë, dhe me performancë të lartë, e klasës çelësi-vlerë. Kodi libmdbx shpërndahet nën licencën OpenLDAP Public License. Libmdbx është një ripunim i thellë i SGBD-së LMDB dhe sipas zhvilluesve, tejkalon parardhësin e saj në shkallëzueshmëri, funksionalitete dhe performancë. Raportohet se libmdbx është deri në 20% më i shpejtë se LMDB në skenarët CRUD dhe deri në 30% më i shpejtë, nëse gjatë ndërtimit të libmdbx është çaktivizuar kontrolli i brendshëm në një nivel të krahasueshëm me atë të LMDB.
Libmdbx ofron ACID, serializim të ngurtë të ndryshimeve dhe lexim jo-bllokues me shkallëzim linear për bërthamat e CPU. Në libmdbx, vëmendje e madhe i kushtohet cilësisë së kodit, stabilitetit të API-së, testimit dhe verifikimeve automatike. Përkrah automatikun e kompresionit, menaxhimin automatik të madhësisë së BAZE, një format të vetëm BAZE për ndërtimet 32-bit dhe 64-bit, vlerësimin e vëllimeve të mostrave sipas intervaleve (range query estimation). Ofron një mjet për kontrollin e integritetit të strukturës së BAZE me disa mundësi rikuperimi. Që nga viti 2016, projekti financohet nga kompania Positive Technologies dhe që nga viti 2017 përdoret në produktet e saj, ndërsa sanksionet e ndërmarra nga qeveria e Shteteve të Bashkuara ndaj Positive Technologies nuk kanë ndonjë ndikim të dukshëm.
Risi, përmirësime dhe korrigjime të rëndësishme, të shtuar pas lëshimit të kaluar:
- Disponohet lidhja për Ruby nga Mahlon E. Smith dhe një version provues i lidhjeve për Python nga Noel Kuntze, janë përditësuar lidhjet për GoLang nga Alexey Sharov.
- Për modalitetin «MDBX_WRITEMAP», kur të dhënat e BAZE janë modifikuar drejtpërdrejt në RAM, është implementuar një «derdhje transparente» në disk të faqeve të ndryshuara të BAZE. Tani, pas përfundimit të çdo operacioni, këto faqe janë menjëherë të gatshme për të shkruar në disk dhe bërthama e OS-së mund të nxjerrë vetë faqet e ndryshuara në disk, duke bërë që fiksa e transaksionit të mos kërkojë modifikimin e tyre. Si rezultat, në skenarët e ngarkuar me mungesë RAM, volumi i operacioneve në disk mund të reduktohet deri në 2 herë.
- ĂshtĂ« realizuar dĂ«bimi i kopjeve tĂ« errĂ«ta tĂ« faqeve tĂ« modifikuara qĂ« nuk janĂ« pĂ«rdorur prej kohĂ«sh, duke preferuar dĂ«bimin e faqeve me vlera tĂ« mĂ«dha/ tĂ« gjata, tĂ« cilat nĂ« shumicĂ«n e skenarĂ«ve modifikohen vetĂ«m njĂ« herĂ« pĂ«r transaksion. Si rezultat, zvogĂ«lohet volumi i shkĂ«mbimit me disqet dhe rritet performanca nĂ« skenarĂ«t me transaksione shumĂ« tĂ« mĂ«dha.
- ĂshtĂ« realizuar njĂ« mod i mençur pĂ«r ndarjen e faqeve gjatĂ« futjes sĂ« çelĂ«save. Tani, kur fusim sekuenca tĂ« renditura, sigurohet automatikisht plotĂ«simi i plotĂ« i faqeve, ndĂ«rsa nĂ« raste tĂ« tjera, njĂ« balancim mĂ« optimal i pemĂ«s. Si rezultat, nĂ« mesatarje, faqet e DB plotĂ«sohen mĂ« optimalisht dhe B-pema rezulton mĂ« e balancuar, çka ndikon pozitivisht nĂ« performancĂ«.
- Statistikat e operacioneve me faqe janë shtuar, duke mundësuar vlerësimin e saktë të kostos së operacioneve modifikuese me DB.
- ĂshtĂ« eliminuar mĂ« shumĂ« se njĂ«zet nĂ«ntĂ«sh pĂ«r tĂ« gjetur dhe pĂ«r tĂ« pĂ«rmirĂ«suar, duke pĂ«rfshirĂ«: janĂ« zgjidhur problemet me ndĂ«rtimin pĂ«rmes MinGW, pĂ«rdorimi i `std::filesystem::path` nĂ« iOS <= 13.0, ndĂ«rtimi me objektiv nĂ« versione mĂ« tĂ« vjetra tĂ« Windows, etj.
- Në përmbledhje, janë bërë më shumë se 200 ndryshime në 66 skedarë, janë shtuar rreth 6500 rreshta, janë fshirë rreth 4500.
Veçanërisht dua të theksoj zgjedhjen e projektit Turbo-Geth (turbo-fork i Go-Ethereum) libmdbx si backend të ri për ruajtjen, si dhe të falënderoj ekipin e projektit (veçanërisht Aleksej Sharov, Artem Vorotnikov dhe Aleksej Akhunov) për ndihmën e madhe në testimin në skenarë ekstreme të përdorimit. Në veçanti, në këtë mënyrë është zbuluar dhe eliminuar një defekt në menaxhimin e leximit të parashikueshëm/keshimit, i cili shkaktonte degradimin e performancës në skenarët e vështirë për t'u riprodhuar me DB të mëdha.
Burimi: opennet.ru
