Pas tri muajsh zhvillimi, u lëshua biblioteka libmdbx 0.10.0 (MDBX) me implementimin e një baze të dhënash të integruar e të kompaktes, klasë çelës-vlerë me performancë të lartë. Kodi libmdbx shpërndahet nën licencën OpenLDAP Public License. libmdbx është një ripunim i thellë i DBMS LMDB dhe sipas zhvilluesve e kalon paraardhësin e tij në besueshmëri, setin e mundësive 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 kontrolli i brendshëm është i çaktivizuar në një nivel të krahasueshëm me atë të LMDB.
Libmdbx ofron ACID, serializim të rreptë të ndryshimeve dhe lexime jo-bllokuese me shkallëzim linear sipas bërthamave CPU. Në libmdbx, punohet shumë mbi cilësinë e kodit, stabilitetin e API, testimin dhe kontrollet automatike. Mbështetet kompaktifikimi automatik, menaxhimi automatik i madhësisë së DB, një format i vetëm DB për ndërtimet 32-bith dhe 64-bith, vlerësimi i volumit të mostrave sipas intervaleve (range query estimation). Ofrohet një utilitar për kontrollin e integritetit të strukturës së DB 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, dhe sanksionet e vendosura nga qeveria e SHBA-së ndaj Positive Technologies nuk kanë ndonjë ndikim të dukshëm.
Pikat kryesore të reja, përmirësimeve dhe korrigjimeve të shtuar pas lëshimit të fundit:
- JanĂ« nĂ« dispozicion lidhje pĂ«r Ruby nga Mahlon E. Smith dhe njĂ« version provues lidhjesh pĂ«r Python nga Noel Kuntze, janĂ« azhurnuar lidhjet pĂ«r GoLang nga Alexey ShаŃĐŸĐČ.
- Për modin «MDBX_WRITEMAP», kur të dhënat e DB ndryshohen drejtpërdrejt në RAM, është realizuar një «shkarkim transparent» në disk për faqet e ndryshuara të DB. Tani, pas përfundimit të çdo operacioni, këto faqe janë menjëherë plotësisht të gatshme për t'u shkruar në disk dhe bërthama e OS-së mund të rishkaktojë vetë faqet e ndryshuara në disk, dhe fiksa e transaksionit nuk do të kërkojë modifikimin e tyre. Si rezultat, në skenarët e ngarkuar me mungesë RAM-i, volumi i operacioneve në disk mund të reduktohet deri në 2 herë.
- Eshte realizuar zëvendësimi i kopjeve të errëta të faqeve të ndryshuara që nuk janë përdorur prej kohësh, me preferencë për zëvendësimin e faqeve me vlera të mëdha/gjatësore, të cilat në shumicën e skenarëve modifikohen vetëm një herë për transaksion. Si rezultat, reduktohet sasia e shkëmbimit me diskun dhe rritet performanca në skenarët me transaksione shumë të mëdha.
- ĂshtĂ« realizuar njĂ« mod i «smart» pĂ«r ndarjen e faqeve gjatĂ« ekstraktimit tĂ« çelĂ«save. Tani, gjatĂ« ekstraktimit tĂ« sekuencave tĂ« renditura, sigurohet automatikisht mbushja e plotĂ« e faqeve, dhe nĂ« rastet e tjera njĂ« balancim mĂ« optimal tĂ« pemĂ«s. Si rezultat, nĂ« mesatare, pagesat e DB mbushen mĂ« optimalisht dhe B-pema Ă«shtĂ« mĂ« e balancuar, gjĂ« qĂ« ndikon pozitivisht nĂ« performancĂ«n.
- Statistikat e operacioneve me faqe janë shtuar, çka lejon vlerësimin e saktë të kostos së operacioneve modifikues me DB.
- Shtuar më shumë se njëzet gabime dhe të metë, përfshirë: zgjidhur problemet me ndërtimin përmes MinGW, përdorimin e `std::filesystem::path` në iOS <= 13.0, ndërtimi me targetim në versionet e vjetra të Windows etj.
- Në total janë bërë më shumë se 200 ndryshime në 66 skedarë, janë shtuar ~6500 rreshta, janë fshirë ~4500.
Veçanërisht, dëshiroj të theksoj zgjedhjen e projektit Turbo-Geth (turbo-fork i Go-Ethereum) libmdbx si backend të ri për ruajtje, si dhe të falënderoj ekipin e projektit (sidomos Alexei Sharov, Artem Vorotnikov dhe Alexei Akhunov) për ndihmën e madhe në testimin në skenarë ekstreme përdorimi. Në veçanti, kështu u zbulua dhe u eliminua një defekt në menaxhimin e leximit parashikues/cache-it, i cili çonte në degradim të performancës në skenarë të vështirë për t'u riprodhuar me bazat e të dhënave të mëdha.
Burimi: opennet.ru
