Después de cinco años de desarrollo, se ha publicado la segunda versión candidata a libmdbx 1.0

Disponible para probar el segundo candidato para lanzamientos de biblioteca libmdbx con la implementación de una base de datos clave-valor integrada compacta y de alto rendimiento. La versión actual (0.5) es una versión técnica, marca la finalización de cualquier mejora y la transición a la fase de prueba y estabilización final pública, con la posterior formación de la primera versión completa de la biblioteca. código libmdbx distribuido por licenciado bajo la Licencia Pública OpenLDAP.

La biblioteca MDBX es una bifurcación significativamente revisada de LMDB — DBMS integrado transaccional de la clase “clave-valor” basado en árbol B+ sin registro proactivo, que permite que los procesos multiproceso funcionen de manera competitiva y eficiente con una base de datos compartida localmente (no en red). A su vez, MDBX es más rápido y confiable que LMDB y al mismo tiempo conserva todas las características clave de su antecesor, como ACID y lecturas sin bloqueo con escalado lineal en todos los núcleos de la CPU.

Las diferencias más importantes entre MDBX y LMDB:

  • Básicamente, se presta más atención a la calidad del código, las pruebas y los controles automáticos.
  • Significativamente más control durante la operación, desde la verificación de parámetros hasta la auditoría interna de las estructuras de la base de datos.
  • Autocompactación y gestión automática del tamaño de la base de datos.
  • Un formato de base de datos único para ensamblados de 32 y 64 bits.
  • Estimación de volúmenes de muestra por rangos (estimación de consulta de rango).
  • Soporte para claves dos veces más grandes que pancakes y tamaño de página de base de datos seleccionable por el usuario.

La versión candidata de libmdbx es el resultado de una decisión tomada en agosto de 2019 de separar los proyectos MDBX y MithrilDB. Al mismo tiempo, libmdbx decidió eliminar la deuda técnica máxima (racional) y estabilizar la biblioteca. De hecho, se ha hecho entre 2 y 3 veces más en la dirección designada de lo que se estimó y planificó inicialmente:

  • Se ha implementado soporte para macOS y plataformas de segundo nivel: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Se puede agregar compatibilidad con AIX y HP-UX según sea necesario.
  • El código se desinfectó utilizando Undefined Behavior Sanitizer y Address Sanitizer, se eliminaron todas las advertencias al compilar con "-Wpedantic", todas las advertencias de Coverity Static Analyzer, etc.
  • Actualizar Descripciones de API.
  • Fusión (fusión) del código fuente para facilitar la integración.
  • Soporte CMake.
  • Soporte para transacciones anidadas.
  • Usar bootid para determinar si el sistema operativo se ha reiniciado (detención de base de datos sucia).
  • Recuento de extremo a extremo de páginas actualizadas/antiguas e información de transacciones ampliada.
  • Opción MDBX_ACCEDE para conectarse a una base de datos ya abierta en modo compatible.
  • el uso de bloqueo OFD Cuando esté disponible.
  • Respaldo caliente en la tubería.
  • Algoritmo de clasificación interna optimizado especializado (hasta 2-3 veces más rápido que “qsort()” y hasta un 30% más rápido que “std::sort()”).
  • Se ha aumentado la longitud máxima de la clave.
  • Control automático de lectura anticipada (estrategia de almacenamiento en caché de archivos de base de datos en memoria).
  • Autocompactación más agresiva y rápida.
  • Una estrategia más óptima para fusionar páginas del árbol B+.
  • Control de sistemas de archivos no locales (NFS, Samba, etc.) para evitar daños a la base de datos si se usan incorrectamente.
  • Se ha ampliado el conjunto de pruebas.

El desarrollo de la "próxima" versión de libmdbx continuará como un proyecto separado MithrilDB, mientras que el vector de desarrollo de la versión "actual" de MDBX tiene como objetivo congelar el conjunto de funciones y estabilizarlo. Esta decisión se tomó por tres razones:

  • Totalmente incompatible: MithrilDB requiere un formato de archivo de base de datos diferente (incompatible) y una API diferente (incompatible) para implementar todas las funciones planificadas.
  • Nuevo código fuente: El código fuente de MithrilDB tiene una licencia independiente de LMDB, y se planea publicar el proyecto en sí bajo una licencia diferente (aprobada por OSI Licencia Apache 2.0, no Licencia pública OpenLDAP).
  • La separación evita posibles confusiones, introduce más certeza y garantiza un camino independiente para los proyectos.

MithrilDB, como MDBX, también se basa en árbol B+ y también contará con un rendimiento extremadamente alto, al tiempo que eliminará una serie de desventajas fundamentales de MDBX y LMDB. En particular, se eliminará el problema de las "lecturas largas", que se manifiesta como un "hinchazón" de la base de datos debido al hecho de que el procesamiento de basura está bloqueado por transacciones de lectura largas. Las nuevas características de MithrilDB incluyen:

  • Soporte para colocar la base de datos en varios medios heterogéneos: HDD, SSD y memoria no volátil.
  • Estrategias óptimas para datos “valiosos” y “de bajo valor”, para datos “calientes”, “tibios” y “fríos”.
  • Uso del árbol Merkle para monitorear la integridad de la base de datos.
  • Uso opcional de WAL y rendimiento significativamente mejorado en escenarios de escritura intensiva con garantías de integridad de datos.
  • Actualización lenta al enviar datos a los discos.

Fuente: opennet.ru

Añadir un comentario