De release van de libmdbx bibliotheek 0.13.6 (MDBX) is gepubliceerd, met de implementatie van een hoogwaardige compacte embedded 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 is er een uitgebreide API beschikbaar voor C++, evenals ondersteunde bindings door enthousiastelingen voor de talen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno en Scala. Projecten die gebruikmaken van libmdbx zijn onder andere Isar, Erigon en Reth, evenals ontwikkelingen van StarkWare en Positive Technologies.
Historisch gezien is libmdbx een grondige herwerking van de LMDB database 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, tests en automatische verificaties. Een tool voor het controleren van de integriteit van de database-structuur wordt meegeleverd met enkele herstelmogelijkheden. Technologisch biedt libmdbx ACID, strikte serialisatie van wijzigingen en niet-blokkerend lezen met lineaire schaalbaarheid over CPU-kernen. Automatische compressie, automatisch beheer van de databasegrootte en het inschatten van queryvolumes op basis van reeksen (range query estimation) worden ondersteund.
Belangrijkste wijzigingen:
- Verandering in gedrag: Wanneer het niet mogelijk is om de cursor los te koppelen van zijn huidige transactie, retourneert de functie mdbx_cursor_bind() nu MDBX_EINVAL in plaats van MDBX_BAD_TXN.
- Om potentiƫle problemen te voorkomen, is het gebruik van copy_file_range() uitgeschakeld op Linux-kernels 5.3 - 5.18.
- De throw std::invalid_argument wordt nu uitgevoerd met een expliciete boodschap MDBX_EINVAL.
- Een regressie is verholpen bij het gebruik van cursors voor DBI=0 (ook wel GC/FreeDB genoemd) in leestransacties.
- Een regressie in de vorm van de fout EAGAIN bij het kopiƫren van de database naar NFS en CIFS/SMB is verholpen.
- Bij de ontwikkelingen van de API is in de kopieerfunctie ondersteuning voor bestandsvergrendelingen toegevoegd via zowel fcntl() als flock(). Echter, afhankelijk van de versie van de lokale kernel, de versie van de externe NFS en de mountopties, kan dit leiden tot het retourneren van de POSIX-fout EAGAIN (11 op de meeste platforms, inclusief Linux). de server De fout merge/rebase binnen mdbx_txn_release_all_cursors_ex() is verholpen, wat kon leiden tot daaropvolgende onverwachte fouten MDBX_EBADSIGN en geheugenlekken.
- De assert-controle in het pad van geneste transacties is verholpen.
- De mogelijkheid om onverwachte fout MDBX_BUSY te retourneren vanuit mdbx_txn_lock(dont_wait=false) is verholpen.
- Voor compatibiliteit met GCC 15.x in C23-modus is de volgorde van functiekenmerken gewijzigd.
- De release van de libmdbx bibliotheek 0.13.6 (MDBX) is gepubliceerd, met de implementatie van een hoogwaardige compacte embedded key-value database. De code van libmdbx wordt verspreid onder de Apache 2.0-licentie.
Bron: opennet.ru
