Release av DBMS libmdbx 0.11.7. Flytta utvecklingen till GitFlic efter lockdown på GitHub

Biblioteket libmdbx 0.11.7 (MDBX) har släppts med implementeringen av en högpresterande kompakt inbäddad nyckel-värdesdatabas. Libmdbx-koden distribueras under OpenLDAP Public License. Alla nuvarande operativsystem och arkitekturer stöds, liksom ryska Elbrus 2000.

Utgåvan är anmärkningsvärd för migreringen av projektet till GitFlic-tjänsten efter att GitHub-administrationen tog bort libmdbx tillsammans med en mängd andra projekt den 15 april 2022 utan någon varning eller förklaring, samtidigt som den blockerade åtkomst till många utvecklare associerade med företag som föll. under amerikanska sanktioner. Ur användarens synvinkel förvandlades alla sidor, arkiv och gafflar i projektet plötsligt till en "404"-sida, utan möjlighet till någon kommunikation och att ta reda på orsakerna.

Tyvärr har nästan alla frågor gått förlorade, där det fanns många frågor med utförliga svar, samt en hel del diskussioner. Förlusten av denna information är den enda objektiva skada som GitHub-administrationen lyckades tillfoga projektet. Delkopior av diskussionerna finns kvar i arkivet archive.org.

Förlusten av inbyggda CI-skript och infrastruktur (tillgänglig för OpenSource-projekt gratis) tvingade oss att revidera, sammanföra och eliminera en liten teknisk skuld. Nu har CI återställts i nästan samma utsträckning, med undantag för builds och testkörningar för alla BSD- och Solaris-varianter. Talande nog, efter GitHubs agerande har inga förtydliganden eller aviseringar mottagits, förutom en påminnelse om betalningsbehov och försök att skriva av pengar.

Sedan de senaste nyheterna om lanseringen av libmdbx v0.11.3, förutom att återställa från GitHub-åtgärder, är följande förbättringar och korrigeringar värda att notera:

  • Lade till en lösning för en upptäckt inkoherenseffekt/defekt i den kombinerade sidan och buffertcachen i Linux-kärnan. På system där sid- och buffertcachen verkligen är förenade är det ingen mening för kärnan att slösa minne på två kopior av data när man skriver till en redan minnesmappad fil. Därför blir data som skrivs synlig via minnesmapping innan write()-systemanropet slutförs, även om data ännu inte har skrivits till disk.

    Sammantaget är annat beteende inte rationellt, för med en fördröjd sammanslagning måste du fortfarande ta tag i lås för sidlistor, kopiera data eller justera PTE. Därför har den outtalade regeln om koherens varit i kraft sedan 1989, när den förenade buffertcachen dök upp i SRV4. Därför krävde det mycket arbete att hitta konstiga fel i upptagna libmdbx-produktionsscenarier. Först genom att reproducera problemet, sedan genom att verifiera hypoteser och kontrollera förbättringar.

    Nu kan vi med tillförsikt säga att problemet på ett tillförlitligt sätt har identifierats, lokaliserats och tillförlitligt eliminerats, trots komplexiteten och specificiteten i uppspelningsscenariot. Dessutom bekräftades arbetet med bypass-mekanismen av en av utvecklarna av Erigon (Ethereum), i hans fall, på felsökningsbygget, utlöstes skyddet som en regression på grund av en extra påståendekontroll.

    Det bör noteras att i samband med den utbredda användningen av libmdbx i fungerande projekt, är det i grunden viktigare att säkerställa tillförlitlig drift, snarare än att ta reda på "är detta en bugg eller en funktion" och om man kan lita på sådan koherens, speciellt att inte hitta orsakerna till inkoherens i Linux-kärnan. Därför pratar vi här om att åtgärda ett problem som kan påverka användare.

  • Fixade en regression av EXDEV-felet (Cross-device link) vid hotkopiering av en databas utan komprimering till ett annat filsystem, både via API:et och med hjälp av verktyget mdbx_copy.
  • Kris Zyp har implementerat stöd för libmdbx i Deno. Kai Wetlesen har paketerat RPM för Fedora. David Bouyssié implementerade bindningar för Scala.
  • Fast bearbetning av värdet som ställts in av alternativet MDBX_opt_rp_augment_limit vid bearbetning av enorma transaktioner i stora databaser. Tidigare, på grund av en bugg, kunde onödiga åtgärder utföras, vilket ibland påverkade prestandan i Ethereum-implementeringar (Erigon/Akula/Silkworm) och Binance Chain-projekt.
  • Många buggar har åtgärdats, inklusive de i C++ API. Fixade många byggproblem i sällsynta och exotiska konfigurationer. En komplett lista över alla betydande förbättringar finns i ChangeLog.
  • Totalt gjordes 185 ändringar i 89 filer, ≈3300 rader lades till, ≈4100 raderades. Borttagen mer mestadels på grund av rensning av redan värdelösa tekniska filer associerade med GitHub och beroende tjänster.

Historiskt sett är libmdbx en djup omdesign av LMDB DBMS och överträffar dess stamfader när det gäller tillförlitlighet, funktionsuppsättning och prestanda. Jämfört med LMDB lägger libmdbx stor vikt vid kodkvalitet, API-stabilitet, testning och automatiserade kontroller. Ett verktyg för att kontrollera databasstrukturens integritet levereras med några återställningsalternativ.

Teknologiskt erbjuder libmdbx ACID, strikt serialisering av ändringar och icke-blockerande läsningar med linjär skalning över CPU-kärnor. Autokomprimering, automatisk databasstorlekshantering och uppskattning av intervallfrågor stöds. Sedan 2016 har projektet finansierats av Positive Technologies och har använts i dess produkter sedan 2017.

libmdbx erbjuder ett utvecklat C++ API, såväl som entusiaststödda bindningar till Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Källa: opennet.ru

Lägg en kommentar