Se ha publicado la versión de la biblioteca libmdbx 0.13.6 (MDBX) con la implementación de una base de datos embebida compacta de alto rendimiento de tipo clave-valor. El código de libmdbx se distribuye bajo la licencia Apache 2.0. Se admiten todos los sistemas operativos y arquitecturas actuales, así como el Elbrus 2000 ruso. Para libmdbx se ofrece una API avanzada para C++, así como enlaces soportados por entusiastas a los lenguajes Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala. Entre los proyectos que utilizan libmdbx se encuentran Isar, Erigon y Reth, así como desarrollos de las empresas StarkWare y Positive Technologies.
Históricamente, libmdbx es una profunda reescritura de la base de datos LMDB y supera a su predecesora en cuanto a fiabilidad, conjunto de características y rendimiento. En comparación con LMDB, en libmdbx se presta gran atención a la calidad del código, el funcionamiento estable de la API, las pruebas y las verificaciones automáticas. Se proporciona una herramienta de verificación de la integridad de la estructura de la base de datos con algunas capacidades de recuperación. Desde el punto de vista tecnológico, libmdbx ofrece ACID, una estricta serialización de cambios y lectura no bloqueante con escalado lineal en los núcleos de la CPU. También se admite la compactación automática, la gestión automática del tamaño de la base de datos y la estimación de volumen de las consultas por rangos.
Principales cambios:
- Cambio de comportamiento: Cuando no es posible desvincular el cursor de su transacción actual, la función mdbx_cursor_bind() ahora devuelve MDBX_EINVAL en lugar de MDBX_BAD_TXN.
- Para evitar problemas potenciales, se ha deshabilitado el uso de copy_file_range() en núcleos de Linux 5.3 - 5.18.
- Ahora se lanza std::invalid_argument con el mensaje explícito MDBX_EINVAL.
- Se ha eliminado un regresión al utilizar cursores para DBI=0 (también conocido como GC/FreeDB) en transacciones de lectura.
- Se ha solucionado un regresión que provocaba el error EAGAIN al copiar bases de datos en NFS y CIFS/SMB.
- En el desarrollo de la API, en la función de copia se ha añadido la captura de bloqueo de archivos a través de fcntl() y flock(). Sin embargo, dependiendo de la versión del núcleo local, la versión remota servidores NFS y las opciones de montaje, esto podría provocar el retorno del error POSIX EAGAIN (11 en la mayoría de las plataformas, incluyendo Linux).
- Se ha corregido un error de merge/rebase dentro de mdbx_txn_release_all_cursors_ex(), que podía llevar a errores inesperados posteriores MDBX_EBADSIGN y fugas de memoria.
- Se ha corregido la verificación assert en la ruta de finalización de transacciones anidadas.
- Se ha eliminado la posibilidad de retorno del 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 atributos de funciones.
Fuente: opennet.ru
