para testar o segundo candidato para lançamentos da biblioteca 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 sob a licença OpenLDAP Public License.
A biblioteca MDBX é um desdobramento significativamente reestruturado de — um SGBD embutido transacional do tipo «chave-valor» baseado em sem , 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 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 .
- 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 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. , 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 licença Apache 2.0, ao invés de ).
- 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 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
