Andre utgivelseskandidat for libmdbx v1.0 etter fem års utvikling.

Bibliotek libmdbx er en betydelig redesignet etterkommer av LMDB - en ekstremt høyytelses, kompakt innebygd nøkkelverdi-database.
Den nåværende versjonen v0.5 er en teknisk utgivelse, som markerer fullføringen av eventuelle forbedringer og overgangen til den offentlige siste test- og stabiliseringsfasen, med den påfølgende dannelsen av den første fullstendige utgivelsen av biblioteket.

LMDB er en ganske velkjent transaksjonelt innebygd DBMS av nøkkelverdiklassen basert på tre B+ без proaktiv logging, som lar en sverm av flertrådede prosesser fungere konkurransedyktig og ekstremt effektivt med en lokalt delt (ikke nettverk) database. I sin tur er MDBX raskere og mer pålitelig enn LMDB, mens libmdbx beholder alle nøkkelfunksjonene til stamfaderen, som f.eks. ACID og ikke-blokkerende lesing med lineær skalering på tvers av CPU-kjerner, og legger også til noen få nye.

En beskrivelse av forskjellene og forbedringene av libmdbx i forhold til LMDB fortjener en egen artikkel (den er planlagt publisert på Habré og Medium). Her er det på sin plass å nevne det viktigste og mest merkbare:

  • I bunn og grunn er det lagt mer vekt på kodekvalitet, testing og automatiske kontroller.
  • Betydelig mer kontroll under drift, fra parameterkontroll til intern revisjon av databasestrukturer.
  • Automatisk komprimering og automatisk databasestørrelsesadministrasjon.
  • Et enkelt databaseformat for 32-biters og 64-biters sammenstillinger.
  • Estimering av volumet av prøver etter områder (beregning av rekkeviddespørring).
  • Støtte for nøkler som er dobbelt så store som pannekaker og brukervalgbar databasesidestørrelse.

Den frigitte libmdbx-utgivelseskandidaten er resultatet av beslutningen (se nedenfor) om å dele MDBX- og MithrilDB-prosjektene i august 2019. Ved å gjøre dette bestemte libmdbx seg for å eliminere den (rimelige) maksimale tekniske gjelden og stabilisere biblioteket. Faktisk er det utført 2-3 ganger mer arbeid i den angitte retningen enn det som opprinnelig ble estimert og planlagt:

  • Implementert støtte for Mac OS og andre plattformer: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Støtte for AIX og HP -UX kan legges til etter behov.
  • Sanitisert kode med Undefined Behavior Sanitizer og Address Sanitizer, fikset alle byggeadvarsler med -Wpedantic, alle Coverity Static Analyzer-advarsler, etc.
  • Oppdater API-beskrivelser.
  • Sammenslåing av kildekoden for enkel innebygging.
  • CMake støtte.
  • Støtte for nestede transaksjoner.
  • Bruke bootid for å finne ut om operativsystemet har startet på nytt (skitten nedleggelse av databasen).
  • Ende-til-ende-telling av oppdaterte/gamle sider og avansert informasjon om transaksjoner.
  • MDBX_ACCEDE alternativ for å koble til en allerede åpen database i kompatibel modus.
  • Bruk OFD låser etter deres tilgjengelighet.
  • Varm backup i rør.
  • Spesialisert optimert intern sorteringsalgoritme (opptil 2-3 ganger raskere enn qsort() og opptil 30 % raskere enn std::sort()).
  • Økt maksimal nøkkellengde.
  • Automatisk kontroll over lesing fremover (in-memory database file caching strategi).
  • Mer aggressiv og raskere automatisk komprimering.
  • En mer optimal strategi for å slå sammen B+ tresider.
  • Kontroll av ikke-lokale filsystemer (NFS, Samba, etc.) for å forhindre databasekorrupsjon på grunn av misbruk.
  • Utvidet testpakke.

Utvikling av «neste» versjon av libmdbx vil fortsette som et eget prosjekt MithrilDB, mens utviklingsvektoren til den "gjeldende" versjonen av MDBX er rettet mot å fryse funksjonssettet og stabilisere. Denne avgjørelsen ble tatt av tre grunner:

  • Total inkompatibilitet: MithrilDB krever et annet (inkompatibelt) databasefilformat og et annet (inkompatibelt) API for å implementere alle de planlagte funksjonene.
  • Ny kildekode: MithrilDB-kildekoden er lisensuavhengig av LMDB, og selve prosjektet er planlagt publisert under en annen lisens (godkjent av OSI tillatelse Apache 2.0Og ikke OpenLDAP Foundation).
  • Separasjon unngår potensiell forvirring, introduserer mer sikkerhet og sikrer uavhengigheten til utviklingsveien til prosjekter.

MithrilDB, som MDBX, er også basert på tre B+ og vil også være preget av ekstremt høy ytelse, samtidig som den eliminerer en rekke grunnleggende mangler ved MDBX og LMDB. Spesielt vil problemet med "lange lesninger", som manifesterer seg som "hevelse" av databasen på grunn av at søppelbehandling blokkeres av langlesende transaksjoner, elimineres. Nye MithrilDB-funksjoner inkluderer:

  • støtte for å plassere databasen på flere heterogene medier: HDD, SSD og ikke-flyktig minne.
  • optimale strategier for "verdifull" og "lavverdi", for "varm", "varm" og "kald" data.
  • ved å bruke Merkle-treet for å kontrollere integriteten til databasen.
  • valgfri bruk av WAL og betydelig bedre ytelse i skriveintensive scenarier med dataintegritetsgarantier.
  • lat innhenting forplikter seg til disker.

Kilde: linux.org.ru

Legg til en kommentar