Lanzamiento de la base de datos embebida libmdbx 0.13.3

Se ha publicado la versión de la biblioteca libmdbx 0.13.3 (MDBX) con la implementación de una base de datos embebida compacta y de alto rendimiento del tipo clave-valor. El código de libmdbx se distribuye bajo la licencia Apache 2.0. Se admiten todos los sistemas operativos y arquitecturas actuales, así como el Elbrus 2000 ruso. Se ofrece una API avanzada para C++ en libmdbx, así como enlaces soportados por entusiastas para lenguajes como Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno y Scala.

Históricamente, libmdbx es una profunda reestructuración de la base de datos LMDB y supera a su predecesor en fiabilidad, conjunto de funciones y rendimiento. En comparación con LMDB, libmdbx presta especial atención a la calidad del código, al funcionamiento estable de la API, a las pruebas y a las verificaciones automáticas. Se incluye una utilidad 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, estricta serialización de cambios y lectura no bloqueante con escalabilidad lineal en núcleos de CPU. Soporta la autocompactación, la gestión automática del tamaño de la base de datos y la estimación del volumen de las muestras por rangos (estimación de consultas de rango).

Principales cambios:

  • La rama 0.13.x ha obtenido el estatus de estable. Ha comenzado el desarrollo de la rama 0.14.x.
  • Se ha agregado a la API de C la función mdbx_cursor_count_ex(), que permite obtener tanto la cantidad de múltiples valores correspondientes a la clave actual como información sobre el árbol anidado que almacena esos valores.
  • Se ha añadido a la API de C++ el método mdbx::txn::make_broken(), similar a mdbx_txn_break().
  • En las utilidades mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat se ha implementado el registro de errores, advertencias y mensajes importantes de libmdbx.
  • Cambio de comportamiento:
    • Al habilitar la recopilación de perfiles del recolector de basura (compilación con la opción MDBX_ENABLE_PROFGC=ON), ahora se contabiliza el tiempo de CPU dedicado a fusionar listas de páginas, es decir, al funcionamiento de la función pnl_merge().
    • En la utilidad de pruebas, el valor del modo de datos ha sido renombrado de data.dups a data.multi.
    • Se ha mejorado el control de la longitud de la clave dentro de cursor_seek().
    • Si el usuario no ha establecido un valor real mediante mdbx_env_set_option(MDBX_opt_txn_dp_limit), se ajusta el límite de páginas sucias al iniciar cada transacción de escritura no anidada, en función de la cantidad de RAM disponible y el tamaño de la base de datos.
    • En el modo MDBX_NOSTICKYTHREADS se permite el commit/abort de transacciones anidadas desde cualquier hilo.
    • Al intentar iniciar transacciones anidadas en el modo MDBX_WRITEMAP, se registra el evento y se retorna el error MDBX_INCOMPATIBLE.
    • En la API de C++, en los constructores/inicializadores y métodos relacionados con la formación de la geometría de la base de datos, se utilizan por defecto solo valores predeterminados.
    • Dentro de mdbx_env_set_geometry() se han mejorado las heurísticas para ajustar los parámetros de geometría de la base de datos solicitados por el usuario como "por defecto".
  • Correcciones:
    • Se ha eliminado un regresión que impedía la desbloqueo del mutex al intentar cerrar de nuevo el descriptor dbi, incluso al intentar cerrar explícitamente el descriptor después de eliminar la tabla asociada.
    • Se ha solucionado una regresión en el estado del cursor anidado/dupsort después de insertar datos en el modo MDBX_APPEND.
    • Se ha añadido soporte para la obtención de boot_id al trabajar dentro de un contenedor LXC.
    • Se ha corregido el error de procesamiento incorrecto al intentar iniciar una transacción de lectura anidada. Ahora, en tales situaciones, se devuelve el error MDBX_EINVAL, ya que la anidación solo es compatible con transacciones de lectura y escritura.
    • Se ha eliminado el error regresivo SIGSEGV de acceso a la dirección nula cuando se trabaja en modo solo lectura sin usar un archivo LCK, por ejemplo, al colocar la base de datos en un medio accesible solo para lectura.

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