Publicatie van de hoogwaardige embedded DBMS libmdbx 0.10

Na drie maanden ontwikkeling is de bibliotheek libmdbx 0.10.0 (MDBX) vrijgegeven, met de implementatie van een krachtige, compacte embedded key-value database. De code van libmdbx wordt verspreid onder de OpenLDAP Public License. libmdbx is een grondige herwerking van de LMDB-database en volgens de ontwikkelaars overtreft het zijn voorganger in betrouwbaarheid, mogelijkheden en prestaties. Er wordt beweerd dat libmdbx tot 20% sneller is dan LMDB in CRUD-scenario's en tot 30% sneller, als bij het bouwen van libmdbx de interne controle wordt uitgeschakeld tot een niveau vergelijkbaar met LMDB.

Libmdbx biedt ACID-compatibiliteit, strikte serialisatie van wijzigingen en niet-blokkerend lezen met lineaire schaling over CPU-kernen. In libmdbx wordt veel aandacht besteed aan de codekwaliteit, de stabiliteit van de API, het testen en automatische controles. Automatische compactering, automatisch beheer van de databasegrootte, een uniform databaseformaat voor 32-bits en 64-bits builds, en schatting van de doorvoergrootte voor bereikqueries (range query estimation) worden ondersteund. Er wordt een hulpmiddel geleverd voor het controleren van de integriteit van de database-structuur met enkele herstelmogelijkheden. Sinds 2016 wordt het project gefinancierd door Positive Technologies en wordt het sinds 2017 in haar producten gebruikt, en de door de Amerikaanse overheid opgelegde sancties tegen Positive Technologies hebben geen merkbare invloed.

Belangrijkste innovaties, verbeteringen en bugfixes die zijn toegevoegd na de laatste release:

  • Bindings voor Ruby zijn beschikbaar van Mahlon E. Smith en er is een proefversie van de bindings voor Python van Noel Kuntze, de bindings voor GoLang van Alexey Sharov zijn bijgewerkt.
  • Voor de ‘MDBX_WRITEMAP’-modus, waarin databasegegevens direct in het RAM worden gewijzigd, is er een ‘transparante flush’ naar de schijf van gewijzigde databasepagina's gerealiseerd. Nu zijn dergelijke pagina's direct na het voltooien van elke bewerking volledig gereed voor schrijven naar de schijf en kan de OS-kernel zelf de gewijzigde pagina's naar de schijf wegschrijven, waardoor het vastleggen van de transactie ze niet hoeft te wijzigen. Hierdoor kan in drukke scenario's met onvoldoende RAM het aantal schijfbewerkingen tot 2 keer worden verminderd.
  • De verwijdering van lang niet gebruikte shadow copies van gewijzigde pagina's is uitgevoerd, met de voorkeur voor het verwijderen van pagina's met grote/lange waarden, die in de overgrote meerderheid van de scenario's slechts één keer per transactie worden gewijzigd. Dit vermindert de schijfuitwisseling en verhoogt de prestaties in scenario's met zeer grote transacties.
  • De 'slimme' paginaverdeling bij het invoegen van sleutels is geïmplementeerd. Nu zorgt het automatisch voor een volledige paginavulling bij het invoegen van geordende reeksen, en in andere gevallen voor een optimalere boombalans. Als gevolg hiervan worden de databasepagina's gemiddeld optimaler gevuld en is de B-boom beter in balans, wat een positieve invloed heeft op de prestaties.
  • Statistieken van paginabewerkingen zijn toegevoegd, waarmee de kosten van de wijzigingsoperaties in de database nauwkeurig kunnen worden beoordeeld.
  • Meer dan een dozijn tekortkomingen en fouten zijn verholpen, waaronder: problemen met het bouwen via MinGW, het gebruik van `std::filesystem::path` in iOS <= 13.0, het bouwen gericht op oudere versies van Windows, enz.
  • In totaal zijn er meer dan 200 wijzigingen aangebracht in 66 bestanden, met ongeveer 6500 nieuwe regels en 4500 verwijderde regels.

Bijzonder vermeldenswaardig is de keuze van het Turbo-Geth-project (turbo-fork van Go-Ethereum) om libmdbx als nieuwe opslagbackend te gebruiken, en een speciale dank aan het projectteam (in het bijzonder Alexey Sharov, Artem Vorotnikov en Alexey Akhunov) voor hun grote hulp bij het testen in extreme gebruiksscenario's. Hierdoor werd een defect in het beheer van voorspellend lezen/caching ontdekt en verholpen, wat leidde tot prestatieverlies in moeilijk reproduceerbare scenario's met grote databases.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster