Segundo candidato a lançamento do libmdbx v1.0 após cinco anos de desenvolvimento.

Biblioteca libmdbx é um descendente significativamente redesenhado do LMDB - um banco de dados de valores-chave incorporado compacto e de desempenho extremamente alto.
A versão atual v0.5 é um lançamento técnico, 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 do primeiro lançamento completo da biblioteca.

LMDB é um DBMS de valor-chave incorporado transacional bastante conhecido, baseado em árvore B+ sem registro proativo, que permite que um enxame de processos multithread funcione de forma competitiva e extremamente 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, enquanto o libmdbx mantém todos os principais recursos de seu ancestral, como ACID e leituras sem bloqueio com escala linear entre núcleos de CPU e também adiciona vários novos.

Uma descrição das diferenças e melhorias do libmdbx em relação ao LMDB merece um artigo separado (planejado para ser publicado no Habré e no Medium). Aqui é apropriado mencionar o mais importante e perceptível:

  • 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 do tamanho da 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 da decisão (veja abaixo) de separar os projetos MDBX e MithrilDB em agosto de 2019. Ao mesmo tempo, 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 Mac OS e plataformas de segunda camada: 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.
  • Amálgama de código-fonte para facilidade de 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.0E não Fundação OpenLDAP).
  • A separação evita possíveis confusões, proporciona mais certeza e garante que os projetos sigam um caminho independente.

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 maior em cenários de gravação intensa e garantias de integridade de dados.
  • Fixação lenta de dados em discos.

Fonte: linux.org.ru

Adicionar um comentário