Udgivelsen af databasen libmdbx 0.11.7. Udviklingen er flyttet til GitFlic efter blokeringen på GitHub.

Der er udgivet et bibliotek, libmdbx 0.11.7 (MDBX), med en implementering af en højtydende, kompakt indlejret key-value database. Koden til libmdbx distribueres under OpenLDAP Public License. Alle aktuelle operativsystemer og arkitekturer understøttes, samt den russiske Elbrus 2000.

Udgivelsen er bemærkelsesværdig for migrationen af projektet til tjenesten GitFlic, efter at administrationen af GitHub uden forudgående varsel og uden at give nogen forklaring den 15. april 2022 slettede libmdbx sammen med mange andre projekter, samtidig med at adgangen til mange udviklere tilknyttet virksomheder, der var omfattet af USA's sanktioner, blev blokeret. Set fra brugernes perspektiv blev alle sider, repository og forks pludselig til en '404'-side, uden mulighed for kommunikation eller opklaring af årsagerne.

Desværre er næsten alle issues gået tabt, hvor der var mange spørgsmål med detaljerede svar samt adskillige diskussioner. Tabet af denne information er den eneste objektive skade, som administrationen af GitHub har formået at påføre projektet. Delvist er kopier af diskussioner stadig tilgængelige i arkivet archive.org.

Tabet af opbyggede CI-scenarier og infrastruktur (tilgængelig gratis for OpenSource-projekter) har tvunget os til at foretage revision, standardisering og eliminere en smule teknisk gæld. I øjeblikket er CI genoprettet næsten til det tidligere niveau, med undtagelse af bygning og testkørsel for alle varianter af BSD og Solaris. Det karakteristiske er, at der ikke er kommet nogen forklaringer eller meddelelser fra GitHub efter deres handlinger, bortset fra påmindelser om betaling og forsøg på at opkræve penge.

Siden den sidste nyhed om udgivelsen af libmdbx v0.11.3, udover genoprettelsen efter GitHub's handlinger, er der også bemærkelsesværdige forbedringer og fejlrettelser:

  • Tilføjet omgåelse af den fundne effekt/defekt ved inkonsistens i den samlede side- og buffer-cache i Linux-kernen. I systemer, hvor side- og buffer-cachen faktisk er samlet, giver det ikke mening for kernen at bruge hukommelse til to kopier af data ved skrivning til en allerede kortlagt fil i hukommelsen. Derfor bliver de skrevne data synlige gennem hukommelsestildelingen, før systemopkaldet write() er afsluttet, selvom dataene endnu ikke er skrevet til disken.

    Generelt set er det ikke rationelt at have en anden opførsel, da der ved udsat sammenfletning alligevel skal tages lås på side-listerne, kopieres data eller justeres PTE. Derfor har den uofficielle konsistensregel været gældende siden 1989, hvor den unified buffer cache blev introduceret i SRV4. Derfor krævede det en stor indsats at opdage mærkelige fejl i belastede driftscenarier med libmdbx. Først at reproducere problemet, derefter at verificere hypoteser og teste forbedringer.

    Nu kan vi med sikkerhed sige, at problemet er korrekt identificeret, lokaliseret og pålideligt løst, på trods af kompleksiteten og det specifikke reproduktionsscenarie. Derudover blev mekanismen til omgåelse bekræftet af en af udviklerne af Erigon (Ethereum), hvor beskyttelsen ved debugging-versionen viste sig som regression på grund af en overflødig assert-kontrol.

    Det skal bemærkes, at i konteksten af den brede anvendelse af libmdbx i arbejdede projekter, er det principielt vigtigere at sikre pålidelig drift end at afgøre, om det er en 'fejl eller funktion' og om man kan stole på sådan konsistens, især ikke at lede efter årsager til inkonsistens inden for Linux-kernen. Derfor handler det her om at løse et problem, der kunne berøre brugerne.

  • Regressionen af fejlen EXDEV (Cross-device link) ved varmt kopiering af databaser uden komprimering til et andet filsystem er blevet løst, både gennem API og ved hjælp af mdbx_copy værktøjet.
  • Kris Zyp har implementeret støtte til libmdbx i Deno. Kai Wetlesen har pakket RPM til Fedora. David Bouyssié har lavet bindinger til Scala.
  • Håndteringen af værdien angivet af MDBX_opt_rp_augment_limit ved behandling af enorme transaktioner i store databaser er blevet rettet. Tidligere kunne der på grund af en fejl foretages unødvendige handlinger, som nogle gange påvirkede ydeevnen i implementeringerne af Ethereum (Erigon/Akula/Silkworm) og projekter på Binance Chain.
  • En række mangler er blevet rettet, herunder i C++ API. Mange byggeproblemer i sjældne og eksotiske konfigurationer er blevet løst. Den samlede liste over alle betydningsfulde forbedringer kan findes i ChangeLog.
  • I alt er der foretaget 185 ændringer i 89 filer, tilføjet ≈3300 linjer og fjernet ≈4100. Der er blevet fjernet mere hovedsageligt på grund af oprydning af allerede ubrugelige teknologiske filer relateret til GitHub og afhængige tjenester.

Historisk set er libmdbx en dyb omarbejdning af databasen LMDB og overgår sin forgænger i pålidelighed, funktionalitet og ydeevne. I forhold til LMDB lægger libmdbx stor vægt på kodekvalitet, stabilt API-arbejde, testning og automatiske tjek. Der medfølger et værktøj til at kontrollere databasens strukturintegritet med nogle genoprettelsesmuligheder.

Teknisk set tilbyder libmdbx ACID, streng serialisering af ændringer og ikke-blokkerende læsning med lineær skalering efter CPU-kerner. Automatisk kompaktering understøttes, ligesom automatisk administration af database størrelse og vurdering af udvalgsvolumen baseret på intervaller (range query estimation). Siden 2016 har projektet været finansieret af Positive Technologies og har været anvendt i deres produkter siden 2017.

For libmdbx er der et omfattende C++ API samt understøttede bindinger til sprog som Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno og Scala.

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