Publication de la base de données embarquée libmdbx 0.13.7

La sortie de la bibliothèque libmdbx 0.13.7 (MDBX) a été publiée, offrant une base de données intégrée compacte et de haute performance de type clé-valeur. Le code de libmdbx est distribué sous la licence Apache 2.0. Toutes les systèmes d'exploitation et architectures modernes sont pris en charge, y compris l'EiBour 2000 en Russie. libmdbx propose une API développée pour C++, ainsi que des liaisons soutenues par des passionnés pour les langages Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno et Scala. Parmi les projets utilisant libmdbx, on peut citer Isar, Erigon et Reth, ainsi que les développements des entreprises StarkWare et Positive Technologies.

Historiquement, libmdbx est une refonte approfondie de la base de données LMDB et surpasse son prédécesseur en termes de fiabilité, de fonctionnalités et de performances. Comparé à LMDB, libmdbx accorde une grande attention à la qualité du code, à la stabilité de l'API, à la testabilité et aux vérifications automatiques. Un outil de vérification de l'intégrité de la structure de la base de données est également fourni, offrant certaines capacités de récupération. Techniquement, libmdbx propose ACID, une sérialisation stricte des changements et une lecture non bloquante avec un scalabilité linéaire sur les cœurs CPU. La compression automatique, la gestion automatique de la taille de la base de données et l'estimation de la taille des requêtes par intervalles (range query estimation) sont également prises en charge.

Principales modifications :

  • Une erreur critique concernant la fonction mdbx_env_resurrect_after_fork() utilisant les sémaphores SysV a été corrigée. L'erreur ne se produisait qu'après la création d'un processus enfant via fork() pendant une transaction d'écriture en cours, ce qui entraînait un fonctionnement incorrect des sémaphores et pouvait provoquer diverses erreurs, y compris des corruptions de base de données. Le problème existait depuis l'apparition de mdbx_env_resurrect_after_fork() et touchait macOS ainsi que les plateformes POSIX lorsque compilé avec l'option MDBX_LOCKING=5.
  • Un problème dans l'API de copie de base de données, qui se manifestait sur des systèmes POSIX autres que Linux (principalement sur macOS), ainsi que dans certains cas où le fichier cible se trouvait sur un système de fichiers non local, a été résolu. Ce problème entraînait le retour d'une erreur EWOULDBLOCK/EAGAIN, dû à un défaut/conflit de blocages fcntl(F_SETLK) et flock() dans le noyau du système d'exploitation. La gestion des erreurs de capture de blocages de fichiers dans l'API de copie a été retravaillée sur les systèmes POSIX.
  • Une erreur entraînant un retour inattendu de MDBX_BAD_DBI lors du démarrage simultané de plusieurs transactions dans un même processus après l'ouverture de la base de données a été corrigée.
  • Une erreur entraînant un retour inattendu de MDBX_DBS_FULL lors de la réouverture de tables déjà ouvertes, avec un nombre maximal de descripteurs DBI atteints, a été corrigée.
  • Une erreur de compilation pour la plateforme Android lors de la définition explicite de _FILE_OFFSET_BITS a été corrigée.
  • Une erreur dans l'utilisation d'ENOMEM au lieu de MDBX_ENOMEM a été corrigée. Cela pouvait casser la compilation sur des plateformes non-POSIX/Windows, selon la configuration et/ou la version du SDK.
  • Plusieurs vérifications assert incorrectes ont été corrigées ou supprimées, qui entraînaient des plantages dans les builds de débogage dans des situations spécifiques. Principalement dans le code des fonctions txn_end(), txn_lock() et txn_unlock() tant sur Windows que sur POSIX.
  • Les avertissements MSVC non essentiels ont été corrigés. Les avertissements C5286 et C5287 ont été désactivés.
  • La logique d'abandon des verrouillages OFD sur les plateformes POSIX a été améliorée. Désormais, en plus de EINVAL, des codes d'erreur supplémentaires (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP) sont pris en compte, ce qui permettra à la bibliothèque compilée de fonctionner dans certains cas où le noyau/conteneur/émulateur actuel ne prend pas en charge les appel système requis.
  • Le framework de test a été amélioré avec le support de l'option «—numa » pour l'attachement des tests stochastiques à un nœud NUMA. Un script battery/tmux a été ajouté pour une répartition explicite sur les nœuds NUMA, ce qui a considérablement amélioré l'efficacité des tests sur les machines NUMA.
  • Un ordre de lancement aléatoire des tests individuels a été implémenté dans le script stochastique.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster