Andra utgivningskandidat för libmdbx v1.0 efter fem års utveckling.

Bibliotek libmdbx är en väsentligt omdesignad ättling till LMDB - en extremt högpresterande, kompakt inbäddad nyckel-värdesdatabas.
Den nuvarande versionen v0.5 är en teknisk utgåva, markerar slutförandet av eventuella förbättringar och övergången till fasen av offentlig slutlig testning och stabilisering, med den efterföljande bildandet av den första fullständiga utgåvan av biblioteket.

LMDB är en ganska välkänd transaktionell inbäddad nyckel-värde DBMS baserad på träd B+ без proaktiv loggning, vilket gör att en svärm av flertrådade processer kan arbeta konkurrenskraftigt och extremt effektivt med en lokalt delad (inte nätverk) databas. I sin tur är MDBX snabbare och mer pålitlig än LMDB, medan libmdbx behåller alla nyckelfunktioner från sin förfader, som t.ex. SYRA och icke-blockerande läsningar med linjär skalning över CPU-kärnor, och lägger även till flera nya.

En beskrivning av skillnaderna och förbättringarna av libmdbx i förhållande till LMDB förtjänar en separat artikel (planerad att publiceras på Habré och Medium). Här är det lämpligt att nämna det viktigaste och mest märkbara:

  • I grund och botten ägnas mer uppmärksamhet åt kodkvalitet, testning och automatiska kontroller.
  • Betydligt mer kontroll under drift, från kontroll av parametrar till internrevision av databasstrukturer.
  • Automatisk komprimering och automatisk databasstorlekshantering.
  • Ett enda databasformat för 32-bitars och 64-bitars sammanställningar.
  • Uppskattning av urvalsstorlek efter intervall (uppskattning av intervallfråga).
  • Stöd för nycklar dubbelt så stora som pannkakor och användarvalbar databas sidstorlek.

Frigivningskandidaten för libmdbx är resultatet av beslutet (se nedan) att separera MDBX- och MithrilDB-projekten i augusti 2019. Samtidigt beslutade libmdbx att eliminera den (rationella) maximala tekniska skulden och stabilisera biblioteket. Faktum är att 2-3 gånger mer har gjorts i den angivna riktningen än vad som ursprungligen beräknades och planerades:

  • Stöd för Mac OS och andra plattformar har implementerats: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. AIX- och HP-UX-stöd kan läggas till efter behov.
  • Koden sanerades med Undefined Behaviour Sanitizer och Address Sanitizer, alla varningar vid byggnad med -Wpedantic, alla Coverity Static Analyzer-varningar etc. eliminerades.
  • Uppdatering API-beskrivningar.
  • Sammanslagning av källkod för enkel inbäddning.
  • CMake support.
  • Stöd för kapslade transaktioner.
  • Använder bootid för att avgöra om operativsystemet har startat om (stopp för smutsig databas).
  • Änd-to-end räkning av uppdaterade/gamla sidor och utökad transaktionsinformation.
  • Alternativ MDBX_ACCEDE för att ansluta till en redan öppen databas i kompatibelt läge.
  • Använd OFD-blockering när det är tillgängligt.
  • Varm backup i röret.
  • Specialiserad optimerad intern sorteringsalgoritm (upp till 2-3 gånger snabbare än qsort() och upp till 30% snabbare än std::sort()).
  • Den maximala nyckellängden har ökats.
  • Automatisk kontroll av läs framåt (databasfilcachestrategi i minnet).
  • Mer aggressiv och snabbare automatisk komprimering.
  • En mer optimal strategi för att slå samman B+-trädsidor.
  • Kontroll av icke-lokala filsystem (NFS, Samba, etc.) för att förhindra databasskador om de används felaktigt.
  • Uppsättningen av tester har utökats.

Utvecklingen av "nästa" version av libmdbx kommer att fortsätta som ett separat projekt MithrilDB, medan utvecklingsvektorn för den "nuvarande" versionen av MDBX syftar till att frysa funktionsuppsättningen och stabilisera den. Detta beslut fattades av tre skäl:

  • Helt inkompatibelt: MithrilDB kräver ett annat (inkompatibelt) databasfilformat och ett annat (inkompatibelt) API för att implementera alla planerade funktioner.
  • Ny källkod: MithrilDB-källkoden har gjorts licensierad oberoende av LMDB, och själva projektet är planerat att publiceras under en annan licens (godkänd av ELLER OM licens Apache 2.0Och inte OpenLDAP Foundation).
  • Separationen undviker potentiell förvirring, ger mer säkerhet och säkerställer att projekt har en oberoende väg framåt.

MithrilDB, liksom MDBX, är också baserad på träd B+ och kommer också att ha extremt hög prestanda, samtidigt som ett antal grundläggande nackdelar med MDBX och LMDB elimineras. I synnerhet kommer problemet med "långa läsningar", som visar sig som "svällning" av databasen på grund av att skräpbearbetning blockeras av långa läsningstransaktioner, att elimineras. Nya MithrilDB-funktioner inkluderar:

  • stöd för att placera databasen på flera heterogena medier: HDD, SSD och icke-flyktigt minne.
  • optimala strategier för "värdefull" och "lågt värde", för "het", "varm" och "kall" data.
  • använder Merkle tree för att övervaka databasens integritet.
  • valfri användning av WAL och betydligt högre prestanda i skrivintensiva scenarier och dataintegritetsgarantier.
  • Lat catch-up fixering av data på diskar.

Källa: linux.org.ru

Lägg en kommentar