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 no cache unificado de páginas e buffers no kernel. LinuxEm sistemas onde os caches de página e de buffer são verdadeiramente unificados, o kernel não precisa desperdiçar memória com duas cópias de dados ao escrever em um arquivo já mapeado em memória. Portanto, os dados que estão sendo escritos tornam-se visíveis através do mapeamento de memória antes mesmo da chamada de sistema write() ser concluída, mesmo que os dados ainda não tenham sido gravados em 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.

    É importante notar que, no contexto do uso generalizado da libmdbx em projetos de produção, é fundamentalmente mais importante garantir uma operação confiável do que descobrir se é um bug ou uma característica do sistema e se essa coerência é confiável, muito menos procurar as causas da incoerência dentro do kernel. LinuxPortanto, estamos aqui falando sobre como corrigir 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

Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster