Se ha lanzado la biblioteca libmdbx 0.10.4 (MDBX) con la implementación de una base de datos integrada de alto rendimiento y compacta de tipo clave-valor, y la biblioteca relacionada libfpta 0.3.9 (FPTA), que implementa una representación tabular de datos sobre MDBX con índices secundarios y compuestos. Ambas bibliotecas se distribuyen bajo licencias aprobadas por OSI. Son compatibles con todos los sistemas operativos y arquitecturas actuales, así como con el Elbrus 2000 de Rusia.
Históricamente, libmdbx es una profunda revisión del sistema de gestión de bases de datos LMDB y supera a su predecesor en fiabilidad, conjunto de características y rendimiento. En comparación con LMDB, libmdbx presta gran atención a la calidad del código, al funcionamiento estable de la API, a las pruebas y a las verificaciones automáticas. Se ofrece una utilidad de verificación de la integridad de la estructura de la base de datos con algunas capacidades de recuperación.
Tecnológicamente, libmdbx ofrece ACID, una estricta serialización de cambios y lecturas no bloqueantes con escalado lineal a través de núcleos de CPU. Soporta autocompactación, gestión automática del tamaño de la base de datos y estimación del volumen de consultas por rangos (range query estimation). Desde 2016, los proyectos son financiados por Positive Technologies y desde 2017 se utilizan en sus productos.
Para libmdbx se ofrece una API en C++, así como enlaces soportados por entusiastas a los lenguajes Rust, Haskell, Python, NodeJS, Ruby, Go y Nim. Para libfpta solo está disponible públicamente la descripción de la API en forma de archivo de encabezado C/C++.
Novedades, mejoras y correcciones añadidas desde la última noticia del 9 de mayo:
- Se ha asegurado la posibilidad de compilaciones reproducibles.
- Se ha solucionado un error que, en circunstancias muy raras, podía causar bucles o bloqueos durante la fijación de transacciones. El problema fue identificado por los especialistas de Positive Technologies durante la prueba interna de sus propios productos.
- Se han mejorado las pruebas y ampliado los escenarios de prueba para verificar todos los estados no isomorfos alcanzables del árbol de páginas y el contenido de GC dentro de la base de datos.
- En la API de C++, se ha corregido un 'noexcept' innecesario, se han añadido sobrecargas adicionales para el método 'cursor::erase()', y la implementación de los búferes se ha deshecho del uso de 'std::string' para asegurar el alineamiento (relevante para CLANG libstdc++).
- Se ha eliminado un retroceso en el algoritmo de expulsión de páginas sucias (expulsión selectiva de páginas de la base de datos modificadas) que se manifestaba con un raro error inesperado MDBX_PROBLEM al modificar datos en grandes transacciones.
- Se realizó una verificación con phases, añadiendo una serie de controles para asegurar la estabilidad en caso de daños intencionados en la base de datos.
- Se han corregido advertencias menores de UndefinedBehaviorSanitizer y problemas de Coverity Scan.
- Se corrigió la verificación de la bandera interna obsoleta y ya no utilizada «P_DIRTY» en páginas anidadas dentro de imágenes de base de datos creadas por versiones antiguas de la biblioteca.
- En los scripts de CMake se mejoró la búsqueda de componentes del compilador necesarios para LTO (optimización en tiempo de enlace).
- El número máximo de lectores simultáneos se ha incrementado a 32767.
- Se ha acelerado el trabajo al utilizar Valgrind y AddressSanitizer.
- En Windows se ha eliminado el uso recursivo de SRW-lock al operar en modo MDBX_NOTLS (sin uso de almacenamiento local de hilos), se corrigió la generación de bootid en caso de cambios en el tiempo del sistema, se mejoró la detección de WSL1 y WSL2, y se añadió la capacidad de abrir bases de datos montadas en Plan 9 a través de DrvFS.
- Se han realizado más de 160 cambios en 57 archivos, se añadieron alrededor de 5000 líneas y se eliminaron aproximadamente 2500.
Me gustaría agradecer especialmente al equipo del proyecto Erigon (ecosistema Ethereum) por su ayuda en las pruebas en escenarios extremos. Es destacable que, en los cinco meses desde el lanzamiento de libmdbx v0.10.0, con un volumen de base de datos de 1-2 Tb en cada instalación de Erigon (que se utiliza en el 7% de los nodos de Ethereum), solo se recibieron tres informes de daños en la base de datos, todos debidos a causas externas y no a errores de software: en dos casos fueron fallos de RAM, y en el tercero, un error de nulificación de datos en una configuración específica del subsistema de almacenamiento utilizando BTRFS.
Fuente: opennet.ru
