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