La version 0.13.3 de la bibliothÚque libmdbx (MDBX) a été publiée, offrant une base de données intégrée compacte et performante de type clé-valeur. Le code de libmdbx est distribué sous la licence Apache 2.0. Toutes les systÚmes d'exploitation et architectures récents sont pris en charge, y compris le Elbrus 2000 russe. Libmdbx propose une API étoffée pour C++, ainsi que des liaisons supportées par des passionnés pour les langages 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 branche 0.13.x a été déclarée stable. Le développement de la branche 0.14.x a commencé.
- La fonction mdbx_cursor_count_ex() a été ajoutée à l'API C, permettant d'obtenir à la fois le nombre de valeurs multiples correspondant à la clé actuelle et des informations sur l'arbre imbriqué stockant ces valeurs.
- La méthode mdbx::txn::make_broken() a été ajoutée à l'API C++, similaire à mdbx_txn_break().
- Les utilitaires mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load et mdbx_stat implémentent maintenant la journalisation des erreurs, avertissements et messages importants de libmdbx.
- Changement de comportement :
- Lorsque le profilage du ramasse-miettes est activé (compilation avec l'option MDBX_ENABLE_PROFGC=ON), le temps CPU consacré à la fusion des listes de pages est maintenant comptabilisé, c'est-à -dire le fonctionnement de la fonction pnl_merge().
- Dans l'utilitaire de test, la valeur du mode de données a été renommée de data.dups en data.multi.
- Le contrÎle de la longueur de la clé dans cursor_seek() a été amélioré.
- Si aucune valeur n'est définie par l'utilisateur via mdbx_env_set_option(MDBX_opt_txn_dp_limit), le dirty-pages-limit est ajusté au démarrage de chaque transaction d'écriture non imbriquée, en fonction de la quantité de RAM disponible et de la taille de la base de données.
- En mode MDBX_NOSTICKYTHREADS, le commit/abort des transactions imbriquées est autorisé depuis n'importe quel thread.
- Lors de la tentative de lancement de transactions imbriquées en mode MDBX_WRITEMAP, un journal est créé et une erreur MDBX_INCOMPATIBLE est retournée.
- Dans l'API C++, seuls les valeurs par défaut sont utilisées par défaut dans les constructeurs/initiateurs et les méthodes liées à la formation de la géométrie de la base de données.
- à l'intérieur de mdbx_env_set_geometry(), des heuristiques ont été améliorées pour le choix des paramÚtres de géométrie de la base de données demandés par l'utilisateur par défaut.
- Corrections :
- Un régressif concernant le déblocage du mutex lors de la tentative de fermeture répétée du descripteur dbi a été corrigé, y compris lors de la tentative de fermeture explicite du descripteur aprÚs la suppression de la table associée.
- Un régressif sur l'état du curseur imbriqué/dupsort aprÚs l'insertion de données en mode MDBX_APPEND a été corrigé.
- Prise en charge de l'obtention de boot_id lors de l'exécution à l'intérieur d'un conteneur LXC.
- Une erreur de traitement incorrect des tentatives de lancement d'une transaction de lecture imbriquée a été corrigée. Dans de telles situations, l'erreur MDBX_EINVAL est maintenant retournée, car l'imbrication n'est prise en charge que pour les transactions de lecture-écriture.
- Un régressif SIGSEGV d'accÚs à une adresse nulle lorsque vous travaillez en mode lecture seule sans utiliser de fichier LCK, par exemple lorsque la base de données est stockée sur un support en lecture seule, a été corrigé.
Source : opennet.ru
