Lançamento do SGBD libmdbx 0.11.7. Transferência do desenvolvimento para o GitFlic após bloqueio no GitHub

Foi lançada a biblioteca libmdbx 0.11.7 (MDBX) com a implementação de um banco de dados embutido compacto de alto desempenho do tipo chave-valor. O código da libmdbx é distribuído sob a licença OpenLDAP Public License. Todos os sistemas operacionais e arquiteturas atuais são suportados, assim como o Elbrus 2000 da Rússia.

O lançamento é notável pela migração do projeto para o serviço GitFlic, após a administração do GitHub ter excluído sem aviso prévio, no dia 15 de abril de 2022, a libmdbx juntamente com uma série de outros projetos, bloqueando o acesso a muitos desenvolvedores vinculados a empresas afetadas pelas sanções dos EUA. Do ponto de vista dos usuários, todas as páginas, o repositório e os forks do projeto se transformaram repentinamente em uma página '404', sem qualquer possibilidade de comunicação ou esclarecimento das razões.

Infelizmente, quase todas as issues foram perdidas, nas quais havia muitas perguntas com respostas detalhadas, bem como várias discussões. A perda dessa informação é o único dano objetivo que a administração do GitHub conseguiu infligir ao projeto. Cópias parciais das discussões ainda estão disponíveis no arquivo archive.org.

A perda de cenários CI estruturados e da infraestrutura (disponível gratuitamente para projetos OpenSource) forçou uma revisão, unificação e eliminação de pequenas dívidas técnicas. Atualmente, o CI foi restaurado quase na sua plenitude, exceto pela compilação e testes de execução para todas as variantes BSD e Solaris. Curiosamente, após as ações do GitHub, não houve qualquer esclarecimento ou notificação, exceto o lembrete sobre a necessidade de pagamento e tentativas de cobrança.

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

  • Foi adicionado um contorno para o efeito/defeito de incoerência detectado no cache unificado de páginas e buffers no núcleo do Linux. Em sistemas onde o cache de páginas e buffers está realmente unificado, não faz sentido para o núcleo gastar memória em duas cópias de dados ao gravar em um arquivo já mapeado na memória. Portanto, os dados gravados tornam-se visíveis por meio da exibição em memória antes da conclusão da chamada de sistema write(), mesmo que os dados ainda não tenham sido gravados no disco.

    No geral, o comportamento alternativo não é racional, pois, com a fusão adiada, ainda será necessário capturar bloqueios para listas de páginas, copiar dados ou corrigir o PTE. Assim, a regra não oficial de coerência está em vigor desde 1989, quando o SRV4 introduziu o cache unificado de buffers. Portanto, a detecção de falhas estranhas em cenários de uso intensivo do libmdbx exigiu um grande trabalho. Primeiro, para reproduzir o problema, depois para verificar hipóteses e checar as melhorias.

    Agora, podemos afirmar com confiança que o problema foi identificado com precisão, localizado e resolvido de forma confiável, apesar de toda a complexidade e especificidade do cenário de reprodução. Além disso, o funcionamento do mecanismo de contorno foi confirmado por um dos desenvolvedores da Erigon (Ethereum); neste caso, em uma versão de depuração, a ativação da proteção se manifestava como uma regressão devido a uma verificação assertiva excessiva.

    É importante notar que, no contexto da ampla aplicação do libmdbx em projetos de trabalho, o mais importante é garantir um funcionamento confiável, e não determinar se é um 'erro ou uma característica' e se essa coerência pode ser confiável, ainda mais não procurar as causas da incoerência dentro do núcleo do Linux. Portanto, aqui a questão é a de resolver um problema que poderia afetar os usuários.

  • A regressão que causava o erro EXDEV (Cross-device link) ao copiar bancos de dados em quente sem compactação para outro sistema de arquivos foi corrigida, tanto através da API quanto da ferramenta mdbx_copy.
  • Kris Zyp implementou suporte para libmdbx no Deno. Kai Wetlesen empacotou o RPM para o Fedora. David Bouyssié desenvolveu bindings para Scala.
  • Corrigida a manipulação do valor definido pela opção MDBX_opt_rp_augment_limit ao lidar com transações enormes em grandes bancos de dados. Anteriormente, devido a um erro, poderiam ser realizadas ações extras, o que às vezes impactava o desempenho em implementações como Ethereum (Erigon/Akula/Silkworm) e projetos da Binance Chain.
  • Corrigidos vários problemas, inclusive na API C++. Muitas questões de compilação em configurações raras e exóticas foram resolvidas. Uma lista completa de todas as melhorias significativas está disponível no ChangeLog.
  • No total, foram feitas 185 alterações em 89 arquivos, adicionadas cerca de 3300 linhas e removidas aproximadamente 4100. A maior parte da remoção foi devido à limpeza de arquivos tecnológicos já obsoletos relacionados ao GitHub e serviços dependentes.

Historicamente, a libmdbx é uma reestruturação profunda do SGBD LMDB e supera seu predecessor em confiabilidade, conjunto de recursos e desempenho. Em comparação com a LMDB, a libmdbx dedica grande atenção à qualidade do código, ao funcionamento estável da API, aos testes e às verificações automáticas. Uma ferramenta de verificação de integridade da estrutura do banco de dados é fornecida, com algumas opções de recuperação.

Tecnologicamente, o libmdbx oferece ACID, serialização rigorosa de mudanças e leitura não bloqueante com escalabilidade linear em núcleos de CPU. Suporta autocompactação, gerenciamento automático do tamanho do banco de dados e estimativa de volume de consultas por faixa. Desde 2016, o projeto é financiado pela Positive Technologies e, desde 2017, é utilizado em seus produtos.

Para o libmdbx, uma API C++ avançada é oferecida, além de bindings mantidos por entusiastas para as linguagens Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno e Scala.

Fonte: opennet.ru

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