Se dio a conocer la liberación de la versión 0.10.4 las bibliotecas «libmdbx» en la cual en total, se realizaron más de 160 cambios en 57 archivos, se agregaron ~ 5000 líneas y ~ 2500 se eliminaron. Para quienes desconocen de libmdbx, deben saber que este es un conjunto de bibliotecas las cuales son una implementación de una base de datos integrada compacta de alto rendimiento de la clase de clave-valor.
Históricamente, libmdbx es una reelaboración profunda del DBMS de LMDB y supera a su predecesor 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 verificar la integridad de la estructura de la base de datos con algunas opciones de recuperación.
Tecnológicamente, libmdbx ofrece ACID, serialización de cambios estrictos y lecturas sin bloqueo con escalado lineal en los núcleos de la CPU. Admite la compactación automática, el control automático del tamaño de la base de datos y la estimación de consultas de rango. Desde 2016, los proyectos han sido financiados por Positive Technologies y se han utilizado en sus productos desde 2017 .
Para libmdbx, se ofrece una API de C++, así como enlaces compatibles con los entusiastas de Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. Para libfpta, solo la descripción de la API en forma de archivo de encabezado C / C ++ está disponible públicamente .
Además de que admite Linux, Windows, MacOS, Android, iOS, FreeBSD, DragonFly, Solaris, OpenSolaris, OpenIndiana, NetBSD, OpenBSD y otros sistemas compatibles con POSIX.1-2008 .
Principales novedades de libmdbx 0.10.4
En esta nueva versión de libmdbx 0.10.4 los desarrolladores trabajaron para poder proporcionar la capacidad de compilaciones reproducibles, además de que se han mejorado las pruebas y se han ampliado los scripts de prueba para comprobar todos los estados no isomórficos alcanzables del árbol de páginas y el contenido de GC dentro de la base de datos.
En la API de C++ corregida una vez «noexcept», se agregó la sobrecarga adicional para el método «cursor::erase()», la implementación de los búferes se alivia mediante el uso de «std::string» para garantizar la alineación (actual para CLANG libstdc ++)
Además, también se destaca que se llevó a cabo una verificación por fases con la adición de una serie de verificaciones para garantizar la estabilidad en caso de daño deliberado a la base de datos.
Por otra parte, se destaca que la búsqueda de los componentes del compilador necesarios para LTO (optimización del tiempo de enlace) se ha mejorado en los scripts de CMake, además de que el número máximo de lectores simultáneos se ha aumentado a 32.767 y tambien se ha mejorado el rendimiento al usar Valgrind y AddressSanitizer.
En cuanto a las correcciones de errores que se realizaron en esta nueva versión, se mencionan las siguientes:
- Se corrigió un error por el cual, en muy raras circunstancias, se podía producir un bucle / bloqueo durante la confirmación de una transacción. El problema fue identificado por especialistas de Positive Technologies durante las pruebas internas de sus propios productos.
- Se corrigió la regresión en el algoritmo de derrame de páginas sucias (desalojo selectivo de páginas de base de datos modificadas) que se manifestaba en un raro error inesperado MDBX_PROBLEM al cambiar datos en transacciones grandes.
- Se corrigieron problemas menores de UndefinedBehaviorSanitizer y Coverity Scan.
Se corrigió la comprobación de la bandera interna obsoleta y no utilizada «P_DIRTY» en las páginas anidadas dentro de las imágenes de la base de datos creadas por versiones antiguas de la biblioteca. - Se corrigió el uso recursivo de SRW-lock en Windows cuando se trabaja en modo MDBX_NOTLS (sin usar el almacenamiento local de subprocesos), se corrigió la generación de bootid en caso de cambio de hora del sistema, se mejoró la detección de WSL1 y WSL2, se agregó la capacidad de abrir una base de datos Plan 9 montada usando DrvFS.
Finalmente si estás interesado en poder conocer más al respecto sobre esta nueva versión, puedes consultar los detalles en el siguiente enlace.