Vrystelling van hoëprestasie ingebedde DBMS libmdbx 0.10

Na drie maande se ontwikkeling, is libmdbx 0.10.0 (MDBX) vrygestel, wat 'n hoëprestasie, kompakte ingeboude sleutel-waarde databasis implementeer. Die libmdbx-kode is gelisensieer onder die OpenLDAP Public License. libmdbx is 'n diepgaande herbewerking van die LMDB DBMS en is volgens die ontwikkelaars beter as sy voorouer in betroubaarheid, omvang van vermoëns en werkverrigting. Daar word gesê dat libmdbx tot 20% vinniger is as LMDB in CRUD-scenario's en tot 30% vinniger as interne beheermaatreëls gedeaktiveer word wanneer libmdbx gebou word tot 'n vlak vergelykbaar met LMDB.

Libmdbx bied ACID, sterk veranderingserialisering en nie-blokkerende leeswerk met lineêre skaal oor SVE-kerns. In libmdbx word baie aandag geskenk aan kodekwaliteit, stabiele API-werking, toetsing en outomatiese kontrole. Outo-kompaktifisering, outomatiese databasisgroottebestuur, 'n enkele databasisformaat vir 32-bis en 64-bis samestellings, en reeksnavraagskatting word ondersteun. 'n Nut om die integriteit van die databasisstruktuur te kontroleer met sommige herstelvermoëns word verskaf. Sedert 2016 word die projek deur Positive Technologies befonds en word dit sedert 2017 in sy produkte gebruik, en die sanksies wat die Amerikaanse regering teen Positive Technologies opgelê het, het geen merkbare impak nie.

Groot innovasies, verbeterings en regstellings bygevoeg sedert die laaste uitgawe:

  • 'n Ruby-binding deur Mahlon E. Smith en 'n proefweergawe van Python-bindings deur Noel Kuntze is beskikbaar, en GoLang-bindings deur Alexey Sharov is opgedateer.
  • Vir die "MDBX_WRITEMAP"-modus, wanneer databasisdata direk in RAM verander word, word 'n "deursigtige mors" van veranderde databasisbladsye na skyf geïmplementeer. Nou, na die voltooiing van elke bewerking, is sulke bladsye onmiddellik heeltemal gereed om na skyf te skryf en die OS-kern kan die veranderde bladsye onafhanklik na skyf spoel, en om 'n transaksie te pleeg, sal nie hul wysiging vereis nie. As gevolg hiervan, in besige scenario's met onvoldoende RAM, kan die volume skyfbewerkings met tot 2 keer verminder word.
  • Geïmplementeerde uitsetting van lang ongebruikte skadu-kopieë van gewysigde bladsye, met 'n voorkeur vir uitsetting van bladsye met groot/lang waardes, wat in die oorgrote meerderheid scenario's slegs een keer per transaksie gewysig word. Die resultaat is verminderde skyfverkeer en verbeterde werkverrigting in scenario's met baie groot transaksies.
  • Implementeer 'n "slim" modus om bladsye te verdeel wanneer sleutels ingevoeg word. Nou, wanneer geordende rye ingevoeg word, word die bladsye outomaties heeltemal gevul, en in ander gevalle is die boom meer optimaal gebalanseerd. Gevolglik word databasisbladsye gemiddeld meer optimaal gevul en is die B-boom meer gebalanseerd, wat 'n positiewe uitwerking op prestasie het.
  • Statistieke van bedrywighede met bladsye is bygevoeg, wat jou toelaat om die koste van die wysiging van bewerkings met die databasis akkuraat te skat.
  • Meer as 'n dosyn foute en foute is reggestel, insluitend: probleme met die bou van MinGW, die gebruik van `std::filesystem::path` in iOS <= 13.0, gebou wat ouer weergawes van Windows teiken, ens.
  • In totaal is meer as 200 veranderinge aan 66 lêers aangebring, ~6500 reëls is bygevoeg, ~4500 is uitgevee.

Afsonderlik wil ek kennis neem van die keuse van die Turbo-Geth-projek ('n turbovurk van Go-Ethereum) libmdbx as 'n nuwe berging-agterkant, en ook die projekspan (veral Alexey Sharov, Artyom Vorotnikov en Alexey Akhunov) bedank vir hul groot hulp in die toets in uiterste gebruik geval scenario's. In die besonder is 'n defek in die leesvooruit/kasbeheer ontdek en uitgeskakel, wat gelei het tot prestasie-agteruitgang in moeilik-om-reproduseerbare scenario's met groot databasisse.

Bron: opennet.ru

Voeg 'n opmerking