Se lanzó la biblioteca libmdbx 0.11.3 (MDBX) con la implementación de una base de datos embebida, compacta y de alto rendimiento de tipo clave-valor. El código de libmdbx se distribuye bajo la licencia OpenLDAP Public License. Se admiten todos los sistemas operativos y arquitecturas actuales, así como el Elbrus 2000 de Rusia. A finales de 2021, libmdbx se utiliza como backend de almacenamiento en los dos clientes de Ethereum más rápidos: Erigon y el nuevo "Tiburón", que según la información disponible es el cliente de Ethereum de más alto rendimiento.
Históricamente, libmdbx es una profunda reestructuración de la base de datos LMDB y supera a su predecesor en 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, la estabilidad 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.
Tecnológicamente, libmdbx ofrece ACID, estricta serialización de cambios y lectura no bloqueante con escalabilidad lineal en 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.
Se ofrece una API en C++ para libmdbx, así como enlaces mantenidos por entusiastas a los lenguajes Rust, Haskell, Python, NodeJS, Ruby, Go y Nim.
Principales novedades, mejoras y correcciones añadidas desde la anterior noticia del 11 de octubre:
- La API en C++ se considera lista para su uso.
- Se ha acelerado significativamente la actualización de datos de GC al fijar grandes transacciones, lo que es especialmente relevante al utilizar libmdbx en el ecosistema Ethereum.
- Se ha cambiado la firma interna del formato de la base de datos para soportar la actualización automática, que es completamente transparente para los usuarios. Esto permite eliminar falsos positivos sobre daños en la base de datos, cuando versiones obsoletas de la biblioteca se utilizan para leer transacciones fijadas por versiones actuales.
- Se añadieron las funciones mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() y mdbx_env_get_syncbytes(). Se añadió soporte para la operación MDBX_SET_UPPERBOUND.
- Se eliminaron todas las advertencias al compilar con todos los compiladores soportados en los modos C++ 11/14/17/20. Se ha garantizado compatibilidad con compiladores obsoletos: clang a partir de 3.9, gcc a partir de 4.8, incluyendo la compilación a través de sdevtoolset-9 para CentOS/RHEL 7.
- Se eliminó la posibilidad de conflicto de páginas meta después de un cambio manual a una página meta específica mediante la utilidad mdbx_chk.
- Se corrigió el retorno de un error inesperado MDBX_PROBLEM al sobrescribir páginas meta obsoletas.
- Se corrigió el retorno MDBX_NOTFOUND en caso de coincidencia inexacta al procesar la solicitud MDBX_GET_BOTH.
- Se solucionó un error de compilación en Linux por la falta de archivos de encabezado con descripciones de interfaces del núcleo.
- Se corrigió una colisión entre la bandera interna MDBX_SHRINK_ALLOWED y la opción MDBX_ACCEDE.
- Se eliminaron varias comprobaciones de aserción innecesarias.
- Se corrigió el retorno inesperado MDBX_RESULT_TRUE de la función mdbx_env_set_option().
- Se realizaron más de 90 cambios en 25 archivos, se añadieron alrededor de 1300 líneas y se eliminaron aproximadamente 600.
Fuente: opennet.ru
