Uitgave van de ingebouwde database libmdbx 0.13

De uitgave van de bibliotheek libmdbx 0.13.1 (MDBX) is gepubliceerd met de implementatie van een krachtige, compacte ingebouwde sleutel-waarde database. De code van libmdbx wordt verspreid onder de Apache 2.0-licentie. Alle huidige besturingssystemen en architecturen worden ondersteund, evenals de Russische Elbrus 2000. Voor libmdbx is er een uitgebreide API voor C++ beschikbaar, evenals ondersteunde bindings door enthousiastelingen voor de talen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Historisch gezien is libmdbx een grondige herwerking van de database LMDB en overtreft het zijn voorganger op het gebied van betrouwbaarheid, mogelijkheden en prestaties. In vergelijking met LMDB wordt er in libmdbx veel aandacht besteed aan de kwaliteit van de code, de stabiele werking van de API, testen en automatische controles. Een tool voor het controleren van de integriteit van de database-structuur wordt geleverd met enkele herstelmogelijkheden. Technologisch biedt libmdbx ACID, strikte serialisatie van wijzigingen en niet-blokkerend lezen met lineaire schaalbaarheid over CPU-kernen. Automatische compactering, automatisch beheer van de grootte van de database en schatting van de hoeveelheid gegevens voor bereikquery's (range query estimation) worden ondersteund.

Belangrijkste wijzigingen:

  • Wijziging van de licentie voor de code van OpenLDAP Public License naar Apache 2.0.
  • Uitbreiding van de API van cursors met handiger en duidelijkere positioneringsoperaties analoog aan de voorwaarden <, =, > voor zowel sleutels als sleutel-waarde paren. Functies mdbx_cursor_unbind() en mdbx_txn_release_all_cursors() zijn toegevoegd voor flexibele beheersing van cursors in scenario's van hergebruik om overhead te verminderen. Functies mdbx_cursor_scan() en mdbx_cursor_scan_from() voor het scannen van tabellen met behulp van een functionele predicate en vermindering van bijbehorende overhead.
  • Herontwerp van cursors voor uniformiteit in gedrag, een meer regelmatige code en vermindering van vertakkingen en machinebewerkingen.
  • Overdracht van functionaliteit van de tool mdbx_chk naar binnen de bibliotheek in de vorm van de functie mdbx_env_chk() voor het controleren van de integriteit van de database-structuur, inclusief het inbrengen van applicatielogica.
  • Optie MDBX_opt_gc_time_limit voor een flexibeler beheer van de tijd die wordt besteed aan het zoeken naar sequenties van aangrenzende vrije pagina's in GC.
  • Significante verlaging van overheadkosten voor het starten van transacties in scenario's met een groot aantal DBI-handles door middel van uitgestelde/lazy initialisatie van elementen in de systeemtabellen. Inclusief een mechanisme voor de ondersteuning van sparsely DBI-handles, beheerd door de compilatie-optie MDBX_ENABLE_DBI_SPARSE, die standaard is ingeschakeld.
  • Verlaging van de overheadkosten voor het openen van DBI-handles. Inclusief een mechanisme voor uitgestelde vrijgave en ondersteuning van een snelle openingsroute zonder gebruik van vergrendelingen, beheerd door de compilatie-optie MDBX_ENABLE_DBI_LOCKFREE, die standaard is ingeschakeld.
  • Ondersteuning voor het 'parkeren' van lezingstransacties met hun verdringing ten behoeve van het opnieuw verwerken van oude MVCC-snapshots en het voorkomen van problemen die voortkomen uit de pauzering van het afvalverwerkingsproces. Het mechanisme voor parkeren en verdringing van geparkeerde transacties is zowel een aanvulling als een eenvoudigere alternatief voor de Handle-Slow-Readers callback. Voor het gemak hebben de functies mdbx_txn_park() en mdbx_txn_unpark() extra argumenten waarmee automatische 'unparking' van geparkeerde en herstarten van verdrongen transacties kan worden aangevraagd. De mdbx_copy utility is uitgebreid met de bijbehorende opties -d en -p.
  • Ondersteuning voor het herstellen van een open database-omgeving in een dochterproces na een fork/splitsing van het proces via mdbx_env_resurrect_after_fork().
  • Ondersteuning voor het hernoemen van tabellen via mdbx_dbi_rename() en mdbx_dbi_rename2(). De functie mdbx_enumerate_tables() is toegevoegd om informatie over genummerde gebruikertabellen te verkrijgen.
  • De modus MDBX_NOSTICKYTHREADS in plaats van MDBX_NOTLS voor het vergemakkelijken van de integratie met lichte threads en hun multiplexing samen met transacties van het operating system.
  • Voor de identificatie van de database is er een UUID toegevoegd die beschikbaar is in het mi_dxbid-veld van de MDBX_envinfo-structuur, verkregen via mdbx_env_info_ex(). Het verkrijgen van informatie over de database zonder deze te openen is gerealiseerd via mdbx_preopen_snapinfo().
  • Ondersteuning voor loggingsfuncties zonder de functionaliteit van vprintf(), wat het gebruik van logging in bindings naar andere programmeertalen aanzienlijk vergemakkelijkt.
  • Toevoegen van API-functies mdbx_txn_copy2pathname() en mdbx_txn_copy2fd().
  • Herverstructurering van de bronscode met refactoring.
  • Gebruik van de term 'tabel' in plaats van 'subDb'.
  • De verouderde opties MDBX_COALESCE en MDBX_NOTLS zijn afgekondigd. De bouwoptie MDBX_USE_VALGRIND is vervangen door de gebruikelijke ENABLE_MEMCHECK.

Bron: opennet.ru

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