Se ha lanzado la biblioteca libmdbx 0.13.6 (MDBX), que implementa una base de datos de clave-valor integrada, compacta y de alto rendimiento. El código libmdbx se distribuye bajo la licencia Apache 2.0. Se admiten todos los sistemas operativos y arquitecturas actuales, así como el ruso Elbrus 2000. Para libmdbx, se ofrece una API avanzada para C++, así como enlaces compatibles con entusiastas para los lenguajes Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala. Los proyectos que utilizan libmdbx incluyen Isar, Erigon y Reth, así como desarrollos de StarkWare y Positive Technologies.
Históricamente, libmdbx es una reelaboración profunda del DBMS LMDB y supera a su antecesor en confiabilidad, conjunto de características y rendimiento. En comparación con LMDB, libmdbx pone mucho énfasis en la calidad del código, la estabilidad de la API, las pruebas y las comprobaciones automatizadas. Se proporciona una utilidad para comprobar la integridad de la estructura de la base de datos con algunas capacidades de recuperación. Tecnológicamente, libmdbx ofrece ACID, serialización sólida de cambios y lecturas sin bloqueo con escalamiento lineal en los núcleos de CPU. Se admiten la compactación automática, la gestión automática del tamaño de la base de datos y la estimación de consultas de rango.
Cambios importantes:
- Cambio de comportamiento: cuando no se puede desvincular un cursor de su transacción actual, mdbx_cursor_bind() ahora devuelve MDBX_EINVAL en lugar de MDBX_BAD_TXN.
- Para evitar posibles problemas, se ha deshabilitado el uso de copy_file_range() en los kernels de Linux 5.3 - 5.18.
- El lanzamiento de std::invalid_argument ahora se realiza con un mensaje MDBX_EINVAL explícito.
- Se corrigió una regresión al usar cursores para DBI=0 (también conocido como GC/FreeDB) en transacciones de lectura.
- Se corrigió la regresión en forma de error EAGAIN al copiar la base de datos a NFS y CIFS/SMB.
- Durante el desarrollo/refinamiento de la API, se agregó la adquisición de bloqueo de archivos a la función de copia a través de fcntl() y flock(). Sin embargo, dependiendo de la versión del kernel local, la versión del servidor NFS remoto y las opciones de montaje, esto podría generar que se devuelva el error POSIX EAGAIN (11 en la mayoría de las plataformas, incluido Linux).
- Se corrigió un error de combinación/rebase dentro de mdbx_txn_release_all_cursors_ex() que podía generar errores MDBX_EBADSIGN inesperados posteriores y pérdidas de memoria.
- Se corrigió la verificación de afirmación en la ruta de finalización de transacción anidada.
- Se corrigió la posibilidad de devolver el error inesperado MDBX_BUSY de mdbx_txn_lock(dont_wait=false).
- Para compatibilidad con GCC 15.x en modo C23, se ha cambiado el orden de especificación de los atributos de función.
Fuente: opennet.ru