Segundo candidato á versión libmdbx v1.0 despois de cinco anos de desenvolvemento.

biblioteca libmdbx é un descendente significativamente redeseñado de LMDB, unha base de datos de valores clave incorporada compacta e de extremadamente alto rendemento.
A versión actual v0.5 é unha versión técnica, marca a finalización de calquera mellora e a transición á fase de proba final pública e estabilización, coa posterior formación da primeira versión completa da biblioteca.

LMDB é un DBMS de clave-valor incorporado transaccional bastante coñecido baseado árbore B+ sen rexistro proactivo, o que permite que un enxame de procesos multifíos funcionen de forma competitiva e extremadamente eficiente cunha base de datos compartida localmente (non en rede). Pola súa banda, MDBX é máis rápido e fiable que LMDB, mentres que libmdbx conserva todas as características clave do seu antepasado, como ÁCIDO e lecturas sen bloqueo con escala lineal nos núcleos da CPU, e tamén engade varios novos.

Unha descrición das diferenzas e melloras de libmdbx en relación con LMDB merece un artigo separado (planeado para ser publicado en Habré e Medium). Aquí convén mencionar o máis importante e notable:

  • Fundamentalmente, préstase máis atención á calidade do código, ás probas e ás comprobacións automáticas.
  • Un control significativamente maior durante a operación, desde a comprobación de parámetros ata a auditoría interna das estruturas de bases de datos.
  • Compactación automática e xestión automática do tamaño da base de datos.
  • Un único formato de base de datos para conxuntos de 32 e 64 bits.
  • Estimación do tamaño da mostra por intervalos (estimación de consulta de intervalos).
  • Soporte para teclas dúas veces máis grandes que as filloas e tamaño de páxina de base de datos seleccionable polo usuario.

O candidato á versión de libmdbx é o resultado da decisión (ver a continuación) de separar os proxectos MDBX e MithrilDB en agosto de 2019. Ao mesmo tempo, libmdbx decidiu eliminar a débeda técnica máxima (racional) e estabilizar a biblioteca. De feito, fíxose 2-3 veces máis na dirección designada do que se estimaba e planeaba inicialmente:

  • Implementouse soporte para Mac OS e plataformas de segundo nivel: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Pódese engadir compatibilidade con AIX e HP-UX segundo sexa necesario.
  • O código desinfectouse mediante Undefined Behavior Sanitizer e Address Sanitizer, elimináronse todas as advertencias ao construír con -Wpedantic, todas as advertencias do Coverity Static Analyzer, etc.
  • Actualizar Descricións da API.
  • Amalgamación do código fonte para facilitar a incorporación.
  • Soporte de CMake.
  • Soporte para transaccións aniñadas.
  • Usando bootid para determinar se o SO se reiniciou (parada da base de datos sucia).
  • Reconto de extremo a extremo de páxinas actualizadas/vellas e información de transaccións ampliada.
  • Opción MDBX_ACCEDE para conectarse a unha base de datos xa aberta en modo compatible.
  • Usar Bloqueo de OFD cando estea dispoñible.
  • Copia de seguridade en quente na tubería.
  • Algoritmo de clasificación interno optimizado especializado (ata 2-3 veces máis rápido que qsort() e ata un 30% máis rápido que std::sort()).
  • Aumentouse a lonxitude máxima da chave.
  • Control automático da lectura anticipada (estratexia de almacenamento en caché de ficheiros de base de datos na memoria).
  • Compactación automática máis agresiva e máis rápida.
  • Unha estratexia máis óptima para combinar páxinas en árbore B+.
  • Control de sistemas de ficheiros non locais (NFS, Samba, etc.) para evitar danos na base de datos se se usan incorrectamente.
  • Ampliouse o conxunto de probas.

O desenvolvemento da "próxima" versión de libmdbx continuará como un proxecto separado MithrilDB, mentres que o vector de desenvolvemento da versión "actual" de MDBX ten como obxectivo conxelar o conxunto de funcións e estabilizalo. Esta decisión tomouse por tres motivos:

  • Totalmente incompatible: MithrilDB require un formato de ficheiro de base de datos diferente (incompatible) e unha API (incompatible) diferente para implementar todas as funcións planificadas.
  • Novo código fonte: o código fonte de MithrilDB fíxose independente de LMDB, e está previsto que o proxecto en si se publique baixo unha licenza diferente (aprobada por OU SE licenza Apache 2.0pero non Fundación OpenLDAP).
  • A separación evita posibles confusións, proporciona máis certeza e garante que os proxectos teñan un camiño independente.

MithrilDB, como MDBX, tamén está baseado en árbore B+ e tamén terá un rendemento extremadamente alto, ao tempo que eliminará unha serie de desvantaxes fundamentais de MDBX e LMDB. En particular, eliminarase o problema das "lecturas longas", que se manifesta como "inchazo" da base de datos debido ao feito de que o procesamento de lixo está bloqueado por transaccións de lectura longas. As novas características de MithrilDB inclúen:

  • soporte para colocar a base de datos en varios soportes heteroxéneos: HDD, SSD e memoria non volátil.
  • estratexias óptimas para datos "valiosos" e "de baixo valor", para datos "quentes", "cálidos" e "fríos".
  • usando a árbore de Merkle para supervisar a integridade da base de datos.
  • uso opcional de WAL e un rendemento significativamente superior en escenarios de escritura intensiva e garantías de integridade dos datos.
  • Fixación perezosa de recuperación de datos en discos.

Fonte: linux.org.ru

Engadir un comentario