Vrystelling van hoëwerkverrigting ingebedde DBMS libmdbx 0.10.4 en libfpta 0.3.9

Die libmdbx 0.10.4 (MDBX) biblioteke is vrygestel met die implementering van 'n hoë-prestasie kompakte ingebedde sleutel-waarde databasis, en die geassosieerde libfpta 0.3.9 (FPTA) biblioteek, wat 'n tabelvormige voorstelling van data met sekondêre en saamgestelde indekse implementeer bo-op MDBX. Beide biblioteke word onder OSI-goedgekeurde lisensies versprei. Alle huidige bedryfstelsels en argitekture word ondersteun, sowel as die Russiese Elbrus 2000.

Histories is libmdbx 'n diepgaande herbewerking van die LMDB DBMS en is beter as sy voorouer in betroubaarheid, kenmerkstel en werkverrigting. In vergelyking met LMDB, plaas libmdbx baie klem op kodekwaliteit, API-stabiliteit, toetsing en outomatiese kontrole. 'n Hulpmiddel om die integriteit van die databasisstruktuur te kontroleer met sommige herstelvermoëns word verskaf.

Tegnologie-gewys, libmdbx bied ACID, sterk verandering serialisering, en nie-blokkerende lees met lineêre skaal oor SVE kerns. Outo-kompaktifisering, outomatiese databasisgroottebestuur en reeksnavraagskatting word ondersteun. Sedert 2016 is projekte deur Positive Technologies gefinansier en word sedert 2017 in sy produkte gebruik.

libmdbx bied 'n C++ API, sowel as entoesias-ondersteunde taalbindings vir Rust, Haskell, Python, NodeJS, Ruby, Go en Nim. Vir libfpta is slegs die API-beskrywing publiek beskikbaar in die vorm van 'n C/C++-koplêer.

Groot innovasies, verbeterings en regstellings bygevoeg sedert die vorige nuus op 9 Mei:

  • Maak reproduceerbare bouwerk moontlik.
  • 'n Fout opgelos wat in baie seldsame omstandighede 'n lus/vries kan voorkom tydens 'n transaksie-toewysing. Die probleem is geïdentifiseer deur Positive Tecnologies-spesialiste tydens interne toetsing van hul eie produkte.
  • Toetse is verbeter en toetsscenario's is uitgebrei om alle bereikbare nie-isomorfiese toestande van die bladsyboom en GC-inhoud binne die databasis na te gaan.
  • In die C++ API is 'n ekstra "noexcept" reggestel, addisionele oorladings is bygevoeg vir die "cursor::erase()" metode, die implementering van buffers is die gebruik van "std::string" gespaar om belyning te verseker (relevant vir CLANG libstdc++).
  • 'n Regressie in die vuil bladsy mors-algoritme (selektiewe uitwerping van veranderde databasisbladsye) wat gemanifesteer is deur 'n seldsame onverwagte fout MDBX_PROBLEM wanneer data in groot transaksies verander is, is uitgeskakel.
  • 'n Faseringstoets is uitgevoer met die byvoeging van 'n aantal kontroles om stabiliteit te verseker in die geval van opsetlike skade aan die databasis.
  • Vaste geringe waarskuwings UndefinedBehaviorSanitizer en Coverity Scan kwessies.
  • Vaste nagaan van die verouderde en nie meer gebruikte interne vlag "P_DIRTY" in geneste bladsye binne databasis beelde geskep deur ouer weergawes van die biblioteek.
  • In CMake-skrifte is die soektog na samestellerkomponente wat benodig word vir LTO (skakeltydoptimering) verbeter.
  • Die maksimum aantal gelyktydige lesers is tot 32767 verhoog.
  • Verbeterde werkverrigting wanneer Valgrind en AddressSanitizer gebruik word.
  • Op Windows is die rekursiewe gebruik van SRW-slot wanneer daar in MDBX_NOTLS-modus gewerk word (sonder die gebruik van draad plaaslike berging) uitgeskakel, bootid-generering is reggestel as die stelseltyd verander het, WSL1- en WSL2-bespeuring is verbeter, en die vermoë om oopmaak 'n databasis op Plan 9 gemonteer via DrvFS is bygevoeg.
  • In totaal is meer as 160 veranderinge aan 57 lêers aangebring, ~5000 reëls is bygevoeg, ~2500 is uitgevee.

Ek wil veral die Erigon-projekspan (Ethereum-ekosisteem) bedank vir hul hulp met die toetsing in uiterste gebruikscenario's. Dit is betekenisvol dat in vyf maande sedert die vrystelling van libmdbx v0.10.0, met 'n databasisvolume van 1-2 TB in elke Erigon-installasie (gebruik op 7% van Ethereum-nodusse), slegs drie verslae van databasiskorrupsie ontvang is, almal van wat plaasgevind het as gevolg van eksterne redes, en nie sagtewarefoute nie: in twee gevalle was die oorsaak RAM-foute, in die derde 'n fout met die terugstel van data in 'n spesifieke konfigurasie van die bergingsubstelsel met behulp van BTRFS.

Bron: opennet.ru

Voeg 'n opmerking