Segunda versión candidata de libmdbx v1.0 después de cinco años de desarrollo.

Biblioteca libmdbx es un descendiente significativamente rediseñado de LMDB: una base de datos clave-valor integrada compacta y de extremadamente alto rendimiento.
La versión actual v0.5 es una versión técnica, marca la finalización de las mejoras 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.

LMDB es un DBMS de valor clave integrado transaccional bastante conocido basado en árbol B+ sin registro proactivo, que permite que un enjambre de procesos multiproceso funcione de manera competitiva y extremadamente eficiente con una base de datos compartida localmente (no en red). A su vez, MDBX es más rápido y confiable que LMDB, mientras que libmdbx 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, y también agrega varios nuevos.

Una descripción de las diferencias y mejoras de libmdbx en relación con LMDB merece un artículo aparte (previsto para ser publicado en Habré y Medium). Aquí cabe mencionar los más importantes y destacables:

  • 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 del tamaño de la 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 la decisión (ver más abajo) de separar los proyectos MDBX y MithrilDB en agosto de 2019. 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 Mac OS 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 de 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.0Y no Fundación OpenLDAP).
  • La separación evita posibles confusiones, proporciona más certeza y garantiza que los proyectos tengan un camino independiente hacia adelante.

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”.
  • usando el árbol Merkle para monitorear la integridad de la base de datos.
  • uso opcional de WAL y un rendimiento significativamente mayor en escenarios de escritura intensiva y garantías de integridad de datos.
  • Fijación perezosa de datos en discos.

Fuente: linux.org.ru

Añadir un comentario