Tweede release-kandidaat voor libmdbx v1.0 na vijf jaar ontwikkeling.

bibliotheek libmdbx is een aanzienlijk opnieuw ontworpen afstammeling van LMDB - een extreem krachtige, compacte ingebedde sleutel-waardedatabase.
De huidige versie v0.5 is een technische release en markeert de voltooiing van eventuele verbeteringen en de overgang naar de fase van publieke definitieve testen en stabilisatie, met de daaropvolgende vorming van de eerste volledige release van de bibliotheek.

LMDB is een redelijk bekende transactionele ingebedde sleutelwaarde-DBMS gebaseerd op boom B+ без proactief loggen, waardoor een zwerm multi-threaded processen concurrerend en uiterst efficiënt kan werken met een lokaal gedeelde (geen netwerk) database. Op zijn beurt is MDBX sneller en betrouwbaarder dan LMDB, terwijl limbdbx alle belangrijke kenmerken van zijn voorloper behoudt, zoals ACID en niet-blokkerende lezingen met lineaire schaling over CPU-kernen, en voegt ook verschillende nieuwe toe.

Een beschrijving van de verschillen en verbeteringen van libmdbx ten opzichte van LMDB verdient een apart artikel (gepland voor publicatie op Habré en Medium). Hier is het passend om de belangrijkste en meest opvallende te noemen:

  • Fundamenteel wordt er meer aandacht besteed aan codekwaliteit, testen en automatische controles.
  • Aanzienlijk meer controle tijdens de werking, van het controleren van parameters tot de interne audit van databasestructuren.
  • Auto-compactificatie en automatisch beheer van de databasegrootte.
  • Eén databaseformaat voor 32-bits en 64-bits assemblages.
  • Schatting van de steekproefomvang op basis van bereiken (schatting van bereikquery's).
  • Ondersteuning voor sleutels die twee keer zo groot zijn als pannenkoeken en door de gebruiker te selecteren databasepaginagrootte.

De release candidate van libmdbx is het resultaat van de beslissing (zie hieronder) om de MDBX- en MithrilDB-projecten in augustus 2019 te scheiden. Tegelijkertijd besloot limbdbx de (rationele) maximale technische schuld te elimineren en de bibliotheek te stabiliseren. In feite is er in de aangegeven richting twee tot drie keer meer gedaan dan aanvankelijk werd geschat en gepland:

  • Ondersteuning voor Mac OS en tweedelijnsplatforms is geïmplementeerd: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. AIX- en HP-UX-ondersteuning kan indien nodig worden toegevoegd.
  • De code is opgeschoond met behulp van Undefined Behavior Sanitizer en Address Sanitizer, alle waarschuwingen bij het bouwen met -Wpedantic, alle Coverity Static Analyzer-waarschuwingen, enz. zijn geëlimineerd.
  • Update API-beschrijvingen.
  • Samenvoeging van broncode voor gemakkelijke insluiting.
  • CMake-ondersteuning.
  • Ondersteuning voor geneste transacties.
  • Bootid gebruiken om te bepalen of het besturingssysteem opnieuw is opgestart (vuile databasestop).
  • End-to-end telling van bijgewerkte/oude pagina's en uitgebreide transactie-informatie.
  • Optie MDBX_ACCEDE voor verbinding met een reeds geopende database in compatibele modus.
  • Gebruiken OFD-blokkering wanneer beschikbaar.
  • Hete back-up in pijp.
  • Gespecialiseerd geoptimaliseerd intern sorteeralgoritme (tot 2-3 keer sneller dan qsort() en tot 30% sneller dan std::sort()).
  • De maximale sleutellengte is verhoogd.
  • Automatische controle van vooruitlezen (cachestrategie voor databasebestanden in het geheugen).
  • Agressievere en snellere automatische verdichting.
  • Een meer optimale strategie voor het samenvoegen van B+ boompagina's.
  • Controle van niet-lokale bestandssystemen (NFS, Samba, etc.) om databaseschade te voorkomen bij verkeerd gebruik.
  • Het testpakket is uitgebreid.

De ontwikkeling van de "volgende" versie van libmdbx zal als een apart project worden voortgezet MithrilDB, terwijl de ontwikkelingsvector van de “huidige” versie van MDBX gericht is op het bevriezen en stabiliseren van de functieset. Deze beslissing is genomen om drie redenen:

  • Totaal incompatibel: MithrilDB vereist een ander (incompatibel) databasebestandsformaat en een andere (incompatibele) API om alle geplande functies te implementeren.
  • Nieuwe broncode: De broncode van MithrilDB is onafhankelijk van LMDB gelicentieerd, en het is de bedoeling dat het project zelf onder een andere licentie wordt gepubliceerd (goedgekeurd door OSI licentie Apache 2.0En niet Stichting OpenLDAP).
  • De scheiding voorkomt mogelijke verwarring, biedt meer zekerheid en zorgt ervoor dat projecten een zelfstandig pad voorwaarts hebben.

MithrilDB is, net als MDBX, ook gebaseerd op boom B+ en zal ook extreem hoge prestaties leveren, terwijl een aantal fundamentele nadelen van MDBX en LMDB worden geëlimineerd. In het bijzonder zal het probleem van ‘long reads’ worden geëlimineerd, wat zich manifesteert als ‘opzwellen’ van de database vanwege het feit dat de verwerking van afval wordt geblokkeerd door long reading-transacties. Nieuwe MithrilDB-functies zijn onder meer:

  • ondersteuning voor het plaatsen van de database op verschillende heterogene media: HDD, SSD en niet-vluchtig geheugen.
  • optimale strategieën voor ‘waardevolle’ en ‘lage waarde’, voor ‘warme’, ‘warme’ en ‘koude’ gegevens.
  • Merkle-boom gebruiken om de database-integriteit te bewaken.
  • optioneel gebruik van WAL en aanzienlijk hogere prestaties in schrijfintensieve scenario's en garanties voor gegevensintegriteit.
  • Luie inhaalfixatie van gegevens op schijven.

Bron: linux.org.ru

Voeg een reactie