Foi lançado a biblioteca libmdbx 0.11.3 (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, incluindo o russo Elbrus 2000. Até o final de 2021, a libmdbx é utilizada como backend de armazenamento em dois dos clientes Ethereum mais rápidos — Erigon e o novo "Tubarão", que, segundo informações disponíveis, é o cliente Ethereum de maior desempenho.
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.
Tecnicamente, a libmdbx oferece ACID, serialização estrita de alterações e leitura não bloqueante com escalabilidade linear em núcleos de CPU. O suporte para auto-compacitação, gerenciamento automático do tamanho do banco de dados e avaliação de volumes de consultas em intervalos (estimação de consulta de intervalo) está disponível. Desde 2016, o projeto é financiado pela Positive Technologies e desde 2017 é usado em seus produtos.
Para a libmdbx, uma API C++ é oferecida, além de ligações suportadas por entusiastas para as linguagens Rust, Haskell, Python, NodeJS, Ruby, Go e Nim.
As principais novidades, melhorias e correções adicionadas após a última atualização de 11 de outubro:
- A API C++ é considerada pronta para uso.
- A atualização de dados do GC foi significativamente acelerada ao consolidar grandes transações, o que é especialmente relevante ao usar a libmdbx no ecossistema Ethereum.
- A assinatura interna do formato do banco de dados foi alterada com suporte para atualização automática, que é completamente transparente para os usuários. Isso permite eliminar mensagens de dano falso ao banco de dados, quando versões antigas da biblioteca são usadas para ler transações registradas por versões atuais.
- As funções mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() e mdbx_env_get_syncbytes() foram adicionadas. Suporte para a operação MDBX_SET_UPPERBOUND foi incluído.
- Todos os avisos de compilação foram resolvidos para todos os compiladores suportados nas versões C++ 11/14/17/20. Garantida a compatibilidade com compiladores obsoletos: clang a partir da versão 3.9, gcc a partir da versão 4.8, incluindo compilação através do sdevtoolset-9 para CentOS/RHEL 7.
- Resolvido o potencial conflito de meta-páginas após a troca manual para uma meta-página específica usando a ferramenta mdbx_chk.
- Corrigido o retorno inesperado do erro MDBX_PROBLEM ao sobrescrever meta-páginas obsoletas.
- Corrigido o retorno MDBX_NOTFOUND em caso de correspondência imprecisa ao processar a solicitação MDBX_GET_BOTH.
- Corrigido um erro de compilação no Linux na ausência de arquivos de cabeçalho com descrições das interfaces do núcleo.
- Corrigida a colisão entre a flag interna MDBX_SHRINK_ALLOWED e a opção MDBX_ACCEDE.
- Removidos vários asserts desnecessários.
- Corrigido o retorno inesperado MDBX_RESULT_TRUE da função mdbx_env_set_option().
- Foram feitas mais de 90 alterações em 25 arquivos, com cerca de 1300 linhas adicionadas e aproximadamente 600 removidas.
Fonte: opennet.ru
