Release van DBMS libmdbx 0.11.7. Verplaats de ontwikkeling naar GitFlic na Lockdown op GitHub

De libmdbx 0.11.7 (MDBX) -bibliotheek is uitgebracht met de implementatie van een krachtige, compacte, ingebedde sleutelwaardedatabase. De libmdbx-code valt onder de OpenLDAP Public License. Alle huidige besturingssystemen en architecturen worden ondersteund, evenals het Russische Elbrus 2000.

De release is opmerkelijk vanwege de migratie van het project naar de GitFlic-service nadat de GitHub-administratie op 15 april 2022, zonder enige waarschuwing of uitleg, limbdbx verwijderde samen met een groot aantal andere projecten, terwijl tegelijkertijd de toegang werd geblokkeerd voor veel ontwikkelaars die geassocieerd waren met bedrijven die onderworpen zijn aan Amerikaanse sancties. Vanuit het oogpunt van de gebruiker veranderden alle pagina's, de repository en de forks van het project plotseling in een 404-pagina, zonder de mogelijkheid tot enige communicatie en het achterhalen van de redenen.

Helaas zijn bijna alle kwesties, waarin veel vragen met gedetailleerde antwoorden waren, evenals veel discussies, verloren gegaan. Het verlies van deze informatie is de enige objectieve schade die de GitHub-administratie aan het project heeft weten toe te brengen. Gedeeltelijke kopieën van de discussies blijven beschikbaar op archive.org.

Het verlies van opgebouwde CI-scenario's en infrastructuur (gratis beschikbaar voor OpenSource-projecten) dwong ons tot herziening, unificatie en eliminatie van kleine technische schulden. Nu is CI in vrijwel dezelfde mate hersteld, met uitzondering van de build-and-run-tests voor alle BSD- en Solaris-varianten. Doorgaans ontving GitHub na de acties geen enkele verduidelijking of melding, afgezien van herinneringen over de noodzaak van betaling en pogingen om geld af te schrijven.

Sinds het laatste nieuws over de release van libmdbx v0.11.3 is het, naast het herstel van GitHub-acties, de moeite waard om de volgende verbeteringen en oplossingen op te merken:

  • Er is een oplossing toegevoegd voor een gedetecteerd incoherentie-effect/defect in de gecombineerde pagina- en buffercache in de Linux-kernel. In systemen waar de pagina- en buffercaches echt gecombineerd zijn, heeft het geen zin dat de kernel geheugen verspilt voor twee kopieën van gegevens bij het schrijven naar een bestand dat al in het geheugen is toegewezen. Daarom worden de gegevens die worden geschreven zichtbaar via geheugentoewijzing voordat de write()-systeemaanroep is voltooid, zelfs als de gegevens nog niet naar schijf zijn geschreven.

    Over het algemeen is ander gedrag niet rationeel, omdat u bij een uitgestelde samenvoeging nog steeds vergrendelingen voor paginalijsten moet aanschaffen, gegevens moet kopiëren of PTE moet aanpassen. Daarom is de onuitgesproken coherentieregel van kracht sinds 1989, toen de uniforme buffercache in SRV4 verscheen. Daarom kostte het detecteren van vreemde crashes in geladen libmdbx-exploitatiescenario's veel werk. Eerst om het probleem te reproduceren, daarna om hypothesen te verifiëren en verbeteringen te testen.

    Nu kunnen we vol vertrouwen zeggen dat het probleem op betrouwbare wijze is geïdentificeerd, gelokaliseerd en op betrouwbare wijze geëlimineerd, ondanks de complexiteit en specificiteit van het reproductiescenario. Bovendien werd de werking van het bypass-mechanisme bevestigd door een van de ontwikkelaars van Erigon (Ethereum); in zijn geval werd bij de debug-build de bescherming geactiveerd als een regressie vanwege een onnodige assert-check.

    Opgemerkt moet worden dat in de context van het wijdverbreide gebruik van libmdbx in productieprojecten het garanderen van een betrouwbare werking van fundamenteel belang is dan het uitzoeken of het een bug of een feature is en of op dergelijke samenhang kan worden vertrouwd, laat staan ​​het zoeken naar de oorzaken van incoherentie binnen de Linux-kernel. Daarom hebben we het hier over het oplossen van een probleem dat mogelijk gevolgen heeft gehad voor gebruikers.

  • De regressie van de EXDEV-fout (Cross-device link) bij het hot kopiëren van een database zonder compactificatie naar een ander bestandssysteem, zowel via de API als met het hulpprogramma mdbx_copy, is geëlimineerd.
  • Kris Zyp implementeerde licmdbx-ondersteuning in Deno. Kai Wetlesen ontwierp RPM-verpakkingen voor Fedora. David Bouysié implementeerde bindingen voor Scala.
  • Probleem opgelost met het verwerken van de waarde die is opgegeven door de optie MDBX_opt_rp_augment_limit bij het verwerken van grote transacties in grote databases. Voorheen konden door een fout onnodige acties worden uitgevoerd, wat soms de prestaties van Ethereum-implementaties (Erigon/Akula/Silkworm) en Binance Chain-projecten beïnvloedde.
  • Er zijn veel bugs opgelost, ook in de C++ API. Veel bouwproblemen opgelost in zeldzame en exotische configuraties. Een volledige lijst met alle belangrijke verbeteringen is beschikbaar in ChangeLog.
  • Er zijn in totaal 185 wijzigingen aangebracht in 89 bestanden, er zijn ≈3300 regels toegevoegd en ≈4100 regels verwijderd. Er zijn er nog meer verwijderd, voornamelijk vanwege het opschonen van toch al nutteloze technologiebestanden die verband houden met GitHub en afhankelijke services.

Historisch gezien is limbdbx een diepgaande herwerking van het LMDB DBMS en is het superieur aan zijn voorloper wat betreft betrouwbaarheid, functieset en prestaties. Vergeleken met LMDB legt licmdbx veel nadruk op codekwaliteit, API-stabiliteit, testen en geautomatiseerde controles. Er wordt een hulpprogramma meegeleverd voor het controleren van de integriteit van de databasestructuur met enkele herstelmogelijkheden.

Technologisch gezien biedt limbdbx ACID, sterke serialisatie van wijzigingen en niet-blokkerende leesbewerkingen met lineaire schaling over CPU-kernen. Automatische compactificatie, automatisch beheer van de databasegrootte en schatting van bereikquery's worden ondersteund. Sinds 2016 wordt het project gefinancierd door Positive Technologies en sinds 2017 in zijn producten gebruikt.

libmdbx biedt een ontwikkelde C++ API, evenals door liefhebbers ondersteunde bindingen naar de talen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Bron: opennet.ru

Voeg een reactie