Depois de cinco anos de desenvolvimento, o segundo candidato a lançamentos do libmdbx 1.0 foi publicado.

Disponível para testar o segundo candidato para lançamentos da biblioteca libmdbx com a implementação de um banco de dados incorporado, compacta e de alto desempenho, do tipo chave-valor. A versão atual (0.5) é um lançamento técnico, marcando a conclusão de quaisquer ajustes e a transição para a fase de teste público final e estabilização, seguida pela formação do primeiro lançamento completo da biblioteca. Código libmdbx é distribuído sob a licença OpenLDAP Public License.

A biblioteca MDBX é um desdobramento significativamente reestruturado de LMDB — um SGBD embutido transacional do tipo «chave-valor» baseado em árvore B+ sem journaling antecipado, que permite que processos multithread executem concorrente e eficientemente com um banco de dados localmente compartilhado (não em rede). O MDBX, por sua vez, é mais rápido e confiável que o LMDB, mantendo todas as principais funcionalidades de sua predecessora, como ACID e leitura não bloqueante com escalabilidade linear em núcleos de CPU.

As principais diferenças do MDBX em relação ao LMDB:

  • 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.
  • Estimativa do volume de consultas por intervalos (range query estimation).
  • Suporte a chaves que são o dobro do tamanho e tamanho da página do banco de dados selecionado pelo usuário.

O candidato a lançamentos libmdbx é o resultado da decisão tomada em agosto de 2019 de separar os projetos MDBX e MithrilDB. Neste contexto, foi decidido eliminar (racionalmente) o máximo possível de dívida técnica e estabilizar a biblioteca. Na prática, foi realizado de 2 a 3 vezes mais do que foi inicialmente avaliado e planejado:

  • Implementado suporte para macOS e plataformas de "segundo escalão": FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. O suporte para AIX e HP-UX pode ser adicionado conforme necessário.
  • A sanitarização do código foi realizada utilizando Undefined Behavior Sanitizer e Address Sanitizer, eliminando todos os avisos ao compilar com "-Wpedantic", todos os avisos do Coverity Static Analyzer, etc.
  • Atualização da descrição da API.
  • Fusão (amalgame) 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 global de páginas atualizadas/antigas e informações expandidas 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.
  • Um algoritmo de ordenação interno otimizado e 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 danos ao banco de dados devido ao uso inadequado.
  • 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, ao invés de Licença Pública OpenLDAP).
  • A separação evita confusões potenciais, traz mais clareza e assegura a independência do caminho de 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 armazenamento de banco de dados em múltiplos dispositivos heterogêneos: HDD, SSD e memória não volátil.
  • Estratégias otimais para dados "valiosos" e "sem valor", para dados "quentes", "morningas" e "frios".
  • Uso de Merkle tree para controle de integridade do banco de dados.
  • Uso opcional de WAL e uma produtividade significativamente maior em cenários de gravação intensiva com garantias de integridade dos dados.
  • Gravação de dados de forma preguiçosa e atrasada nos discos.

Fonte: opennet.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