Lançamento do DBMS incorporado libmdbx 0.13.3

O lançamento do libmdbx 0.13.3 (MDBX) foi publicado, implementando um banco de dados de valores-chave integrado e compacto de alto desempenho. O código libmdbx é distribuído sob a licença Apache 2.0. Todos os sistemas operacionais e arquiteturas atuais são suportados, assim como o russo Elbrus 2000. libmdbx oferece uma API desenvolvida para C++, bem como ligações suportadas por entusiastas para as linguagens Rust, Haskell, Python, NodeJS, Ruby, Go, Nim , Deno, Scala.

Historicamente, libmdbx é uma reformulação profunda do SGBD LMDB e é superior ao seu ancestral em confiabilidade, conjunto de recursos e desempenho. Comparado ao LMDB, o libmdbx dá muita ênfase à qualidade do código, estabilidade da API, testes e verificações automatizadas. É fornecido um utilitário para verificar a integridade da estrutura do banco de dados com alguns recursos de recuperação. Em termos de tecnologia, libmdbx oferece ACID, forte serialização de alterações e leituras sem bloqueio com escala linear entre núcleos de CPU. Há suporte para compactação automática, gerenciamento automático de tamanho de banco de dados e estimativa de consulta de intervalo.

Grandes mudanças:

  • A ramificação 0.13.x recebeu status estável. O desenvolvimento do branch 0.14.x já começou.
  • A função mdbx_cursor_count_ex() foi adicionada à API C, que permite obter o número de valores múltiplos correspondentes à chave atual e informações sobre a árvore aninhada que armazena esses valores.
  • O método mdbx::txn::make_broken(), semelhante a mdbx_txn_break(), foi adicionado à API C++.
  • Os utilitários mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat implementam o registro de erros, avisos e mensagens importantes da libmdbx.
  • Mudança de comportamento:
    • Quando o perfil do GC está habilitado (construído com a opção MDBX_ENABLE_PROFGC=ON), o tempo de CPU gasto na mesclagem de listas de páginas agora é calculado, ou seja, para que a função pnl_merge() funcione.
    • No utilitário de teste, o valor do modo de dados foi renomeado de data.dups para data.multi.
    • Controle de comprimento de chave aprimorado dentro de cursor_seek().
    • Se o usuário não especificar o valor real usando mdbx_env_set_option(MDBX_opt_txn_dp_limit), então o limite de páginas sujas será ajustado no início de cada transação de gravação não aninhada, com base na quantidade de RAM disponível e no tamanho do banco de dados.
    • No modo MDBX_NOSTICKYTHREADS, é permitido confirmar/abortar transações aninhadas de qualquer thread/thread.
    • Ao tentar executar transações aninhadas no modo MDBX_WRITEMAP, o log é executado e o erro MDBX_INCOMPATIBLE é retornado.
    • Na API C++, em construtores/inicializadores e métodos relacionados à formação da geometria do banco de dados, apenas valores padrão são usados ​​por padrão.
    • Dentro de mdbx_env_set_geometry(), as heurísticas para seleção dos parâmetros de geometria do banco de dados solicitados pelo usuário “por padrão” foram melhoradas.
  • Conserta:
    • Corrigida uma regressão do mutex não sendo desbloqueado ao tentar fechar novamente um descritor dbi, inclusive ao tentar fechar explicitamente o descritor após excluir a tabela associada a ele.
    • Corrigida a regressão do estado do cursor aninhado/dupsort após a inserção de dados no modo MDBX_APPEND.
    • Suporte para obter boot_id ao trabalhar dentro de um contêiner LXC.
    • Corrigido um problema com processamento incorreto de uma tentativa de iniciar uma transação de leitura aninhada. O erro MDBX_EINVAL agora é retornado nessas situações porque o aninhamento só é suportado para transações de leitura e gravação.
    • Foi eliminada a regressão SIGSEGV de acesso ao endereço zero ao trabalhar em modo somente leitura sem usar um arquivo LCK, por exemplo, ao colocar o banco de dados em mídia somente leitura.

Fonte: opennet.ru

Adicionar um comentário