Libmdbx 0.10.4 (MDBX) bibliotekerne blev frigivet med implementeringen af en højtydende kompakt indlejret nøgleværdidatabase og det tilhørende libfpta 0.3.9 (FPTA) bibliotek, som implementerer en tabelrepræsentation af data med sekundære og sammensatte indekser oven på MDBX. Begge biblioteker distribueres under OSI-godkendte licenser. Alle nuværende operativsystemer og arkitekturer er understøttet, såvel som den russiske Elbrus 2000.
Historisk set er libmdbx en dyb omarbejdning af LMDB DBMS og er overlegen i forhold til sin forfader med hensyn til pålidelighed, funktionssæt og ydeevne. Sammenlignet med LMDB lægger libmdbx meget vægt på kodekvalitet, API-stabilitet, testning og automatiserede kontroller. Et værktøj til kontrol af databasestrukturens integritet med nogle gendannelsesfunktioner er leveret.
Teknologimæssigt tilbyder libmdbx ACID, stærk ændringsserialisering og ikke-blokerende læsninger med lineær skalering på tværs af CPU-kerner. Automatisk komprimering, automatisk databasestørrelsesstyring og estimering af rækkeviddeforespørgsler understøttes. Siden 2016 er projekter blevet finansieret af Positive Technologies og har siden 2017 været brugt i dets produkter.
libmdbx tilbyder en C++ API samt entusiast-understøttede sprogbindinger til Rust, Haskell, Python, NodeJS, Ruby, Go og Nim. For libfpta er kun API-beskrivelsen offentligt tilgængelig i form af en C/C++ header-fil.
Større innovationer, forbedringer og rettelser tilføjet siden den forrige nyhed den 9. maj:
- Muliggør reproducerbare builds.
- Rettede en fejl, som i meget sjældne tilfælde kunne opstå en loop/frysning under en transaktionsbekræftelse. Problemet blev identificeret af Positive Tecnologies specialister under intern test af deres egne produkter.
- Tests er blevet forbedret, og testscenarier er blevet udvidet for at kontrollere alle tilgængelige ikke-isomorfe tilstande i sidetræet og GC-indholdet i databasen.
- I C++ API'en er et ekstra "noexcept" blevet rettet, yderligere overbelastninger er tilføjet til "cursor::erase()" metoden, implementeringen af buffere er blevet skånet for brugen af "std::string" for at sikre justering (relevant for CLANG libstdc++).
- En regression i den beskidte sidespild-algoritme (selektiv udstødning af ændrede databasesider), der blev manifesteret af en sjælden uventet fejl MDBX_PROBLEM ved ændring af data i store transaktioner, er blevet elimineret.
- Der er gennemført en fasetest med tilføjelse af en række kontroller for at sikre stabilitet i tilfælde af forsætlig skade på databasen.
- Rettede mindre advarsler problemer med UndefinedBehaviorSanitizer og Coverity Scan.
- Rettet kontrol af det forældede og ikke længere brugte interne flag "P_DIRTY" på indlejrede sider inde i databasebilleder oprettet af ældre versioner af biblioteket.
- I CMake-scripts er søgningen efter compilerkomponenter, der kræves til LTO (link-time optimization), blevet forbedret.
- Det maksimale antal samtidige læsere er blevet øget til 32767.
- Forbedret ydeevne ved brug af Valgrind og AddressSanitizer.
- På Windows er den rekursive brug af SRW-lås ved arbejde i MDBX_NOTLS-tilstand (uden at bruge lokalt trådlager) blevet elimineret, bootid-generering er blevet rettet, hvis systemtiden er ændret, WSL1- og WSL2-detektering er blevet forbedret, og muligheden for at åbne en database på Plan 9 monteret via DrvFS er tilføjet.
- I alt blev der foretaget mere end 160 ændringer i 57 filer, ~5000 linjer blev tilføjet, ~2500 blev slettet.
Jeg vil især gerne takke Erigon-projektteamet (Ethereum-økosystemet) for deres hjælp til at teste i ekstreme brugsscenarier. Det er væsentligt, at der i de fem måneder, der er gået siden udgivelsen af libmdbx v0.10.0, med en databasevolumen på 1-2 TB i hver Erigon-installation (brugt på 7 % af Ethereum-noder), kun blev modtaget tre rapporter om databasekorruption, alle hvoraf opstod på grund af eksterne årsager og ikke softwarefejl: i to tilfælde var årsagen RAM-fejl, i det tredje en fejl ved nulstilling af data i en specifik konfiguration af lagerundersystemet ved hjælp af BTRFS.
Kilde: opennet.ru