Publicación de la base de datos embebida libmdbx 0.13.7

Se ha publicado la versión 0.13.7 de la biblioteca libmdbx (MDBX), que implementa una base de datos incrustada compacta y 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 de Rusia. Para libmdbx se ofrece una API avanzada para C++, y también hay enlaces mantenidos por entusiastas para los lenguajes Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno y Scala. Entre los proyectos que utilizan libmdbx se encuentran Isar, Erigon y Reth, así como los 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:

  • Se ha corregido un error crítico en la funcionalidad mdbx_env_resurrect_after_fork() al utilizar semáforos SysV. El error se manifestaba solo después de crear un proceso hijo mediante fork() mientras se ejecutaba una transacción de escritura, lo que provocaba un funcionamiento incorrecto de los semáforos y, posteriormente, diversos errores, incluyendo la corrupción de la base de datos. El problema existió desde la aparición de mdbx_env_resurrect_after_fork() y afectó a macOS, así como a plataformas POSIX al compilar con la opción MDBX_LOCKING=5.
  • Se ha resuelto un problema en la API de copia de bases de datos, que se manifestaba en sistemas POSIX distintos de Linux (principalmente en macOS), así como en algunos casos al ubicar el archivo de destino en un sistema de archivos no local. El problema llevaba a que se devolviera el error EWOULDBLOCK/EAGAIN, que era causado por un defecto/conflicto de bloqueos fcntl(F_SETLK) y flock() en el núcleo del sistema operativo. Se ha revisado el manejo de errores de captura de bloqueos de archivos en la API de copia en sistemas POSIX.
  • Se ha corregido un error que provocaba la devolución inesperada de MDBX_BAD_DBI al iniciar simultáneamente varias transacciones dentro de un mismo proceso tras abrir la base de datos.
  • Se ha corregido un error que provocaba la devolución inesperada de MDBX_DBS_FULL al volver a abrir tablas que ya estaban abiertas y que habían alcanzado el límite de descriptores DBI abiertos.
  • Se ha corregido un error de compilación para la plataforma Android al definir explícitamente _FILE_OFFSET_BITS.
  • Se ha corregido un error en el uso de ENOMEM en lugar de MDBX_ENOMEM. Esto podría romper la compilación en plataformas no-POSIX/Windows, dependiendo de la configuración y/o la versión del SDK.
  • Se han corregido o eliminado varias verificaciones assert incorrectas que provocaban fallos en compilaciones de depuración en situaciones específicas. Principalmente, en el código de las funciones txn_end(), txn_lock() y txn_unlock() tanto en Windows como en POSIX.
  • Se han eliminado advertencias no esenciales de MSVC. Se han desactivado las advertencias C5286 y C5287.
  • Se ha mejorado la lógica para evitar el uso de bloqueos OFD en plataformas POSIX. Ahora, además de EINVAL, se tienen en cuenta códigos de error adicionales (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), lo que permite que la biblioteca compilada funcione en algunos casos en que el núcleo/contenedor/emulador actual no soporta las llamadas al sistema requeridas.
  • Se ha añadido soporte para la opción "—numa " en el marco de pruebas para asignar la prueba estocástica a un nodo NUMA. En el script battery/tmux se ha añadido una distribución explícita entre nodos NUMA, lo que ha aumentado significativamente la eficiencia del testing en máquinas NUMA.
  • Se ha implementado un orden aleatorio para la ejecución de pruebas individuales en el script estocástico.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster