Após cinco anos de desenvolvimento, o segundo release candidate da libmdbx 1.0 foi publicado

Disponível para testar o segundo candidato para lançamentos de biblioteca libmdbx com a implementação de um banco de dados de valores-chave incorporado compacto e de alto desempenho. A versão atual (0.5) é uma versão técnica, marca a conclusão de eventuais melhorias e a transição para a fase de testes finais públicos e estabilização, com a posterior formação da primeira versão completa da biblioteca. código libmdbx distribuído por licenciado sob a Licença Pública OpenLDAP.

A biblioteca MDBX é um fork significativamente revisado de LMDB — SGBD transacional incorporado da classe “valor-chave” baseado em árvore B+ sem registro proativo, que permite que processos multithread funcionem de forma competitiva e eficiente com um banco de dados compartilhado localmente (não em rede). Por sua vez, o MDBX é mais rápido e confiável que o LMDB e, ao mesmo tempo, mantém todos os principais recursos de seu ancestral, como ACID e leituras sem bloqueio com escala linear entre núcleos de CPU.

As diferenças mais importantes entre MDBX e LMDB:

  • Fundamentalmente, é dada mais atenção à qualidade do código, aos testes e às verificações automáticas.
  • Significativamente mais controle durante a operação, desde a verificação de parâmetros até a auditoria interna das estruturas do banco de dados.
  • Compactação automática e gerenciamento automático do tamanho do banco de dados.
  • Um único formato de banco de dados para assemblies de 32 e 64 bits.
  • Estimativa de volumes de amostra por intervalos (estimativa de consulta de intervalo).
  • Suporte para chaves duas vezes maiores que panquecas e tamanho de página de banco de dados selecionável pelo usuário.

O release candidate libmdbx é o resultado de uma decisão tomada em agosto de 2019 para separar os projetos MDBX e MithrilDB. Ao mesmo tempo, a libmdbx decidiu eliminar a dívida técnica máxima (racional) e estabilizar a biblioteca. Na verdade, foi feito 2 a 3 vezes mais na direção designada do que foi inicialmente estimado e planeado:

  • Foi implementado suporte para macOS e plataformas de segundo nível: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. O suporte AIX e HP-UX pode ser incluído conforme necessário.
  • O código foi higienizado usando Undefined Behavior Sanitizer e Address Sanitizer, todos os avisos ao construir com “-Wpedantic”, todos os avisos do Coverity Static Analyzer, etc.
  • Atualizar Descrições de API.
  • Mesclagem (amálgama) do código-fonte para facilitar a incorporação.
  • Suporte CMake.
  • Suporte para transações aninhadas.
  • Usando bootid para determinar se o sistema operacional foi reinicializado (parada de banco de dados suja).
  • Contagem ponta a ponta de páginas atualizadas/antigas e informações estendidas de transações.
  • Opção MDBX_ACCEDE para conexão com um banco de dados já aberto em modo compatível.
  • Usar Bloqueio de OFD Quando disponível.
  • Backup quente no tubo.
  • Algoritmo de classificação interna otimizado especializado (até 2 a 3 vezes mais rápido que “qsort()” e até 30% mais rápido que “std::sort()”).
  • O comprimento máximo da chave foi aumentado.
  • Controle automático de read ahead (estratégia de cache de arquivos de banco de dados na memória).
  • Autocompactação mais agressiva e rápida.
  • Uma estratégia mais ideal para mesclar páginas da árvore B+.
  • Controle de sistemas de arquivos não locais (NFS, Samba, etc.) para evitar danos ao banco de dados se usados ​​incorretamente.
  • O conjunto de testes foi ampliado.

O desenvolvimento da "próxima" versão do libmdbx continuará como um projeto separado MithrilDB, enquanto o vetor de desenvolvimento da versão “atual” do MDBX visa congelar o conjunto de recursos e estabilizá-lo. Esta decisão foi tomada por três motivos:

  • Totalmente incompatível: MithrilDB requer um formato de arquivo de banco de dados diferente (incompatível) e uma API diferente (incompatível) para implementar todos os recursos planejados.
  • Novo código-fonte: O código-fonte do MithrilDB foi licenciado independente do LMDB, e o projeto em si está planejado para ser publicado sob uma licença diferente (aprovada por OSI Licença Apache 2.0, não Licença pública OpenLDAP).
  • A separação evita possíveis confusões, introduz mais certeza e garante um caminho independente para os projetos.

MithrilDB, assim como MDBX, também é baseado em árvore B+ e também apresentará desempenho extremamente alto, eliminando ao mesmo tempo uma série de desvantagens fundamentais do MDBX e do LMDB. Em particular, o problema de “leituras longas”, que se manifesta como “inchaço” do banco de dados devido ao fato de o processamento de lixo ser bloqueado por transações de leituras longas, será eliminado. Os novos recursos do MithrilDB incluem:

  • Suporte para colocação do banco de dados em diversas mídias heterogêneas: HDD, SSD e memória não volátil.
  • Estratégias ótimas para dados “valiosos” e “de baixo valor”, para dados “quentes”, “quentes” e “frios”.
  • Usando a árvore Merkle para monitorar a integridade do banco de dados.
  • Uso opcional de WAL e desempenho significativamente melhorado em cenários de gravação intensa com garantias de integridade de dados.
  • Atualização lenta ao comprometer dados em discos.

Fonte: opennet.ru

Adicionar um comentário