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