Release av högpresterande inbäddad DBMS libmdbx 0.10.4 och libfpta 0.3.9

Libmdbx 0.10.4 (MDBX)-biblioteken släpptes med implementeringen av en högpresterande kompakt inbäddad nyckel-värdesdatabas och det associerade libfpta 0.3.9 (FPTA)-biblioteket, som implementerar en tabellrepresentation av data med sekundära och sammansatta index ovanpå MDBX. Båda biblioteken distribueras under OSI-godkända licenser. Alla nuvarande operativsystem och arkitekturer stöds, liksom ryska Elbrus 2000.

Historiskt sett är libmdbx en djupgående omarbetning av LMDB DBMS och är överlägsen sin förfader vad gäller tillförlitlighet, funktionsuppsättning och prestanda. Jämfört med LMDB lägger libmdbx stor vikt vid kodkvalitet, API-stabilitet, testning och automatiserade kontroller. Ett verktyg för att kontrollera databasstrukturens integritet med vissa återställningsmöjligheter tillhandahålls.

Teknikmässigt erbjuder libmdbx ACID, stark serialisering av förändringar och icke-blockerande läsningar med linjär skalning över CPU-kärnor. Automatisk komprimering, automatisk databasstorlekshantering och uppskattning av intervallfrågor stöds. Sedan 2016 har projekt finansierats av Positive Technologies och sedan 2017 använts i dess produkter.

libmdbx erbjuder ett C++ API, såväl som språkbindningar som stöds av entusiaster för Rust, Haskell, Python, NodeJS, Ruby, Go och Nim. För libfpta är endast API-beskrivningen allmänt tillgänglig i form av en C/C++-huvudfil.

Stora innovationer, förbättringar och korrigeringar som lagts till sedan den tidigare nyheten den 9 maj:

  • Möjliggör reproducerbara konstruktioner.
  • Fixade en bugg som i mycket sällsynta fall kunde uppstå en loop/frysning under en transaktionsbekräftelse. Problemet identifierades av Positive Tecnologies specialister under interna tester av sina egna produkter.
  • Tester har förbättrats och testscenarier har utökats för att kontrollera alla nåbara icke-isomorfa tillstånd i sidträdet och GC-innehållet i databasen.
  • I C++ API har en extra "noexcept" fixats, ytterligare överbelastningar har lagts till för metoden "cursor::erase()", implementeringen av buffertar har besparats användningen av "std::string" för att säkerställa justering (relevant för CLANG libstdc++).
  • En regression i den smutsiga sidspillningsalgoritmen (selektiv utmatning av ändrade databassidor) som manifesterades av ett sällsynt oväntat MDBX_PROBLEM-fel när data ändrades i stora transaktioner har eliminerats.
  • Ett infasningstest genomfördes med tillägg av ett antal kontroller för att säkerställa stabilitet vid avsiktlig skada på databasen.
  • Fixade mindre varningar UndefinedBehaviorSanitizer och Coverity Scan-problem.
  • Fixat att kontrollera den föråldrade och inte längre använda interna flaggan "P_DIRTY" på kapslade sidor i databasbilder skapade av äldre versioner av biblioteket.
  • I CMake-skript har sökningen efter kompilatorkomponenter som krävs för LTO (länktidsoptimering) förbättrats.
  • Det maximala antalet samtidiga läsare har utökats till 32767.
  • Förbättrad prestanda när du använder Valgrind och AddressSanitizer.
  • På Windows har den rekursiva användningen av SRW-lås vid arbete i MDBX_NOTLS-läge (utan att använda lokal trådlagring) eliminerats, startid-generering har fixats om systemtiden har ändrats, WSL1- och WSL2-detektering har förbättrats och möjligheten att öppna en databas på Plan 9 monterad via DrvFS har lagts till.
  • Totalt gjordes mer än 160 ändringar i 57 filer, ~5000 rader lades till, ~2500 raderades.

Jag vill särskilt tacka Erigons projektteam (Ethereum ecosystem) för deras hjälp med att testa i extrema användningsscenarier. Det är betydelsefullt att på fem månader sedan lanseringen av libmdbx v0.10.0, med en databasvolym på 1-2 TB i varje Erigon-installation (används på 7 % av Ethereum-noderna), mottogs endast tre rapporter om databaskorruption, alla som uppstod på grund av externa orsaker, och inte programvarufel: i två fall var orsaken RAM-fel, i det tredje ett fel vid återställning av data i en specifik konfiguration av lagringsundersystemet med BTRFS.

Källa: opennet.ru

Lägg en kommentar