De tweede kandidaat voor de libmdbx v1.0 releases na vijf jaar ontwikkeling.

Bibliotheek libmdbx is een aanzienlijk herziene afstammeling van LMDB - een extreem presterende, compacte embedded key-value database.
De huidige versie v0.5 is een technische release die de afronding van ontwikkelingswerkzaamheden markeert en de overgang naar de fase van openbare eindtests en stabilisatie aangeeft, met als gevolg de vorming van de eerste volledige release van de bibliotheek.

LMDB is een vrij bekende transactionele embedded DBMS van het type 'key-value' gebaseerd op B+ boom zonder read-ahead journaling, waardoor een reeks multi-threaded processen concurrerend en uiterst efficiƫnt met een lokaal gedeelde (geen netwerk) database kan werken. MDBX is sneller en betrouwbaarder dan LMDB, terwijl libmdbx alle belangrijke mogelijkheden van zijn voorganger behoudt, zoals ACID en niet-blokkerende lezing met lineaire schaalvergroting per CPU-kern, en voegt ook verschillende nieuwe functies toe.

Een beschrijving van de verschillen en verbeteringen van libmdbx ten opzichte van LMDB verdient een apart artikel (publicatie op 'Habr' en 'Medium' is gepland). Hier is het op zijn plaats om de belangrijkste en opvallendste te noemen:

  • Er wordt principieel meer aandacht besteed aan codekwaliteit, testen en automatische controles.
  • Er is aanzienlijk meer controle tijdens de werking, van parametercontroles tot interne audits van database-structuren.
  • Auto-compaction en automatisch beheer van de databasegrootte.
  • Een uniform databaseformaat voor 32-bit en 64-bit builds.
  • Schatting van steekproefvolumes op basis van bereiken (range query estimation).
  • Ondersteuning van sleutels van twee keer zo grote toegangspagina's en de door de gebruiker gekozen grootte van de databasepagina.

De uitgebracht release-kandidaat van libmdbx is het resultaat van de beslissing (zie verderop) om de projecten MDBX en MithrilDB in augustus 2019 te splitsen. Bij libmdbx is besloten om (rationeel) de maximale technische schuld te elimineren en de bibliotheek te stabiliseren. Er is feitelijk 2-3 keer meer gedaan in die richting dan oorspronkelijk werd ingeschat en gepland:

  • Ondersteuning voor Mac OS en 'second-tier' platforms: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Ondersteuning voor AIX en HP-UX kan indien nodig worden toegevoegd.
  • Code-sanitatie is uitgevoerd met behulp van Undefined Behavior Sanitizer en Address Sanitizer, en alle waarschuwingen bij het bouwen met -Wpedantic, en alle waarschuwingen van Coverity Static Analyzer, enz. zijn verwijderd.
  • Bijwerking van de API-beschrijving.
  • Consolideren van de broncode voor eenvoudig inbedden.
  • Ondersteuning voor CMake.
  • Ondersteuning voor geneste transacties.
  • Gebruik van bootid om de herstart van het besturingssysteem (vuile database stop) te bepalen.
  • Doorlopende telling van bijgewerkte/oude pagina's en uitgebreide informatie over transacties.
  • MDBX_ACCEDE optie voor verbinding met een al geopende database in compatibiliteitsmodus.
  • Gebruik van OFD-vergrendelingen wanneer deze beschikbaar zijn.
  • Hot backup via pipe.
  • Gespecialiseerd geoptimaliseerd algoritme voor interne sortering (tot 2-3 keer sneller dan qsort() en tot 30% sneller dan std::sort()).
  • Maximale sleutel lengte vergroot.
  • Automatisch beheer van read ahead (cache-strategie voor databasebestanden in geheugen).
  • Aggressievere en snellere auto-compactering.
  • Optimale strategie voor het samenvoegen van B+ boom pagina's.
  • Controle van niet-lokale bestandssystemen (NFS, Samba, enz.) om beschadiging van de database bij onjuist gebruik te voorkomen.
  • Testset uitgebreid.

De ontwikkeling van de "volgende" versie van libmdbx zal worden voortgezet in het kader van een apart project MithrilDB, terwijl de ontwikkelingsrichting van de "huidige" versie MDBX gericht is op het bevriezen van de mogelijkheden en stabilisatie. Deze beslissing is genomen om drie redenen:

  • Volledige incompatibiliteit: voor de implementatie van alle geplande functies in MithrilDB is een ander (incompatibel) bestandstype en een andere (incompatibele) API vereist.
  • Nieuwe broncode: de broncode van MithrilDB wordt vergunningonafhankelijk van LMDB vastgesteld, en het project is van plan om onder een andere goedgekeurde licentie gepubliceerd te worden OSI licentie. Apache 2.0, en niet OpenLDAP Foundation).
  • De splitsing voorkomt potentiĆ«le verwarring, voegt duidelijkheid toe en waarborgt onafhankelijkheid in de ontwikkelingsrichting van de projecten.

MithrilDB, net als MDBX, is ook gebaseerd op B+ boom en zal ook uitblinken in hoge prestaties, terwijl het een aantal fundamentele tekortkomingen van MDBX en LMDB elimineert. In het bijzonder zal het probleem van "lange lezingen" worden verholpen, dat zich manifesteert als "opblazen" van de database omdat garbage collection wordt geblokkeerd door lange leestransacties. Onder de nieuwe functies van MithrilDB moet worden opgemerkt:

  • ondersteuning voor het plaatsen van databases op meerdere heterogene media: HDD, SSD en niet-vluchtig geheugen.
  • optimale strategieĆ«n voor "waardevolle" en "minder waardevolle", voor "hete", "warme" en "koude" gegevens.
  • het gebruik van Merkle tree voor database-integriteitscontrole.
  • optioneel gebruik van WAL en aanzienlijk hogere prestaties in scenario's met intensieve schrijfbewerkingen en garanties voor gegevensintegriteit.
  • lazily achterhaalde gegevensopslag op schijven.

Bron: linux.org.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster