Foi lançada a versão da biblioteca libmdbx 0.13.1 (MDBX), que implementa um banco de dados embutido compacto e de alto desempenho do tipo chave-valor. O código do libmdbx é distribuído sob a licença Apache 2.0. Todos os sistemas operacionais e arquiteturas atuais são suportados, incluindo o Elbrus 2000 da Rússia. O libmdbx oferece uma API avançada para C++, além de bindings mantidos por entusiastas para as linguagens Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Historicamente, o libmdbx é uma reconstrução profunda do SGBD LMDB e supera seu predecessor em confiabilidade, conjunto de funcionalidades e desempenho. Em comparação com o LMDB, o libmdbx dedica grande atenção à qualidade do código, ao funcionamento estável da API, ao teste e a verificações automáticas. É fornecida uma ferramenta de verificação de integridade da estrutura do banco de dados com algumas capacidades de recuperação. Tecnicamente, o libmdbx oferece ACID, estrita serialização de mudanças e leitura não bloqueante com escalonamento linear por núcleos de CPU. Suporta auto compactação, gestão automática do tamanho do banco de dados e estimativa de volume de seleções por intervalos (estimar consulta de intervalo).
Principais mudanças:
- Mudança da licença do código de OpenLDAP Public License para Apache 2.0.
- Extensão da API de cursores com operações de posicionamento mais convenientes e óbvias, semelhantes às condições <, =, > tanto para chaves quanto para pares chave-valor. Funções mdbx_cursor_unbind() e mdbx_txn_release_all_cursors() foram adicionadas para gerenciamento flexível de cursores em cenários de reutilização, reduzindo a sobrecarga. As funções mdbx_cursor_scan() e mdbx_cursor_scan_from() foram implementadas para escanear tabelas usando predicados funcionais, minimizando as despesas associadas.
- Reformulação dos cursores para unificar o comportamento, tornar o código mais regular e reduzir o número de ramificações e operações de máquina.
- Transferência da funcionalidade da ferramenta mdbx_chk para dentro da biblioteca como a função mdbx_env_chk() para verificar a integridade da estrutura do banco de dados, incluindo a lógica do aplicativo.
- Opção MDBX_opt_gc_time_limit para um controle mais flexível do tempo gasto na busca por sequências adjacentes de páginas livres no GC.
- Redução significativa da sobrecarga na inicialização de transações em cenários com um grande número de manipuladores DBI, por meio da inicialização atrasada/lenta dos elementos das tabelas de serviço. Inclui um mecanismo para suportar conjuntos esparsos de manipuladores DBI, controlado pela opção de construção MDBX_ENABLE_DBI_SPARSE, que está habilitada por padrão.
- Redução da sobrecarga na abertura de manipuladores DBI. Inclui um mecanismo de liberação atrasada e suporte para um caminho rápido de abertura sem usar bloqueios, controlado pela opção de construção MDBX_ENABLE_DBI_LOCKFREE, que está habilitada por padrão.
- Suporte para "estacionamento" de transações de leitura com a sua expulsão para reutilizar antigos snapshots MVCC e evitar problemas causados pela pausa na coleta de lixo. O mecanismo de estacionamento e expulsão de transações estacionadas é tanto um complemento quanto uma alternativa mais simples ao retorno de chamada Handle-Slow-Readers. Para conveniência, as funções mdbx_txn_park() e mdbx_txn_unpark() possuem argumentos adicionais que permitem solicitar a "desestacionamento" automático e reinício das transações expulsas. Opções correspondentes -d e -p foram adicionadas à ferramenta mdbx_copy.
- Suporte para a recuperação de um ambiente de trabalho aberto com o BD em um processo filho após o fork do processo através de mdbx_env_resurrect_after_fork().
- Suporte para renomeação de tabelas através de mdbx_dbi_rename() e mdbx_dbi_rename2(). Adicionada a função mdbx_enumerate_tables() para obtenção de informações sobre tabelas nomeadas do usuário.
- Modo de operação MDBX_NOSTICKYTHREADS em vez de MDBX_NOTLS para simplificar a integração com threads leves/multiplexação delas junto com transações de threads do sistema operacional.
- Para identificação do BD, foi adicionado UUID disponível no campo mi_dxbid da estrutura MDBX_envinfo, obtida através de mdbx_env_info_ex(). Implementada a obtenção de informações sobre o BD sem sua abertura através de mdbx_preopen_snapinfo().
- Suporte para funções de registro de chamada sem a funcionalidade vprintf(), o que facilita significativamente o uso de log em ligações a outras linguagens de programação.
- Adição ao API das funções mdbx_txn_copy2pathname() e mdbx_txn_copy2fd().
- Reestruturação do código-fonte com refatoração.
- Uso do termo "tabela" em vez de "subDb".
- Declaração obsoleta das opções MDBX_COALESCE e MDBX_NOTLS. Substituição da opção de compilação MDBX_USE_VALGRIND pela convencional ENABLE_MEMCHECK.
Fonte: opennet.ru
