Lanzamiento de DBMS libmdbx 0.11.7. Mueva el desarrollo a GitFlic después del bloqueo en GitHub

La biblioteca libmdbx 0.11.7 (MDBX) se lanzó con la implementación de una base de datos clave-valor incrustada compacta de alto rendimiento. El código libmdbx se distribuye bajo la Licencia Pública OpenLDAP. Se admiten todos los sistemas operativos y arquitecturas actuales, así como el ruso Elbrus 2000.

El lanzamiento se destaca por la migración del proyecto al servicio GitFlic después de que la administración de GitHub eliminó libmdbx junto con una serie de otros proyectos el 15 de abril de 2022 sin ninguna advertencia ni explicación, al mismo tiempo que bloqueaba el acceso a muchos desarrolladores asociados con empresas que cayeron. bajo las sanciones de EE. Desde el punto de vista del usuario, todas las páginas, el repositorio y las bifurcaciones del proyecto se convirtieron repentinamente en una página "404", sin posibilidad de comunicación y sin averiguar los motivos.

Desafortunadamente, casi todos los números se han perdido, en los que había muchas preguntas con respuestas detalladas, así como muchas discusiones. La pérdida de esta información es el único daño objetivo que la administración de GitHub logró infligir al proyecto. Copias parciales de las discusiones permanecen disponibles en el archivo archive.org.

La pérdida de la infraestructura y los scripts de CI incorporados (disponibles para proyectos OpenSource de forma gratuita) nos obligó a realizar una revisión, unificación y eliminación de una pequeña deuda técnica. Ahora CI se ha restaurado casi en la misma medida, con la excepción de compilaciones y ejecuciones de prueba para todas las variantes de BSD y Solaris. De manera reveladora, después de las acciones de GitHub, no se recibieron aclaraciones ni notificaciones, aparte de un recordatorio de la necesidad de pago e intentos de cancelar dinero.

Desde las últimas noticias sobre el lanzamiento de libmdbx v0.11.3, además de la recuperación de las acciones de GitHub, cabe destacar las siguientes mejoras y correcciones:

  • Se agregó una solución para un efecto/defecto de incoherencia detectado en la página combinada y la memoria caché del búfer en el kernel de Linux. En los sistemas en los que las cachés de página y de búfer están realmente unificadas, no tiene sentido que el núcleo desperdicie memoria en dos copias de datos cuando escribe en un archivo ya asignado a la memoria. Por lo tanto, los datos que se escriben se vuelven visibles a través de la asignación de memoria antes de que se complete la llamada al sistema write(), incluso si los datos aún no se han escrito en el disco.

    En total, otro comportamiento no es racional, porque con una fusión retrasada, todavía tiene que obtener bloqueos para listas de páginas, copiar datos o ajustar PTE. Por lo tanto, la regla tácita de coherencia ha estado vigente desde 1989, cuando apareció el caché de búfer unificado en SRV4. Por lo tanto, encontrar fallas extrañas en escenarios de producción ocupados de libmdbx requirió mucho trabajo. Primero, reproduciendo el problema, luego verificando hipótesis y comprobando mejoras.

    Ahora podemos decir con confianza que el problema se identificó, localizó y eliminó de manera confiable, a pesar de la complejidad y la especificidad del escenario de reproducción. Además, el trabajo del mecanismo de derivación fue confirmado por uno de los desarrolladores de Erigon (Ethereum), en su caso, en la compilación de depuración, la protección se activó como una regresión debido a una verificación de afirmación adicional.

    Cabe señalar que en el contexto del uso generalizado de libmdbx en proyectos de trabajo, es fundamentalmente más importante garantizar un funcionamiento confiable y no averiguar si se trata de un error o una característica y si se puede confiar en dicha coherencia. , especialmente sin buscar las causas de la incoherencia dentro del kernel de Linux. Por lo tanto, aquí estamos hablando de solucionar un problema que podría afectar a los usuarios.

  • Se corrigió una regresión del error EXDEV (enlace entre dispositivos) al copiar en caliente una base de datos sin compactar a otro sistema de archivos, tanto a través de la API como con la utilidad mdbx_copy.
  • Kris Zyp ha implementado soporte para libmdbx en Deno. Kai Wetlesen ha empaquetado RPM para Fedora. David Bouyssié implementó enlaces para Scala.
  • Se corrigió el procesamiento del valor establecido por la opción MDBX_opt_rp_augment_limit al procesar grandes transacciones en grandes bases de datos. Anteriormente, debido a un error, se podían realizar acciones innecesarias, lo que a veces afectaba el rendimiento en las implementaciones de Ethereum (Erigon/Akula/Silkworm) y los proyectos de Binance Chain.
  • Se han solucionado muchos errores, incluidos los de la API de C++. Se corrigieron muchos problemas de construcción en configuraciones raras y exóticas. Una lista completa de todas las mejoras significativas está disponible en ChangeLog.
  • Se realizaron un total de 185 cambios en 89 archivos, se agregaron ≈3300 líneas, se eliminaron ≈4100. Se eliminó principalmente debido a la purga de archivos tecnológicos ya inútiles asociados con GitHub y servicios dependientes.

Históricamente, libmdbx es un rediseño profundo de LMDB DBMS y supera a su antecesor en términos de confiabilidad, conjunto de funciones 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 automáticas. 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 estricta de cambios y lecturas sin bloqueo con escalado lineal en los núcleos de la CPU. Se admiten la compactación automática, la gestión automática del tamaño de la base de datos y la estimación de consultas de rango. Desde 2016, el proyecto ha sido financiado por Positive Technologies y se ha utilizado en sus productos desde 2017.

libmdbx ofrece una API C++ desarrollada, así como enlaces respaldados por entusiastas a Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Fuente: opennet.ru

Añadir un comentario