De release van de libmdbx bibliotheek 0.13.2 (MDBX) is gepubliceerd, met een implementatie van een zeer presterende compacte ingebedde key-value database. De code van libmdbx wordt verspreid onder de Apache 2.0-licentie. Alle actuele besturingssystemen en architecturen worden ondersteund, evenals de Russische Elbrus 2000. Voor libmdbx wordt een uitgebreide API voor C++ aangeboden, evenals door enthousiastelingen ondersteunde bindings 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:
- De GC-update is versneld bij het teruggeven/plaatsen van pagina-lijsten in complexe scenario's. Een eerder uitgeschakelde experimentele modus voor corrigerende feedback is verbeterd en geactiveerd. Dit heeft de convergentie wezenlijk verbeterd (het aantal herhalingen is verminderd) en ook een defect opgelost dat leidde tot 'vastlopen' bij het vastleggen van transacties (met een terugkerende foutmelding MDBX_PROBLEM) onder zeldzame specifieke omstandigheden.
- De standaard C23 is opgenomen in de CMake-buildscripts.
- T-macros voor paren van functies char/wchar_t zijn toegevoegd.
- Ondersteuning voor geneste schrijfacties is toegevoegd aan de C++ API.
- De overstap naar de tweede editie van de specificatie semantisch versioneren ('Semantic Versioning 2') is uitgevoerd en de export van versie-informatie naar VERSION.json is gewaarborgd.
- Voor de reproduceerbaarheid van builds is ondersteuning voor de omgevingsvariabele SOURCE_DATE_EPOCH toegevoegd. De ondersteuning voor MDBX_BUILD_TIMESTAMP is behouden en deze variabele heeft voorrang.
- De mogelijkheid om aanvullende informatie over de libmdbx-build op te geven via de optie MDBX_BUILD_METADATA is toegevoegd. De opgegeven informatie wordt nu eenvoudig binnen de bibliotheek opgenomen als de waarde mdbx_build.metadata, en zal in de toekomst ook worden gebruikt bij het samenstellen van pakketten, enz.
- Foutlogging vanuit de API is toegevoegd. Nu is het voldoende om het logging-niveau MDBX_LOG_DEBUG in te stellen (voor logging van fouten exclusief MDBX_NOTFOUND) of MDBX_LOG_TRACE (voor logging van alle fouten, inclusief MDBX_RESULT_TRUE).
- Verandering in gedrag:
- De methode mdbx::cursor::get_multiple_samelength() is toegevoegd en mdbx::txn::put_multiple_samelength() is hernoemd.
- Voor de consistentie van de C++ API wordt nu bij de uitvoering van de operatie MDBX_GET_MULTIPLE ook de waarde van de sleutel zelf geretourneerd.
- Voor de maatconstanten mdbx::env::geometry is het basis type gewijzigd van ongetekend size_t naar getekend intptr_t.
- De keuze voor het gebruik van ntdll in plaats van CRT wordt nu alleen gemaakt als de C++ API expliciet wordt uitgeschakeld.
- Het is voorzien in het vrijgeven van geheugen van afgebroken/read transacties die worden doorgegeven aan mdbx_txn_commit(). De API-overeenkomst vereist dat dergelijke transacties worden vrijgegeven via mdbx_txn_abort(), waardoor de functie mdbx_txn_commit() een fout retourneert in dergelijke gevallen, zonder de transacties zelf te vernietigen. Dit leidde tot geheugentekorten als gevolg van fouten in applicaties, wat de noodzaak voor verandering in het gedrag opwekte.
- Gebruik van de macro __deprecated_enum, indien gedefinieerd.
- Bij het bouwen via CMake wordt de taalstandaard C nu geselecteerd met inachtneming van CMAKE_C_STANDARD.
Bron: opennet.ru
