O segundo candidato a lançamentos do libmdbx v1.0 após cinco anos de desenvolvimento.

A biblioteca libmdbx é um descendente significativamente reestruturado do LMDB — um banco de dados embutido de chave-valor altamente eficiente e compacto.
A versão atual v0.5 é um lançamento técnico, marcando a conclusão de quaisquer melhorias e a transição para a fase de teste final público e estabilização, seguida pela formação do primeiro lançamento completo da biblioteca.

LMDB é um SGBD embutido transacional bastante conhecido do tipo "chave-valor" baseado em árvore B+ sem journaling antecipado, que permite a execução concorrente e extremamente eficiente de processos de múltiplos threads com uma base de dados localmente compartilhada (não em rede). Por sua vez, o MDBX é mais rápido e confiável que o LMDB, mantendo todas as capacidades-chave de seu ancestral, como ACID e leitura não bloqueante com escalabilidade linear em relação aos núcleos da CPU, além de adicionar várias novas funcionalidades.

A descrição das diferenças e melhorias do libmdbx em relação ao LMDB merece um artigo separado (publicações planejadas no "Habr" e no "Medium"). Aqui, vale mencionar as mais importantes e notáveis:

  • Um foco considerável é dado à qualidade do código, testes e verificações automáticas.
  • Controle significativamente maior 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 BD.
  • Formato único do BD para compilações de 32 e 64 bits.
  • Avaliação do volume de amostras por intervalos (estimativa de consultas de intervalo).
  • Suporte a chaves que são o dobro do tamanho e tamanho da página do banco de dados selecionado pelo usuário.

O lançamento do candidato libmdbx é o resultado da decisão (veja a seguir) de separar os projetos MDBX e MithrilDB em agosto de 2019. Ao mesmo tempo, foi decidido no libmdbx eliminar (racionalmente) o máximo de dívida técnica e estabilizar a biblioteca. Na prática, foi feito de 2 a 3 vezes mais do que foi estimado e planejado inicialmente:

  • Implementada a compatibilidade com Mac OS e plataformas de "segunda linha": FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. A compatibilidade com AIX e HP-UX pode ser adicionada se necessário.
  • O código foi sanado com o uso do Undefined Behavior Sanitizer e do Address Sanitizer, eliminados todos os avisos ao compilar com -Wpedantic, além de todos os avisos do Coverity Static Analyzer, etc.
  • Atualização da descrição da API.
  • Amálgama do código-fonte para facilitar a incorporação.
  • Suporte ao CMake.
  • Suporte a transações aninhadas.
  • Uso de bootid para determinar se ocorreu uma reinicialização do sistema operacional (parada suja do banco de dados).
  • Contagem abrangente de páginas atualizadas/antigas e informações ampliadas sobre transações.
  • Opção MDBX_ACCEDE para se conectar a um banco de dados já aberto em modo compatível.
  • Uso bloqueios OFD se disponíveis.
  • Backup quente para pipe.
  • Algoritmo de ordenação interna otimizado especializado (até 2-3 vezes mais rápido que qsort() e até 30% mais rápido que std::sort()).
  • Aumentou a duração máxima da chave.
  • Gerenciamento automático da leitura antecipada (estratégia de cache de arquivos de banco de dados na memória).
  • Compactação automática mais agressiva e rápida.
  • Estratégia de mesclagem de páginas de B+ árvore mais otimizada.
  • Controle de sistemas de arquivos não locais (NFS, Samba, etc.) para prevenir a corrupção de bancos de dados em caso de uso incorreto.
  • A gama de testes foi expandida.

O desenvolvimento da "próxima" versão do libmdbx continuará como parte de um projeto separado. MithrilDB, enquanto o vetor de desenvolvimento da "versão atual" do MDBX está focado na congelamento do conjunto de funcionalidades e estabilização. Essa decisão foi tomada por três razões:

  • Incompatibilidade total: para implementar todas as funcionalidades planejadas no MithrilDB, é necessário um formato de arquivo de banco de dados diferente (incompatível) e uma API diferente (incompatível).
  • Novo código-fonte: foi garantida a independência de licença do código-fonte do MithrilDB em relação ao LMDB, e o projeto será publicado sob uma licença diferente (aprovada OSI licença Apache 2.0, e não OpenLDAP Foundation).
  • A separação ajuda a evitar confusões potenciais, trazer mais clareza e garantir a independência do desenvolvimento dos projetos.

MithrilDB, assim como o MDBX, também é baseado em árvore B+ e terá desempenho extremamente alto, eliminando uma série de desvantagens fundamentais do MDBX e LMDB. Em particular, o problema das "leituras longas", que se manifesta como um "inchaço" do banco de dados devido a transações de leitura prolongadas que bloqueiam a coleta de lixo, será resolvido. Entre as novas funcionalidades do MithrilDB, destaca-se:

  • suporte para o armazenamento de bancos de dados em diferentes tipos de dispositivos: HDD, SSD e memória não volátil.
  • estratégias ideais para dados 'valiosos' e 'menos valiosos', para dados 'quentes', 'mornos' e 'frios'.
  • uso de Merkle tree para controle de integridade do banco de dados.
  • uso opcional de WAL e desempenho significativamente maior em cenários de gravação intensiva com garantias de integridade dos dados.
  • fixação de dados nos discos de forma preguiçosa e atrasada.

Fonte: linux.org.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