Versión do DBMS libmdbx 0.11.7. Move o desenvolvemento a GitFlic despois do bloqueo en GitHub

A biblioteca libmdbx 0.11.7 (MDBX) lanzouse coa implementación dunha base de datos de valores-clave integrada compacta de alto rendemento. O código libmdbx distribúese baixo a licenza pública OpenLDAP. Todos os sistemas operativos e arquitecturas actuais son compatibles, así como o Russian Elbrus 2000.

O lanzamento destaca pola migración do proxecto ao servizo GitFlic despois de que a administración de GitHub eliminase libmdbx xunto con moitos outros proxectos o 15 de abril de 2022 sen ningún aviso ou explicación, ao tempo que bloqueaba o acceso a moitos desenvolvedores asociados a empresas que caeron. baixo sancións estadounidenses. Desde o punto de vista do usuario, todas as páxinas, repositorio e bifurcacións do proxecto convertéronse de súpeto nunha páxina "404", sen posibilidade de comunicación algunha e descubrindo os motivos.

Por desgraza, perdéronse case todos os temas, nos que houbo moitas preguntas con respostas detalladas, así como moitas discusións. A perda desta información é o único dano obxectivo que a administración de GitHub conseguiu inflixir ao proxecto. As copias parciais das discusións permanecen dispoñibles no arquivo archive.org.

A perda de scripts e infraestrutura CI incorporados (dispoñibles para proxectos OpenSource de balde) obrigounos a facer revisión, unificación e eliminación dunha pequena débeda técnica. Agora o CI restaurouse case na mesma medida, a excepción das compilacións e as execucións de proba para todas as variantes de BSD e Solaris. De xeito revelador, despois das accións de GitHub, non se recibiron aclaracións nin notificacións, excepto un recordatorio da necesidade de pago e intentos de cancelar cartos.

Desde as últimas noticias sobre o lanzamento de libmdbx v0.11.3, ademais de recuperarse das accións de GitHub, cómpre destacar as seguintes melloras e correccións:

  • Engadiuse unha solución para un efecto/defecto de incoherencia detectado na páxina combinada e na caché do búfer no núcleo de Linux. Nos sistemas nos que as cachés de páxina e búfer están verdadeiramente unificadas, non ten sentido que o núcleo desperdicie memoria en dúas copias de datos ao escribir nun ficheiro xa mapeado na memoria. Polo tanto, os datos que se escriben fanse visibles mediante a asignación de memoria antes de que finalice a chamada ao sistema write(), aínda que os datos aínda non se escribiron no disco.

    En total, outro comportamento non é racional, porque cunha combinación atrasada, aínda tes que coller bloqueos para listas de páxinas, copiar datos ou axustar PTE. Polo tanto, a regra non dita de coherencia estivo en vigor desde 1989, cando apareceu a caché de memoria intermedia unificada en SRV4. Polo tanto, atopar fallos estraños en escenarios de produción de libmdbx ocupados requiriu moito traballo. Primeiro, reproducindo o problema, despois verificando hipóteses e comprobando melloras.

    Agora podemos dicir con confianza que o problema foi identificado, localizado e eliminado de forma fiable, a pesar da complexidade e especificidade do escenario de reprodución. Ademais, o traballo do mecanismo de derivación foi confirmado por un dos desenvolvedores de Erigon (Ethereum), no seu caso, na compilación de depuración, a protección desencadeouse como unha regresión debido a unha comprobación adicional de afirmación.

    Cómpre sinalar que no contexto do uso xeneralizado de libmdbx en proxectos de traballo, é fundamentalmente máis importante garantir un funcionamento fiable, en lugar de descubrir "se trata dun erro ou dunha característica" e se se pode confiar en tal coherencia, especialmente non atopar as causas da incoherencia dentro do núcleo de Linux. Polo tanto, aquí estamos a falar de solucionar un problema que podería afectar aos usuarios.

  • Corrixiuse unha regresión do erro EXDEV (enlace entre dispositivos) ao copiar en quente unha base de datos sen compactación a outro sistema de ficheiros, tanto a través da API como mediante a utilidade mdbx_copy.
  • Kris Zyp implementou soporte para libmdbx en Deno. Kai Wetlesen empaquetou RPM para Fedora. David Bouyssié implementou enlaces para Scala.
  • Fixo o procesamento do valor definido pola opción MDBX_opt_rp_augment_limit ao procesar transaccións enormes en grandes bases de datos. Anteriormente, debido a un erro, podíanse realizar accións innecesarias, que ás veces afectaban o rendemento nas implementacións de Ethereum (Erigon/Akula/Silkworm) e os proxectos Binance Chain.
  • Arranxáronse moitos erros, incluídos os da API de C++. Solucionáronse moitos problemas de construción en configuracións raras e exóticas. No ChangeLog está dispoñible unha lista completa de todas as melloras significativas.
  • Realizáronse un total de 185 cambios en 89 ficheiros, engadíronse ≈3300 liñas e elimináronse ≈4100. Eliminado principalmente debido á purga de ficheiros tecnolóxicos xa inútiles asociados con GitHub e servizos dependentes.

Historicamente, libmdbx é un profundo redeseño do DBMS LMDB e supera o seu proxenitor en termos de fiabilidade, conxunto de funcións e rendemento. En comparación con LMDB, libmdbx pon moito énfase na calidade do código, a estabilidade da API, as probas e as comprobacións automatizadas. Ofrécese unha utilidade para comprobar a integridade da estrutura da base de datos con algunhas opcións de recuperación.

Tecnoloxicamente, libmdbx ofrece ACID, serialización de cambios estrita e lecturas sen bloqueo con escalado lineal nos núcleos da CPU. Admítense a compactación automática, a xestión automática do tamaño da base de datos e a estimación de consulta de intervalos. Desde 2016, o proxecto está financiado por Positive Technologies e utilízase nos seus produtos desde 2017.

libmdbx ofrece unha API de C++ desenvolvida, así como conexións compatibles con entusiastas a Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Fonte: opennet.ru

Engadir un comentario