Foi publicado o lançamento da biblioteca libmdbx 0.13.2 (MDBX) com implementação de um banco de dados incorporado compacto e de alto desempenho do tipo chave-valor. O código libmdbx é distribuído sob a licença Apache 2.0. São suportados todos os sistemas operacionais e arquiteturas atuais, incluindo o Elbrus 2000. Para o libmdbx, uma API desenvolvida para C++ é oferecida, bem como ligações mantidas por entusiastas para as linguagens Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno e 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:
- A atualização do GC ao retornar/armazenar listas de páginas em cenários complexos foi acelerada. O modo experimental de feedback corretivo, que estava anteriormente desativado, foi aprimorado e ativado. Isso melhorou significativamente a convergência (reduzindo o número de tentativas), além de eliminar um defeito que levava a um 'loop' ao confirmar transações (com retorno do erro MDBX_PROBLEM) em raras condições específicas.
- O padrão C23 foi incluído nos scripts de construção CMake.
- Foram adicionados macros T para funções emparelhadas char/wchar_t.
- Foi adicionada ao API C++ a suporte para transações aninhadas de escrita.
- Foi realizada a transição para a segunda edição da especificação de versionamento semântico ('Semantic Versioning 2') e garantido a exportação de informações de versão para VERSION.json.
- Para a reprodutibilidade das compilações, foi adicionada o suporte à variável de ambiente SOURCE_DATE_EPOCH. O suporte ao MDBX_BUILD_TIMESTAMP foi mantido e esta variável tem prioridade.
- Foi adicionada a possibilidade de especificar informações adicionais sobre a construção do libmdbx via a opção MDBX_BUILD_METADATA. As informações fornecidas agora são simplesmente incluídas dentro da biblioteca como valor de mdbx_build.metadata, e no futuro também serão utilizadas na formação de pacotes, etc.
- Foi adicionado o registro de erros retornados pela API. Agora, para isso, basta definir o nível de registro MDBX_LOG_DEBUG (para registrar erros exceto MDBX_NOTFOUND) ou MDBX_LOG_TRACE (para registrar todos os erros, assim como MDBX_RESULT_TRUE).
- Mudança de comportamento:
- Foi adicionado o método mdbx::cursor::get_multiple_samelength() e renomeado o mdbx::txn::put_multiple_samelength().
- Para uniformidade da API C++, ao executar a operação MDBX_GET_MULTIPLE, agora também retorna o próprio valor da chave.
- Para as constantes dimensionais mdbx::env::geometry, o tipo básico foi alterado de unsigned size_t para signed intptr_t.
- A escolha de usar ntdll em vez do CRT agora só é feita quando a API C++ é explicitamente desativada.
- Liberar a memória das transações de leitura canceladas/interrompidas, passadas para mdbx_txn_commit(). O acordo da API exige que tais transações sejam liberadas através de mdbx_txn_abort(), o que causava um erro na função mdbx_txn_commit() nesses casos, sem destruir as próprias transações. Isso resultava em vazamentos de memória devido a erros nos aplicativos, levando a uma mudança de comportamento.
- Uso do macro __deprecated_enum, se definido.
- Na construção via CMake, a seleção do padrão C agora considera CMAKE_C_STANDARD.
Fonte: opennet.ru
