A biblioteca libmdbx 0.11.3 (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. No final de 2021, libmdbx é usado como backend de armazenamento nos dois clientes Ethereum mais rápidos - Erigon e o novo “Shark”, que, de acordo com os disponíveis informações, é o cliente Ethereum de maior desempenho.
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++, bem como ligações de linguagem suportadas por entusiastas para Rust, Haskell, Python, NodeJS, Ruby, Go e Nim.
Principais inovações, melhorias e correções adicionadas desde a notícia anterior de 11 de outubro:
- A API C++ é considerada pronta para uso.
- A atualização dos dados do GC ao realizar grandes transações foi significativamente acelerada, o que é especialmente importante ao usar libmdbx no ecossistema Ethereum.
- A assinatura interna do formato do banco de dados foi alterada para suportar atualização automática, que é totalmente transparente para os usuários. Isso permite eliminar mensagens falso-positivas sobre corrupção de banco de dados quando versões desatualizadas da biblioteca são usadas para ler transações registradas por versões atuais.
- Adicionadas funções mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() e mdbx_env_get_syncbytes(). Adicionado suporte para a operação MDBX_SET_UPPERBOUND.
- Todos os avisos ao compilar com todos os compiladores suportados nos modos C++ 11/14/17/20 foram eliminados. A compatibilidade com compiladores legados é garantida: clang a partir de 3.9, gcc a partir de 4.8, incluindo assembly usando cdevtoolset-9 para CentOS/RHEL 7.
- Corrigida a possibilidade de conflito de metapágina após alternar manualmente para uma metapágina específica usando o utilitário mdbx_chk.
- Corrigido erro MDBX_PROBLEM inesperado retornado ao substituir metapáginas herdadas.
- Corrigido o retorno de MDBX_NOTFOUND em caso de correspondência inexata ao processar uma solicitação MDBX_GET_BOTH.
- Corrigido erro de compilação no Linux na ausência de arquivos de cabeçalho com descrições de interfaces com o kernel.
- Corrigido um conflito entre o sinalizador interno MDBX_SHRINK_ALLOWED e a opção MDBX_ACCEDE.
- Várias verificações de afirmação desnecessárias foram eliminadas.
- Corrigido retorno inesperado de MDBX_RESULT_TRUE da função mdbx_env_set_option().
- No total, mais de 90 alterações foram feitas em 25 arquivos, ~1300 linhas foram adicionadas, ~600 foram excluídas.
Fonte: opennet.ru