Utgivelse av DBMS libmdbx 0.11.7. Flytt utvikling til GitFlic etter lockdown på GitHub

Libmdbx 0.11.7 (MDBX)-biblioteket ble utgitt med implementeringen av en kompakt innebygd nøkkelverdidatabase med høy ytelse. Libmdbx-koden er lisensiert under OpenLDAP Public License. Alle gjeldende operativsystemer og arkitekturer støttes, så vel som den russiske Elbrus 2000.

Utgivelsen er kjent for migreringen av prosjektet til GitFlic-tjenesten etter at 15. april 2022, GitHub-administrasjonen, uten noen advarsel eller forklaring, slettet libmdbx sammen med en rekke andre prosjekter, mens de samtidig blokkerte tilgangen til mange utviklere tilknyttet selskaper underlagt amerikanske sanksjoner. Fra brukernes synspunkt ble alle sidene, depotet og gaflene til prosjektet plutselig blitt til en 404-side, uten mulighet for kommunikasjon og å finne ut årsakene.

Dessverre har nesten alle saker, der det var mange spørsmål med detaljerte svar, samt mange diskusjoner, gått tapt. Tapet av denne informasjonen er den eneste objektive skaden som GitHub-administrasjonen klarte å påføre prosjektet. Delvis kopier av diskusjonene forblir tilgjengelige på archive.org.

Tapet av oppbygde CI-scenarier og infrastruktur (gratis tilgjengelig for OpenSource-prosjekter) tvang oss til å foreta revisjon, forening og eliminering av liten teknisk gjeld. Nå er CI gjenopprettet i nesten samme grad, med unntak av bygge- og kjøretestene for alle BSD- og Solaris-varianter. Typisk, etter handlingene, mottok ikke GitHub noen avklaringer eller varsler, bortsett fra påminnelser om betalingsbehov og forsøk på å avskrive penger.

Siden de siste nyhetene om utgivelsen av libmdbx v0.11.3, i tillegg til gjenoppretting fra GitHub-handlinger, er det verdt å merke seg følgende forbedringer og rettelser:

  • Lagt til en løsning for en oppdaget inkoherenseffekt/defekt i den kombinerte side- og bufferbufferen i Linux-kjernen. I systemer der side- og bufferbufferen virkelig er kombinert, er det ingen vits i at kjernen kaster bort minne for to kopier av data når du skriver til en fil som allerede er kartlagt i minnet. Derfor blir dataene som skrives synlige gjennom minnetilordning før write()-systemkallet fullføres, selv om dataene ennå ikke er skrevet til disken.

    Generelt er annen oppførsel ikke rasjonell, fordi med en utsatt sammenslåing vil du fortsatt måtte skaffe låser for sidelister, kopiere data eller justere PTE. Derfor har den uuttalte koherensregelen vært i kraft siden 1989, da den enhetlige bufferbufferen dukket opp i SRV4. Derfor krevde det mye arbeid å oppdage merkelige krasj i lastede libmdbx-utnyttelsesscenarier. Først for å reprodusere problemet, deretter for å verifisere hypoteser og teste forbedringer.

    Nå kan vi trygt si at problemet har blitt pålitelig identifisert, lokalisert og pålitelig eliminert, til tross for kompleksiteten og spesifisiteten til reproduksjonsscenariet. I tillegg ble driften av bypass-mekanismen bekreftet av en av utviklerne av Erigon (Ethereum); i hans tilfelle, på feilsøkingsbygget, ble beskyttelsen utløst som en regresjon på grunn av en unødvendig påstandssjekk.

    Det skal bemerkes at i sammenheng med den utbredte bruken av libmdbx i produksjonsprosjekter, er det grunnleggende viktigere å sikre pålitelig drift enn å finne ut om det er en feil eller en funksjon og om en slik sammenheng kan stole på, langt mindre å søke etter årsaker til usammenheng i Linux-kjernen. Derfor snakker vi her om å fikse et problem som kan ha påvirket brukere.

  • Regresjonen av EXDEV-feilen (Cross-device link) ved hot kopiering av en database uten komprimering til et annet filsystem, både gjennom API og med mdbx_copy-verktøyet, har blitt eliminert.
  • Kris Zyp implementerte libmdbx-støtte i Deno. Kai Wetlesen designet RPM-emballasje for Fedora. David Bouyssié implementerte bindinger for Scala.
  • Rettet behandling av verdien spesifisert av MDBX_opt_rp_augment_limit-alternativet ved behandling av enorme transaksjoner i store databaser. Tidligere, på grunn av en feil, kunne unødvendige handlinger utføres, noe som noen ganger påvirket ytelsen i Ethereum-implementeringer (Erigon/Akula/Silkworm) og Binance Chain-prosjekter.
  • Mange feil har blitt fikset, inkludert i C++ API. Rettet mange byggeproblemer i sjeldne og eksotiske konfigurasjoner. En fullstendig liste over alle vesentlige forbedringer er tilgjengelig i ChangeLog.
  • Totalt ble det gjort 185 endringer i 89 filer, ≈3300 linjer ble lagt til, ≈4100 ble slettet. Flere ble fjernet hovedsakelig på grunn av rensing av allerede ubrukelige teknologifiler knyttet til GitHub og avhengige tjenester.

Historisk sett er libmdbx en dyp omarbeiding av LMDB DBMS og er overlegen sin forfedre når det gjelder pålitelighet, funksjonssett og ytelse. Sammenlignet med LMDB legger libmdbx mye vekt på kodekvalitet, API-stabilitet, testing og automatiserte kontroller. Et verktøy for å sjekke integriteten til databasestrukturen med noen gjenopprettingsfunksjoner er levert.

Teknologimessig tilbyr libmdbx ACID, sterk endringsserialisering og ikke-blokkerende lesninger med lineær skalering på tvers av CPU-kjerner. Automatisk komprimering, automatisk administrasjon av databasestørrelser og estimering av rekkeviddespørringer støttes. Siden 2016 har prosjektet blitt finansiert av Positive Technologies og har blitt brukt i produktene siden 2017.

libmdbx tilbyr en utviklet C++ API, samt entusiaststøttede bindinger til språkene Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Kilde: opennet.ru

Legg til en kommentar