Lançamento do DBMS libmdbx 0.11.7. Mova o desenvolvimento para o GitFlic após o bloqueio no GitHub

A biblioteca libmdbx 0.11.7 (MDBX) foi lançada com a implementação de um banco de dados de valores-chave integrado e compacto de alto desempenho. O código libmdbx está licenciado sob a Licença Pública OpenLDAP. Todos os sistemas operacionais e arquiteturas atuais são suportados, assim como o russo Elbrus 2000.

O lançamento se destaca pela migração do projeto para o serviço GitFlic após, em 15 de abril de 2022, a administração do GitHub, sem qualquer aviso ou explicação, deletar o libmdbx junto com uma série de outros projetos, ao mesmo tempo em que bloqueava o acesso a muitos desenvolvedores associados ao empresas sujeitas a sanções dos EUA. Do ponto de vista dos usuários, todas as páginas, o repositório e os forks do projeto transformaram-se repentinamente em uma página 404, sem possibilidade de qualquer comunicação e apuração dos motivos.

Infelizmente, quase todas as questões, nas quais havia muitas perguntas com respostas detalhadas, bem como muitas discussões, foram perdidas. A perda dessas informações é o único dano objetivo que a administração do GitHub conseguiu infligir ao projeto. Cópias parciais das discussões permanecem disponíveis em archive.org.

A perda de cenários e infraestrutura de CI construídos (disponíveis gratuitamente para projetos OpenSource) nos forçou a realizar a revisão, unificação e eliminação de pequenas dívidas técnicas. Agora o CI foi restaurado quase na mesma medida, com exceção dos testes de construção e execução para todas as variantes BSD e Solaris. Normalmente, após as ações, o GitHub não recebia nenhum esclarecimento ou notificação, além de lembretes sobre a necessidade de pagamento e tentativas de baixa de dinheiro.

Desde as últimas notícias sobre o lançamento da libmdbx v0.11.3, além da recuperação das ações do GitHub, vale destacar as seguintes melhorias e correções:

  • Adicionada uma solução alternativa para um efeito/defeito de incoerência detectado na página combinada e no cache de buffer no kernel do Linux. Em sistemas onde os caches de página e buffer são realmente combinados, não faz sentido o kernel desperdiçar memória para duas cópias de dados ao gravar em um arquivo que já está mapeado na memória. Portanto, os dados que estão sendo gravados tornam-se visíveis por meio do mapeamento de memória antes que a chamada do sistema write() seja concluída, mesmo que os dados ainda não tenham sido gravados no disco.

    Em geral, outro comportamento não é racional, porque com uma mesclagem diferida, você ainda terá que adquirir bloqueios para listas de páginas, copiar dados ou ajustar o PTE. Portanto, a regra tácita de coerência está em vigor desde 1989, quando o cache de buffer unificado apareceu no SRV4. Portanto, detectar travamentos estranhos em cenários de exploração de libmdbx carregados exigia muito trabalho. Primeiro para reproduzir o problema, depois para verificar hipóteses e testar melhorias.

    Agora podemos dizer com segurança que o problema foi identificado, localizado e eliminado de forma confiável, apesar da complexidade e especificidade do cenário de reprodução. Além disso, o funcionamento do mecanismo de bypass foi confirmado por um dos desenvolvedores do Erigon (Ethereum); no caso dele, na compilação de depuração, a proteção foi acionada como uma regressão devido a uma verificação de afirmação desnecessária.

    Deve-se notar que, no contexto do uso generalizado da libmdbx em projetos de produção, garantir uma operação confiável é fundamentalmente mais importante do que descobrir se é um bug ou um recurso e se essa coerência pode ser confiável, e muito menos procurar o causas de incoerência dentro do kernel Linux. Portanto, estamos falando aqui sobre a correção de um problema que pode ter afetado os usuários.

  • Foi eliminada a regressão do erro EXDEV (Cross-device link) ao copiar a quente um banco de dados sem compactação para outro sistema de arquivos, tanto através da API quanto com o utilitário mdbx_copy.
  • Kris Zyp implementou suporte libmdbx no Deno. Kai Wetlesen projetou pacotes RPM para o Fedora. David Bouyssié implementou ligações para Scala.
  • Corrigido o processamento do valor especificado pela opção MDBX_opt_rp_augment_limit ao processar grandes transações em grandes bancos de dados. Anteriormente, devido a um erro, ações desnecessárias poderiam ser realizadas, o que às vezes afetava o desempenho em implementações Ethereum (Erigon/Akula/Silkworm) e projetos Binance Chain.
  • Muitos bugs foram corrigidos, inclusive na API C++. Corrigidos muitos problemas de construção em configurações raras e exóticas. Uma lista completa de todas as melhorias significativas está disponível no ChangeLog.
  • Um total de 185 alterações foram feitas em 89 arquivos, ≈3300 linhas foram adicionadas, ≈4100 foram excluídas. Mais foram removidos principalmente devido à limpeza de arquivos de tecnologia já inúteis associados ao GitHub e serviços dependentes.

Historicamente, libmdbx é uma reformulação profunda do SGBD LMDB e supera seu ancestral em confiabilidade, conjunto de recursos e desempenho. Comparado ao LMDB, o libmdbx dá muita ênfase à qualidade do código, estabilidade da API, testes e verificações automatizadas. É fornecido um utilitário para verificar a integridade da estrutura do banco de dados com alguns recursos de recuperação.

Em termos de tecnologia, libmdbx oferece ACID, forte serialização de alterações e leituras sem bloqueio com escala linear entre núcleos de CPU. Há suporte para compactação automática, gerenciamento automático de tamanho de banco de dados e estimativa de consulta de intervalo. Desde 2016, o projeto é financiado pela Positive Technologies e é utilizado em seus produtos desde 2017.

libmdbx oferece uma API C++ desenvolvida, bem como ligações suportadas por entusiastas para as linguagens Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Fonte: opennet.ru

Adicionar um comentário