De release van libmdbx 0.13.1 (MDBX) is gepubliceerd, waarin een krachtige, compacte, ingebedde sleutelwaardedatabase is geïmplementeerd. De libmdbx-code wordt gedistribueerd onder de Apache 2.0-licentie. Alle huidige besturingssystemen en architecturen worden ondersteund, evenals het Russische Elbrus 2000. libmdbx biedt een ontwikkelde API voor C++, evenals door liefhebbers ondersteunde bindingen naar de talen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim , Deno, Scala.
Historisch gezien is limbdbx een diepgaande herwerking van het LMDB DBMS en is het superieur aan zijn voorloper wat betreft betrouwbaarheid, functieset en prestaties. Vergeleken met LMDB legt licmdbx veel nadruk op codekwaliteit, API-stabiliteit, testen en geautomatiseerde controles. Er wordt een hulpprogramma meegeleverd voor het controleren van de integriteit van de databasestructuur met enkele herstelmogelijkheden. Technologisch gezien biedt limbdbx ACID, sterke serialisatie van wijzigingen en niet-blokkerende leesbewerkingen met lineaire schaling over CPU-kernen. Automatische compactificatie, automatisch beheer van de databasegrootte en schatting van bereikquery's worden ondersteund.
Grote veranderingen:
- Wijziging van de codelicentie van OpenLDAP Public License naar Apache 2.0.
- Uitgebreide cursor-API met handigere en duidelijkere positioneringsbewerkingen, vergelijkbaar met <, <=, ==, >=, >-voorwaarden voor zowel sleutels als sleutel-waardeparen. De functies mdbx_cursor_unbind() en mdbx_txn_release_all_cursors() zijn toegevoegd voor flexibel cursorbeheer in hergebruikscenario's om de overhead te verminderen. De functies mdbx_cursor_scan() en mdbx_cursor_scan_from() zijn toegevoegd voor het scannen van tabellen met behulp van een functioneel predicaat en het verminderen van de bijbehorende overhead.
- Vernieuwde cursors zorgen voor uniform gedrag, regelmatigere code en minder vertakkingen en machinebewerkingen.
- De functionaliteit van het hulpprogramma mdbx_chk binnen de bibliotheek overbrengen in de vorm van de functie mdbx_env_chk() om de integriteit van de databasestructuur te controleren, inclusief het betrekken van de toepassingslogica.
- Optie MDBX_opt_gc_time_limit voor flexibelere controle over de tijd die wordt besteed aan het zoeken naar reeksen aangrenzende vrije pagina's in GC.
- Aanzienlijke vermindering van de overhead bij het opstarten van transacties in scenario's met een groot aantal DBI-handles, dankzij uitgestelde/lazy initialisatie van servicetabelelementen. Inclusief een mechanisme voor de ondersteuning van sparse sets DBI-handles, aangestuurd door de buildoptie MDBX_ENABLE_DBI_SPARSE, die standaard is ingeschakeld.
- Vermindering van de overhead voor het openen van DBI-grepen. Inclusief het mechanisme voor vertraagde ontgrendeling en ondersteuning voor een snelle openingsweg zonder gebruik van sloten, aangestuurd door de buildoptie MDBX_ENABLE_DBI_LOCKFREE, die standaard is ingeschakeld.
- Ondersteuning voor het "parkeren" van lezertransacties met hun verplaatsing om oude MVCC-snapshots te recyclen en problemen te voorkomen die worden veroorzaakt door het opschorten van garbage collection. Het mechanisme voor het parkeren en verplaatsen van geparkeerde transacties is zowel een aanvulling als een gebruiksvriendelijker alternatief voor de Handle-Slow-Readers callback. Voor het gemak hebben de functies mdbx_txn_park() en mdbx_txn_unpark() extra argumenten waarmee u automatisch het "uitparkeren" van geparkeerde transacties en het opnieuw starten van verplaatste transacties kunt aanvragen. De bijbehorende opties -d en -p zijn toegevoegd aan het hulpprogramma mdbx_copy.
- Ondersteuning voor het herstellen van een open DB-omgeving in een onderliggend proces na een procesvork/splitsing via mdbx_env_resurrect_after_fork().
- Ondersteuning voor het hernoemen van tabellen via mdbx_dbi_rename() en mdbx_dbi_rename2(). Functie mdbx_enumerate_tables() toegevoegd om informatie over benoemde gebruikerstabellen op te halen.
- MDBX_NOSTICKYTHREADS-modus in plaats van MDBX_NOTLS om de integratie met lichtgewicht threads/threads en hun multiplexing samen met transacties op threads van het besturingssysteem te vereenvoudigen.
- Om de database te identificeren, is een UUID toegevoegd. Deze is beschikbaar in het veld mi_dxbid van de MDBX_envinfo-structuur en kan worden verkregen via mdbx_env_info_ex(). Het is nu mogelijk om informatie over de database te ontvangen zonder deze te openen via mdbx_preopen_snapinfo().
- Ondersteuning voor callback-loggingfuncties zonder vprintf()-functionaliteit, waardoor het veel eenvoudiger is om logging te gebruiken in bindingen met andere programmeertalen.
- De functies mdbx_txn_copy2pathname() en mdbx_txn_copy2fd() toevoegen aan de API.
- Herstructurering van de broncode met refactoring.
- De term "tabel" gebruiken in plaats van "subDb".
- De opties MDBX_COALESCE en MDBX_NOTLS worden als verouderd verklaard. De buildoptie MDBX_USE_VALGRIND wordt vervangen door de algemeen geaccepteerde ENABLE_MEMCHECK.
Bron: opennet.ru
