Lanzamiento del sistema de gestión de bases de datos embebido de alto rendimiento libmdbx 0.10.

Después de tres meses de desarrollo, se lanzó la biblioteca libmdbx 0.10.0 (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. libmdbx es una reestructuración considerable del sistema de gestión de bases de datos LMDB y, según afirman los desarrolladores, supera a su predecesor en fiabilidad, funcionalidad y rendimiento. Se afirma que libmdbx es hasta un 20% más rápido que LMDB en escenarios CRUD y hasta un 30% más rápido si se desactiva el control interno en la compilación de libmdbx, lo que lo hace equivalente al nivel de LMDB.

Libmdbx ofrece ACID, serialización estricta de los cambios y lectura no bloqueante con escalamiento lineal en los núcleos de la CPU. 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 soporta la autocompactación, la gestión automática del tamaño de la base de datos, un formato único de base de datos para compilaciones de 32 y 64 bits, y la estimación del volumen de muestras por rangos (range query estimation). Se suministra una herramienta de verificación de integridad de la estructura de la base de datos con algunas capacidades de recuperación. Desde 2016, el proyecto es financiado por Positive Technologies y desde 2017 se utiliza en sus productos, y las sanciones impuestas por el gobierno de EE. UU. contra Positive Technologies no tienen un impacto notable.

Principales novedades, mejoras y correcciones añadidas desde la última versión:

  • Están disponibles bindings para Ruby de Mahlon E. Smith y una versión de prueba de bindings para Python de Noel Kuntze, se han actualizado los bindings para GoLang de Alexey Sharov.
  • Para el modo «MDBX_WRITEMAP», cuando los datos de la base de datos se modifican directamente en la memoria RAM, se ha implementado un «volcado transparente» de las páginas modificadas de la base de datos en disco. Ahora, después de cada operación, estas páginas están completamente listas para ser escritas en disco de inmediato y el núcleo del sistema operativo puede volcar las páginas modificadas en disco por sí mismo, y la confirmación de la transacción no requerirá su modificación. Como resultado, en escenarios cargados con falta de memoria RAM, el volumen de operaciones en disco puede reducirse hasta en un 50%.
  • Se ha implementado la eliminación de instantáneas de páginas modificadas que no han sido utilizadas durante mucho tiempo, priorizando la eliminación de páginas con valores grandes/largos, que en la mayoría de los escenarios solo se modifican una vez por transacción. Como resultado, se reduce la cantidad de intercambio con el disco y se aumenta el rendimiento en escenarios con transacciones muy grandes.
  • Se ha implementado un modo "inteligente" de división de páginas al insertar claves. Ahora, al insertar secuencias ordenadas, se garantiza automáticamente el llenado completo de las páginas, y en otros casos, se logra un mejor equilibrio del árbol. Como consecuencia, en promedio, las páginas de la base de datos se llenan de manera más óptima y el B-árbol resulta más equilibrado, lo que impacta positivamente en el rendimiento.
  • Se ha añadido estadística de operaciones con páginas, lo que permite evaluar con precisión el costo de las operaciones modificadoras de la base de datos.
  • Se han corregido más de diez fallos y errores, incluyendo: problemas resolvibles con MinGW, uso de `std::filesystem::path` en iOS <= 13.0, compilación orientada a versiones antiguas de Windows, etc.
  • En total, se han realizado más de 200 cambios en 66 archivos, se han añadido ~6500 líneas y se han eliminado ~4500.

Cabe destacar la elección del proyecto Turbo-Geth (un fork turbo de Go-Ethereum) de libmdbx como nuevo backend de almacenamiento, así como agradecer al equipo del proyecto (especialmente a Alexey Sharov, Artem Vorotnikov y Alexey Akhunov) por la gran ayuda en las pruebas en escenarios de uso extremos. En particular, así se descubrió y resolvió un defecto en la gestión de lectura anticipada/caché que causaba degradación del rendimiento en escenarios difíciles de reproducir con grandes bases de datos.

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