Utgivelse av høyytelses innebygd DBMS libmdbx 0.10.4 og libfpta 0.3.9

Libmdbx 0.10.4 (MDBX)-bibliotekene ble utgitt med implementeringen av en kompakt innebygd nøkkelverdidatabase med høy ytelse, og det tilhørende libfpta 0.3.9 (FPTA)-biblioteket, som implementerer en tabellrepresentasjon av data med sekundære og sammensatte indekser på toppen av MDBX. Begge bibliotekene er distribuert under OSI-godkjente lisenser. Alle gjeldende operativsystemer og arkitekturer støttes, så vel som den russiske Elbrus 2000.

Historisk sett er libmdbx en dyp omarbeiding av LMDB DBMS og er overlegen sin forfedre når det gjelder pålitelighet, funksjonssett og ytelse. Sammenlignet med LMDB legger libmdbx mye vekt på kodekvalitet, API-stabilitet, testing og automatiserte kontroller. Et verktøy for å sjekke integriteten til databasestrukturen med noen gjenopprettingsfunksjoner er levert.

Teknologimessig tilbyr libmdbx ACID, sterk endringsserialisering og ikke-blokkerende lesninger med lineær skalering på tvers av CPU-kjerner. Automatisk komprimering, automatisk administrasjon av databasestørrelser og estimering av rekkeviddespørringer støttes. Siden 2016 har prosjekter blitt finansiert av Positive Technologies og har siden 2017 blitt brukt i produktene deres.

libmdbx tilbyr en C++ API, samt entusiaststøttede språkbindinger for Rust, Haskell, Python, NodeJS, Ruby, Go og Nim. For libfpta er bare API-beskrivelsen offentlig tilgjengelig i form av en C/C++-headerfil.

Store innovasjoner, forbedringer og rettelser lagt til siden forrige nyhet 9. mai:

  • Muliggjør reproduserbare bygg.
  • Rettet en feil som i svært sjeldne tilfeller kunne oppstå en sløyfe/frysing under en transaksjonsbekreftelse. Problemet ble identifisert av Positive Tecnologies-spesialister under intern testing av deres egne produkter.
  • Tester er forbedret og testscenarier er utvidet for å sjekke alle tilgjengelige ikke-isomorfe tilstander av sidetreet og GC-innholdet i databasen.
  • I C++ API har en ekstra "noexcept" blitt fikset, ytterligere overbelastninger er lagt til for "cursor::erase()"-metoden, implementeringen av buffere har blitt spart for bruken av "std::string" for å sikre justering (relevant for CLANG libstdc++).
  • En regresjon i algoritmen for søl av skitne sider (selektiv utkasting av endrede databasesider) som ble manifestert av en sjelden uventet feil MDBX_PROBLEM ved endring av data i store transaksjoner, har blitt eliminert.
  • Det ble gjennomført en fasetest med tillegg av en rekke kontroller for å sikre stabilitet ved tilsiktet skade på databasen.
  • Rettet mindre advarsler problemer med UndefinedBehaviorSanitizer og Coverity Scan.
  • Rettet sjekk av det utdaterte og ikke lenger brukte interne flagget "P_DIRTY" på nestede sider i databasebilder laget av eldre versjoner av biblioteket.
  • I CMake-skript har søket etter kompilatorkomponenter som kreves for LTO (link-time optimization) blitt forbedret.
  • Maksimalt antall samtidige lesere er økt til 32767.
  • Forbedret ytelse ved bruk av Valgrind og AddressSanitizer.
  • På Windows er den rekursive bruken av SRW-lås når du arbeider i MDBX_NOTLS-modus (uten å bruke tråd lokal lagring) eliminert, oppstartsgenerering er fikset hvis systemtiden er endret, WSL1- og WSL2-deteksjon er forbedret, og muligheten til å åpne en database på Plan 9 montert via DrvFS er lagt til.
  • Totalt ble det gjort mer enn 160 endringer i 57 filer, ~5000 linjer ble lagt til, ~2500 ble slettet.

Jeg vil spesielt takke Erigon-prosjektteamet (Ethereum-økosystemet) for deres hjelp til å teste i ekstreme bruksscenarier. Det er betydelig at på fem måneder siden utgivelsen av libmdbx v0.10.0, med et databasevolum på 1-2 TB i hver Erigon-installasjon (brukt på 7 % av Ethereum-nodene), ble det bare mottatt tre rapporter om databasekorrupsjon, alle som oppsto på grunn av eksterne årsaker, og ikke programvarefeil: i to tilfeller var årsaken RAM-feil, i det tredje en feil ved tilbakestilling av data i en spesifikk konfigurasjon av lagringsundersystemet ved bruk av BTRFS.

Kilde: opennet.ru

Legg til en kommentar