Se ha lanzado la biblioteca libmdbx 0.11.7 (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 soportan todos los sistemas operativos y arquitecturas actuales, así como el ruso Elbrus 2000.
La publicación se destaca por la migración del proyecto al servicio GitFlic después de que el 15 de abril de 2022 la administración de GitHub eliminara sin previo aviso libmdbx junto con una gran cantidad de otros proyectos, bloqueando al mismo tiempo el acceso a muchos desarrolladores relacionados con compañías que fueron sancionadas por Estados Unidos. Desde la perspectiva de los usuarios, todas las páginas, el repositorio y los forks del proyecto se transformaron de repente en una página «404», sin posibilidad de comunicación o aclaración de los motivos.
Desafortunadamente, se han perdido casi todos los issues, en los que había muchas preguntas con respuestas detalladas, así como numerosas discusiones. La pérdida de esta información es el único daño objetivo que la administración de GitHub logró infligir al proyecto. Algunas copias de las discusiones siguen disponibles en el archivo archive.org.
La pérdida de los scripts de CI construidos y de la infraestructura (disponible de forma gratuita para proyectos de OpenSource) llevó a revisar, unificar y eliminar una pequeña parte de la deuda técnica. Actualmente, el CI se ha restaurado casi a su volumen anterior, con la excepción de la construcción y las pruebas de ejecución para todas las variantes de BSD y Solaris. Curiosamente, después de las acciones de GitHub no se recibieron aclaraciones ni notificaciones, salvo un recordatorio sobre la necesidad de pago y intentos de retirar dinero.
Desde la última noticia sobre el lanzamiento de libmdbx v0.11.3, además de la recuperación tras las acciones de GitHub, cabe destacar las siguientes mejoras y correcciones:
- Se ha agregado una solución al efecto/defecto de incoherencia detectado en la caché de páginas y búferes combinados en el núcleo de Linux. En los sistemas donde la caché de páginas y búferes está realmente combinada, no tiene sentido que el núcleo use memoria para dos copias de datos al escribir en un archivo que ya está mapeado en memoria. Por lo tanto, los datos escritos se vuelven visibles a través de la visualización en memoria antes de completar la llamada al sistema write(), incluso si los datos aún no se han escrito en el disco.
En resumen, otro comportamiento no es racional, ya que con la fusión diferida, de todos modos, será necesario capturar bloqueos para las listas de páginas, copiar datos o ajustar PTE. Por lo tanto, la regla tácita de coherencia ha estado en vigor desde 1989, cuando en SRV4 apareció el caché de búfer unificado. Por eso, detectar fallos extraños en escenarios de alta carga al usar libmdbx requirió un gran esfuerzo. Primero, para reproducir el problema, luego para verificar hipótesis y probar mejoras.
Ahora se puede afirmar con confianza que el problema ha sido identificada de manera confiable, localizado y solucionado de forma efectiva, a pesar de toda la complejidad y especificidad del escenario de reproducción. Además, el funcionamiento del mecanismo de обход fue confirmado por uno de los desarrolladores de Erigon (Ethereum); en su caso, en una versión de depuración, la activación de la protección se manifestó como un retroceso debido a una verificación de assert innecesaria.
Cabe destacar que en el contexto del amplio uso de libmdbx en proyectos de trabajo, es fundamental asegurar un funcionamiento fiable, más que determinar si es un 'error o una característica' y si se puede confiar en tal coherencia, especialmente no buscar las causas de incoherencia dentro del núcleo de Linux. Por lo tanto, aquí se trata de resolver un problema que podría afectar a los usuarios.
- Se ha eliminado el retroceso que causaba el error EXDEV (Cross-device link) al copiar una base de datos caliente sin compactación a otro sistema de archivos, tanto a través de API como con la utilidad mdbx_copy.
- Kris Zyp implementó soporte para libmdbx en Deno. Kai Wetlesen preparó el empaquetado RPM para Fedora. David Bouyssié implementó enlaces para Scala.
- Se corrigió el manejo del valor establecido por la opción MDBX_opt_rp_augment_limit al procesar grandes transacciones en bases de datos enormes. Anteriormente, debido a un error, se podían realizar acciones innecesarias, lo que a veces afectaba el rendimiento en implementaciones de Ethereum (Erigon/Akula/Silkworm) y proyectos de Binance Chain.
- Se han corregido numerosos defectos, incluidos en la API de C++. Se han solucionado muchos problemas de compilación en configuraciones raras y exóticas. Una lista completa de todas las mejoras significativas está disponible en el ChangeLog.
- En total, se han realizado 185 cambios en 89 archivos, se han añadido aproximadamente 3300 líneas y se han eliminado aproximadamente 4100. Se eliminó más principalmente debido a la limpieza de archivos tecnológicos ya inútiles relacionados con GitHub y servicios dependientes.
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, una estricta serialización de cambios y lectura no bloqueante con escalado lineal en núcleos de CPU. Se admite la autocompactación, la gestión automática del tamaño de la base de datos y la estimación del volumen de consultas por rangos. Desde 2016, el proyecto es financiado por la empresa Positive Technologies y desde 2017 se utiliza en sus productos.
Para libmdbx se ofrece una avanzada API en C++, así como enlaces a lenguajes Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno y Scala, mantenidos por entusiastas.
Fuente: opennet.ru
