Udgivelse af den højtydende indlejrede DBMS libmdbx 0.10.4 og libfpta 0.3.9.

Udgivelsen af bibliotekerne libmdbx 0.10.4 (MDBX) er sket med implementeringen af en højtydende, kompakt indlejret nøgle-værdi database, samt det relaterede bibliotek libfpta 0.3.9 (FPTA), der implementerer en tabelrepræsentation af data oven på MDBX med sekundære og sammensatte indekser. Begge biblioteker distribueres under licenser, der er godkendt af OSI. Alle aktuelle operativsystemer og arkitekturer understøttes, samt den russiske Elbrus 2000.

Historisk set er libmdbx en dybtgående omarbejdning af databasen LMDB og overgår sin forgænger med hensyn til pålidelighed, funktionalitet og ydeevne. Sammenlignet med LMDB lægges der stor vægt på kodekvalitet, stabilitet af API'et, testning og automatiske kontroller i libmdbx. Der leveres et værktøj til at kontrollere databasens struktur med nogle genoprettelsesmuligheder.

Teknologisk set tilbyder libmdbx ACID, streng ændringsserialisering og ikke-blokerende læsning med lineær skalering baseret på CPU-kerner. Auto-kompakttificering, automatisk database-størrelsesstyring og vurdering af datavalg efter områder (range query estimation) understøttes. Siden 2016 har projekterne været finansieret af Positive Technologies og er siden 2017 blevet brugt i deres produkter.

For libmdbx tilbydes et C++ API samt understøttede bindinger til sprog som Rust, Haskell, Python, NodeJS, Ruby, Go, og Nim, der vedligeholdes af entusiaster. For libfpta er API-beskrivelsen kun offentligt tilgængelig i form af en C/C++ headerfil.

De vigtigste nyheder, forbedringer og rettelser, der er tilføjet siden den tidligere nyhed den 9. maj:

  • Muligheden for reproducerbare builds er sikret.
  • En fejl er blevet rettet, der i meget sjældne tilfælde kunne føre til en uendelig sløjfe / hængen i forbindelse med afslutningen af en transaktion. Problemet blev identificeret af specialister fra Positive Technologies under intern testning af deres egne produkter.
  • Testene er blevet opdateret, og testscenarierne er blevet udvidet for at kontrollere alle opnåelige ikke-isomorfe tilstande af sidetræet og indholdet af GC inden i databasen.
  • I C++ API'et er den overflødige "noexcept" blevet rettet, og der er tilføjet ekstra overbelastninger for metoden "cursor::erase()". Bufferimplementeringen er blevet befriet for brugen af "std::string" for at sikre alignment (aktuelt for CLANG libstdc++).
  • Regression in the dirty page spooling algorithm (selective eviction of modified database pages) has been eliminated, which manifested as a rare unexpected MDBX_PROBLEM error when modifying data in huge transactions.
  • Phase checking has been conducted with the addition of a series of checks to ensure stability when intentionally corrupting the database.
  • Minor warnings from UndefinedBehaviorSanitizer and Coverity Scan issues have been resolved.
  • The check for the obsolete and no longer used internal flag "P_DIRTY" on nested pages within database images created by old versions of the library has been corrected.
  • CMake scripts have been improved for finding the necessary compiler components for LTO (link-time optimization).
  • The maximum number of simultaneous readers has been increased to 32767.
  • Performance has been accelerated when using Valgrind and AddressSanitizer.
  • On Windows, recursive SRW-lock usage has been eliminated while operating in MDBX_NOTLS mode (without using thread local storage), bootid generation has been fixed in case of system time change, WSL1 and WSL2 detection has been improved, and the ability to open databases on Plan 9 mounted via DrvFS has been added.
  • A total of over 160 changes have been made across 57 files, adding approximately 5000 lines and removing around 2500.

Special thanks to the Erigon project team (Ethereum ecosystem) for their assistance in testing under extreme usage scenarios. Notably, in the five months since the release of libmdbx v0.10.0, with a database size of 1-2 TB in each Erigon installation (used on 7% of Ethereum nodes), only three reports of database corruption have been received, all due to external factors rather than software errors: in two cases, the cause was RAM failures, and in the third, a data zeroing error in a specific storage subsystem configuration using BTRFS.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster