La publication de la bibliothÚque libmdbx 0.13.2 (MDBX) avec l'implémentation d'une base de données intégrée compacte et hautes performances de type clé-valeur. Le code libmdbx est distribué sous la licence Apache 2.0. Il prend en charge tous les systÚmes d'exploitation et architectures modernes, ainsi que le Elbrus 2000 russe. Pour libmdbx, une API développée pour C++ est proposée, ainsi que des liaisons à des langages pris en charge par des passionnés tels que Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Historiquement, libmdbx est une réécriture approfondie du SGBD LMDB et surpasse son prĂ©dĂ©cesseur en termes de fiabilitĂ©, de fonctionnalitĂ©s et de performances. Par rapport Ă LMDB, libmdbx accorde une grande importance Ă la qualitĂ© du code, Ă la stabilitĂ© de l'API, aux tests et aux vĂ©rifications automatiques. Un utilitaire de vĂ©rification de l'intĂ©gritĂ© de la structure de la base de donnĂ©es est fourni avec certaines capacitĂ©s de rĂ©cupĂ©ration. Sur le plan technologique, libmdbx propose ACID, une sĂ©rialisation stricte des modifications et une lecture non-bloquante avec une scalabilitĂ© linĂ©aire sur les cĆurs CPU. La compactage automatique est pris en charge, ainsi que la gestion automatique de la taille de la base de donnĂ©es, et l'estimation du volume des Ă©chantillons par plages (estimation des requĂȘtes de plage).
Principales modifications :
- La mise à jour du GC lors du retour/de l'insertion de listes de pages dans des scénarios complexes a été accélérée. Le mode expérimental de rétroaction corrective, qui était auparavant désactivé, a été amélioré et activé. Cela a fondamentalement amélioré la convergence (réduisant le nombre de tentatives répétées), et le défaut provoquant un "bouclage" lors du commit des transactions (avec retour de l'erreur MDBX_PROBLEM) dans des conditions spécifiques rares a été éliminé.
- Le standard C23 a été inclus dans les scripts d'assemblage CMake.
- Des macros T ont été ajoutées pour les fonctions par paires char/wchar_t.
- Le support des transactions d'écriture imbriquées a été ajouté à l'API C++.
- La transition vers la deuxiÚme édition de la spécification de versionnement sémantique (« Semantic Versioning 2 ») a été réalisée et l'exportation d'informations de version dans VERSION.json a été assurée.
- Pour garantir la reproductibilité des assemblages, le support de la variable d'environnement SOURCE_DATE_EPOCH a été ajouté. La prise en charge de MDBX_BUILD_TIMESTAMP a été conservée et cette variable a la priorité.
- Il est maintenant possible de spécifier des informations supplémentaires sur l'assemblage de libmdbx via l'option MDBX_BUILD_METADATA. Les informations fournies sont désormais simplement intégrées dans la bibliothÚque en tant que valeur mdbx_build.metadata, et seront également utilisées ultérieurement lors de la création de paquets, etc.
- Un journal des erreurs retournées par l'API a été ajouté. Désormais, il suffit de définir le niveau de journalisation MDBX_LOG_DEBUG (pour journaliser les erreurs sauf MDBX_NOTFOUND) ou MDBX_LOG_TRACE (pour journaliser toutes les erreurs, y compris MDBX_RESULT_TRUE).
- Changement de comportement :
- Le méthode mdbx::cursor::get_multiple_samelength() a été ajoutée et mdbx::txn::put_multiple_samelength() a été renommé.
- Pour l'uniformitĂ© de l'API C++, lors de l'exĂ©cution de l'opĂ©ration MDBX_GET_MULTIPLE, la valeur de la clĂ© elle-mĂȘme est Ă©galement retournĂ©e.
- Pour les constantes de taille, le type de base de mdbx::env::geometry a été changé de size_t non signé à intptr_t signé.
- Le choix d'utiliser ntdll au lieu de CRT est désormais fait uniquement lorsqu'il est explicitement désactivé pour l'API C++.
- La libĂ©ration de la mĂ©moire des transactions de lecture abandonnĂ©es/interrompues transmises Ă mdbx_txn_commit() est garantie. La convention API exige que de telles transactions soient libĂ©rĂ©es via mdbx_txn_abort(), ce qui a conduit Ă ce que la fonction mdbx_txn_commit() renvoie une erreur dans ces cas, sans dĂ©truire les transactions elles-mĂȘmes. Ceci a entraĂźnĂ© des fuites de mĂ©moire dues Ă des erreurs dans les applications, ce qui a conduit Ă une modification du comportement.
- Utilisation du macro __deprecated_enum, si défini.
- Lors de la construction avec CMake, le choix du standard du langage C est désormais effectué en tenant compte de CMAKE_C_STANDARD.
Source : opennet.ru
