Frigivelse af højtydende indlejret DBMS libmdbx 0.10.4 og libfpta 0.3.9

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

Tilføj en kommentar