En ny version av biblioteket libmdbx 0.11.7 (MDBX) har slÀppts, som implementerar en högpresterande kompakt inbÀddad databas av klassen nyckel-vÀrde. Koden för libmdbx distribueras under OpenLDAP Public License. Alla aktuella operativsystem och arkitekturer stöds, inklusive den ryska Elbrus 2000.
Denna release Àr anmÀrkningsvÀrd för migreringen av projektet till GitFlic-tjÀnsten, efter att administrationen av GitHub utan förvarning eller förklaring tog bort libmdbx den 15 april 2022, tillsammans med mÄnga andra projekt, och samtidigt blockerade tillgÄngen för mÄnga utvecklare kopplade till företag som drabbats av sanktioner frÄn USA. FrÄn anvÀndarnas perspektiv förvandlades alla sidor, repositoryt och forkarna plötsligt till en '404'-sida, utan möjlighet till kommunikation eller förklaring.
TyvÀrr har nÀstan alla issues gÄtt förlorade, dÀr det fanns mÄnga frÄgor med detaljerade svar, samt flera diskussioner. Förlusten av denna information Àr den enda objektiva skadan som GitHubs administration lyckades Ästadkomma för projektet. Vissa kopior av diskussionerna finns delvis tillgÀngliga i arkivet archive.org.
Förlusten av de uppsatta CI-scenarierna och infrastrukturen (tillgÀnglig gratis för OpenSource-projekt) har lett till en översyn, standardisering och avveckling av en del teknisk skuld. Nu har CI ÄterstÀllts nÀstan i sin tidigare omfattning, med undantag för bygg- och körtester för alla versioner av BSD och Solaris. Det Àr anmÀrkningsvÀrt att det efter GitHubs ÄtgÀrder inte kommit nÄgra förtydliganden eller meddelanden, förutom pÄminnelser om betalningsskyldighet och försök att dra pengar.
Sedan den senaste nyheten om releasen av libmdbx v0.11.3, förutom ÄterstÀllning efter GitHub, bör följande förbÀttringar och korrigeringar noteras:
- En workaround för den upptÀckta effekten/defekten av inkohÀrens i den sammanlagda sidcache och buffertar i Linux-kÀrnan har lagts till. I system dÀr sidcache och buffertar faktiskt Àr sammanfogade, Àr det meningslöst för kÀrnan att anvÀnda minne för tvÄ kopior av data nÀr det skrivs till en fil som redan har visats i minnet. DÀrför blir de skrivna uppgifterna synliga genom minnesavbildning innan systemanropet write() Àr slutfört, Àven om data Ànnu inte har skrivits till disken.
Ăvergripande Ă€r annat beteende irrationellt eftersom det vid fördröjd sammanslagning Ă€ndĂ„ krĂ€vs att blockeringar fĂ„ngas för sidlistor, uppgifter kopieras eller PTE justeras. DĂ€rför har den informella koherensregeln gĂ€llt sedan 1989, dĂ„ unified buffer cache introducerades i SRV4. UpptĂ€ckten av konstiga störningar i belastade driftscenarier med libmdbx krĂ€vde mycket arbete. Först för att reproducera problemet, sedan för att verifiera hypoteser och testa förbĂ€ttringar.
Nu kan man med sÀkerhet sÀga att problemet har identifierats, lokaliserats och pÄ ett tillförlitligt sÀtt ÄtgÀrdats, trots alla svÄrigheter och specifikationer i reproduktionsscenariot. Dessutom har funktionaliteten hos omdirigeringsmekanismen bekrÀftats av en av utvecklarna av Erigon (Ethereum), dÀr i hans fall pÄ en debug-version yttrade sig skyddet som en regressionsfaktor pÄ grund av en överflödig assert-kontroll.
Det bör noteras att i kontexten av den breda anvÀndningen av libmdbx i arbetsprojekt Àr det principiellt viktigare att sÀkerstÀlla pÄlitlig drift snarare Àn att ta reda pÄ om "det Àr ett fel eller en egenskap" och om man kan lita pÄ en sÄdan koherens, sÀrskilt inte att söka orsakerna till okohÀrens inom Linux-kÀrnan. DÀrför handlar det om att ÄtgÀrda ett problem som kan ha pÄverkat anvÀndarna.
- Regressionsfelet EXDEV (Cross-device link) har ÄtgÀrdats vid hot copy av databaser utan komprimering till ett annat filsystem, bÄde via API och med verktyget mdbx_copy.
- Kris Zyp har implementerat stöd för libmdbx i Deno. Kai Wetlesen har skapat RPM-paket för Fedora. David Bouyssié har implementerat bindningar för Scala.
- Behandlingen av vÀrdet som anges av MDBX_opt_rp_augment_limit har förbÀttrats vid hantering av stora transaktioner i stora databaser. Tidigare kunde pÄ grund av ett fel överflödiga ÄtgÀrder vidtas, vilket ibland pÄverkade prestandan i implementationer av Ethereum (Erigon/Akula/Silkworm) och projekt frÄn Binance Chain.
- MÄnga brister har ÄtgÀrdats, inklusive i C++ API. MÄnga problem med byggen har eliminierats i sÀllsynta och exotiska konfigurationer. En fullstÀndig lista över alla betydande förbÀttringar finns i ChangeLog.
- Totalt har 185 Àndringar gjorts i 89 filer, ca 3300 rader har lagts till, cirka 4100 rader har tagits bort. Mer har tagits bort huvudsakligen pÄ grund av rensning av redan meningslösa teknologifiler relaterade till GitHub och beroende tjÀnster.
Historiskt sett Àr libmdbx en djup omarbetning av databashanteraren LMDB och övertrÀffar sin föregÄngare i pÄlitlighet, funktionalitet och prestanda. JÀmfört med LMDB lÀggs stort fokus pÄ kodkvalitet, stabil drift av API:er, testning och automatiska kontroller. En databasstrukturens integritetskontrollverktyg levereras ocksÄ med vissa ÄterstÀllningsmöjligheter.
Tekniskt erbjuder libmdbx ACID, strikt serialisering av Àndringar och icke-blockerande lÀsning med linjÀr skalning över CPU-kÀrnor. Automatisk kompaktdiskning, automatisk hantering av databasstorlek, och uppskattning av urvalvolymer baserat pÄ intervaller stöds. Projektet har finansierats av Positive Technologies sedan 2016 och har anvÀnts i deras produkter sedan 2017.
För libmdbx erbjuds en utvecklad C++ API, samt stöd frÄn entusiaster för bindningar till sprÄken Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
KĂ€lla: opennet.ru
