Frigivelse af DBMS libmdbx 0.11.7. Flyt udvikling til GitFlic efter lockdown på GitHub

Biblioteket libmdbx 0.11.7 (MDBX) er blevet frigivet med implementeringen af ​​en højtydende kompakt indlejret nøgleværdidatabase. Libmdbx-koden distribueres under OpenLDAP Public License. Alle nuværende operativsystemer og arkitekturer understøttes, såvel som den russiske Elbrus 2000.

Udgivelsen er bemærkelsesværdig for migreringen af ​​projektet til GitFlic-tjenesten, efter at GitHub-administrationen fjernede libmdbx sammen med et væld af andre projekter den 15. april 2022 uden nogen advarsel eller forklaring, og samtidig blokerede adgangen til mange udviklere tilknyttet virksomheder, der faldt. under amerikanske sanktioner. Fra brugerens synspunkt blev alle sider, repository og forgrene i projektet pludselig til en "404"-side, uden mulighed for nogen kommunikation og at finde ud af årsagerne.

Desværre er næsten alle spørgsmål gået tabt, hvor der var mange spørgsmål med uddybende svar, samt en masse diskussioner. Tabet af denne information er den eneste objektive skade, som GitHub-administrationen formåede at påføre projektet. Delvise kopier af diskussionerne forbliver tilgængelige i archive.org-arkivet.

Tabet af indbyggede CI-scripts og infrastruktur (gratis tilgængelig for OpenSource-projekter) tvang os til at foretage revision, forening og eliminering af en lille teknisk gæld. Nu er CI blevet gendannet i næsten samme omfang, med undtagelse af builds og testkørsler for alle BSD- og Solaris-varianter. Sigende nok, efter GitHubs handlinger, blev der ikke modtaget nogen afklaringer eller meddelelser, bortset fra en påmindelse om betalingsbehov og forsøg på at afskrive penge.

Siden de sidste nyheder om udgivelsen af ​​libmdbx v0.11.3, ud over at gendanne fra GitHub-handlinger, er følgende forbedringer og rettelser værd at bemærke:

  • Tilføjet en løsning for en detekteret inkohærenseffekt/defekt i den kombinerede side og buffercache i Linux-kernen. På systemer, hvor side- og buffercachen virkelig er forenet, giver det ingen mening for kernen at spilde hukommelse på to kopier af data, når der skrives til en allerede hukommelseskortet fil. Derfor bliver de data, der skrives, synlige via hukommelseskortlægning, før write()-systemkaldet fuldføres, selvom dataene endnu ikke er skrevet til disken.

    I alt er anden adfærd ikke rationel, for med en forsinket fletning skal du stadig have fat i låse til sidelister, kopiere data eller justere PTE. Derfor har den uudtalte regel om sammenhæng været i kraft siden 1989, hvor den forenede buffer-cache dukkede op i SRV4. Derfor krævede det meget arbejde at finde mærkelige fejl i travle libmdbx-produktionsscenarier. Først ved at reproducere problemet, derefter ved at verificere hypoteser og kontrollere forbedringer.

    Nu kan vi trygt sige, at problemet er blevet pålideligt identificeret, lokaliseret og pålideligt elimineret på trods af kompleksiteten og specificiteten af ​​afspilningsscenariet. Derudover blev arbejdet med bypass-mekanismen bekræftet af en af ​​udviklerne af Erigon (Ethereum), i hans tilfælde udløste beskyttelsen på fejlfindingsbygningen som en regression på grund af en ekstra påstandskontrol.

    Det skal bemærkes, at i sammenhæng med den udbredte brug af libmdbx i arbejdsprojekter, er det grundlæggende vigtigere at sikre pålidelig drift og ikke at finde ud af "er dette en fejl eller en funktion", og om en sådan sammenhæng kan stoles på , især ikke at søge efter årsagerne til usammenhæng i Linux-kernen. Derfor taler vi her om at løse et problem, der kan påvirke brugerne.

  • Rettede en regression af EXDEV-fejlen (Cross-device link) ved hot kopiering af en database uden komprimering til et andet filsystem, både gennem API'et og ved hjælp af mdbx_copy-værktøjet.
  • Kris Zyp har implementeret support til libmdbx i Deno. Kai Wetlesen har pakket RPM'er til Fedora. David Bouyssié implementerede bindinger til Scala.
  • Fast håndtering af værdien indstillet af MDBX_opt_rp_augment_limit-indstillingen ved behandling af store transaktioner i store databaser. Tidligere kunne der på grund af en fejl udføres unødvendige handlinger, som nogle gange påvirkede ydeevnen i Ethereum-implementeringer (Erigon/Akula/Silkworm) og Binance Chain-projekter.
  • En masse fejl er blevet rettet, inklusive dem i C++ API. Rettede mange byggeproblemer i sjældne og eksotiske konfigurationer. En komplet liste over alle væsentlige forbedringer er tilgængelig i ChangeLog.
  • I alt 185 ændringer blev foretaget i 89 filer, ≈3300 linjer blev tilføjet, ≈4100 blev slettet. Fjernet mere for det meste på grund af rensning af allerede ubrugelige tekniske filer forbundet med GitHub og afhængige tjenester.

Historisk set er libmdbx et dybt redesign af LMDB DBMS og overgår dets stamfader med hensyn til pålidelighed, funktionssæt og ydeevne. Sammenlignet med LMDB lægger libmdbx meget vægt på kodekvalitet, API-stabilitet, test og automatiserede kontroller. Et værktøj til kontrol af databasestrukturens integritet leveres med nogle gendannelsesmuligheder.

Teknologisk tilbyder libmdbx ACID, streng ændringsserialisering og ikke-blokerende læsninger med lineær skalering på tværs af CPU-kerner. Autokomprimering, automatisk databasestørrelsesstyring og estimering af rækkeviddeforespørgsler understøttes. Siden 2016 har projektet været finansieret af Positive Technologies og har været brugt i dets produkter siden 2017.

libmdbx tilbyder en udviklet C++ API, samt entusiast-understøttede bindinger til Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Kilde: opennet.ru

Tilføj en kommentar