Lëshimi i librarive libmdbx 0.10.4 (MDBX) me implementimin e një database të integruar me performancë të lartë dhe e tipit çelës-vlerë, dhe librarisë përkatëse libfpta 0.3.9 (FPTA), e cila ofron një pamje tabelore të të dhënave mbi MDBX me indekse të dyfishta dhe përbërëse. Të dy libraritë shpërndahen nën licencat e miratuara nga OSI. Mbështeten të gjitha sistemet operative dhe arkitekturat aktuale, si dhe Elbrusi rus 2000.
Historikisht, libmdbx është një ripërpunim i thellë i DBMS LMDB dhe e tejkalon paraardhësin e saj në besueshmëri, gamë funksionesh dhe performancë. Krahasuar me LMDB, libmdbx vihet në dukje për cilësinë e kodit, funksionimin e qëndrueshëm të API-së, testimin dhe verifikimet automatike. Ofron një utilitar për kontrollin e integritetit të strukturës së DB me disa mundësi rikuperimi.
Në aspektin teknologjik, libmdbx ofron ACID, serializim të rreptë të ndryshimeve dhe lexim pa bllokim me shkallëzim linear për bërthamët e CPU-së. Mbështetet automatikisht kompaktifikimi, menaxhimi automatik i madhësisë së DB, dhe vlerësimi i sasisë së mostrave sipas intervaleve (range query estimation). Që nga viti 2016, projektet mbështeten nga kompania Positive Technologies dhe nga viti 2017 përdoren në produktet e saj.
Për libmdbx ofrohet një API C++, si dhe lidhje të mbështetura nga entuziastët për gjuhët Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. Për libfpta, përshkrimi i API është në dispozicion publik vetëm si një skedar titulli C/C++.
Përmirësimet, rregullimet dhe ndryshimet kryesore, të shtuara pas lajmit të fundit më 9 maj:
- Sigurohet mundësia e ndërtimit të ripërsëritshëm.
- U eliminua një gabim, për shkak të të cilit në rrethana shumë të rralla gjatë fikjes së një transaksioni mund të ndodhte bllokim. Problemi u identifikua nga specialistët e Positive Technologies gjatë testimit të brendshëm të produkteve të tyre.
- Testet janë përmirësuar dhe skenarët e testimit janë zgjeruar për të kontrolluar të gjitha gjendjet jo izomorfike të arrave të faqes dhe përmbajtjes GC brenda DB.
- NĂ« API C++ Ă«shtĂ« korrigjuar njĂ« ânoexceptâ tĂ« panevojshme, janĂ« shtuar ngarkesa tĂ« tjera pĂ«r metodĂ«n âcursor::erase()â, zgjidhja e bufreve Ă«shtĂ« eliminuar nga pĂ«rdorimi i âstd::stringâ pĂ«r tĂ« siguruar pĂ«rputhshmĂ«rinĂ« (e rĂ«ndĂ«sishme pĂ«r CLANG libstdc++).
- Një regresion në algoritmin e spilingut të faqeve të ndotura (zhbllokimi selektiv i faqeve të ndryshuara të DB) është eliminuar, duke u shfaqur si një gabim të papritur MDBX_PROBLEM gjatë ndryshimit të të dhënave në transaksione të mëdha.
- U bë një verifikim fazing me shtimin e disa kontrolleve për të siguruar stabilitetin gjatë dëmtimit të qëllimtë të DB.
- U eliminuan paralajmërimet e vogla të UndefinedBehaviorSanitizer dhe Problemeve nga Coverity Scan.
- U korrigjua kontrolli i njĂ« flamuri tĂ« brendshĂ«m tĂ« vjetruar dhe qĂ« nuk ishte mĂ« nĂ« pĂ«rdorim âP_DIRTYâ nĂ« faqet e brendshme tĂ« imazheve tĂ« DB tĂ« krijuara nga versionet e vjetra tĂ« librarisĂ«.
- Në skripte CMake, është përmirësuar kërkimi i komponentëve të kompilatorit të nevojshëm për LTO (optimizimi në kohën e lidhjes).
- Numri maksimal i lexuesve të njëkohshëm është rritur në 32767.
- Puna është përshpejtuar gjatë përdorimit të Valgrind dhe AddressSanitizer.
- Në Windows, është eliminuar përdorimi rekursiv të SRW-lock gjatë funksionimit në modalitetin MDBX_NOTLS (pa përdorimin e ruajtjes së thread-eve lokale), është korrigjuar gjenerimi i bootid në rast të ndryshimit të kohës sistemike, është përmirësuar identifikimi i WSL1 dhe WSL2, dhe është shtuar mundësia e hapjes së DB të montuar në Plan 9 përmes DrvFS.
- Përgjithësisht, janë bërë më shumë se 160 ndryshime në 57 skedarë, janë shtuar rreth 5000 rreshta, dhe janë fshirë rreth 2500.
Veçanërisht dëshiroj të falenderoj ekipin e projektit Erigon (ekonomia Ethereum) për ndihmën në testimin në skenarë ekstreme të përdorimit. Të dhënat tregojnë se në pesë muajt që nga lëshimi i libmdbx v0.10.0, me një volum DB prej 1-2 TB në çdo instalim Erigon (përdoret në 7% të nyjeve të Ethereum), ka pasur vetëm tre raporte për dëmtimin e DB, të gjithë për shkak të arsyeve të jashtme dhe jo gabimeve të softuerit: në dy raste shkaku ishte gabimi i RAM-it, dhe në rastin e tretë gabimi i zerimit të të dhënave në një konfigurim specifik të nënndërmarrjes së ruajtjes me përdorimin e BTRFS.
Burimi: opennet.ru
