Publication de la base de données embarquée haute performance libmdbx 0.10.4 et libfpta 0.3.9.

La sortie des bibliothèques libmdbx 0.10.4 (MDBX) a eu lieu, offrant une base de données embarquée compacte et hautes performances de type clé-valeur, ainsi que la bibliothèque associée libfpta 0.3.9 (FPTA), qui propose une représentation tabulaire des données avec des index secondaires et composites au-dessus de MDBX. Les deux bibliothèques sont distribuées sous des licences approuvées par l'OSI. Elles prennent en charge tous les systèmes d'exploitation et architectures actuels, ainsi que l'Elbrus 2000 russe.

Historiquement, libmdbx est une refonte approfondie de la SGBD LMDB et surpasse son prédécesseur en termes de fiabilité, de fonctionnalités et de performance. Comparé à LMDB, libmdbx accorde une attention particulière à 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 possibilités de récupération.

Technologiquement, libmdbx propose ACID, une sérialisation stricte des modifications et une lecture non bloquante avec une évolutivité linéaire en fonction des cœurs de CPU. L'auto-compaction est prise en charge, ainsi que la gestion automatique de la taille de la base de données et l'estimation des volumes de requêtes par plage. Depuis 2016, le projet est financé par la société Positive Technologies et est utilisé dans ses produits depuis 2017.

Pour libmdbx, une API C++ est proposée, ainsi que des liaisons prises en charge par des passionnés pour les langages Rust, Haskell, Python, NodeJS, Ruby, Go et Nim. Pour libfpta, seule une description de l'API est publiquement disponible sous forme de fichier d'en-tête C/C++.

Les principales nouveautés, modifications et corrections apportées depuis la dernière mise à jour du 9 mai :

  • La possibilité de compilations reproductibles a été assurée.
  • Un bug a été corrigé, qui pouvait entraîner un blocage dans des circonstances très rares lors de l'engagement d'une transaction. Ce problème a été identifié par des spécialistes de Positive Technologies lors des tests internes de ses propres produits.
  • Les tests ont été améliorés et les scénarios de test étendus pour vérifier tous les états non isomorphiques atteignables de l'arbre de pages et le contenu du GC à l'intérieur de la base de données.
  • Dans l'API C++, un « noexcept » superflu a été corrigé, des surcharges supplémentaires pour la méthode « cursor::erase() » ont été ajoutées, et l'implémentation des tampons a été débarrassée de l'utilisation de « std::string » pour garantir l'alignement (pertinent pour CLANG libstdc++).
  • Un problème a été résolu dans l'algorithme de spillage des pages sales (éviction sélective des pages modifiées de la base de données), qui se manifestait par une rare erreur inattendue MDBX_PROBLEM lors de la modification de données dans d'énormes transactions.
  • Un contrôle de phase a été effectué avec l’ajout de plusieurs vérifications pour assurer la stabilité lors des dommages intentionnels à la base de données.
  • Des avertissements mineurs d'UndefinedBehaviorSanitizer et des problèmes de Coverity Scan ont été supprimés.
  • La vérification d'un ancien et déjà inutilisé drapeau interne « P_DIRTY » dans les pages imbriquées des images de base de données créées avec d’anciennes versions de la bibliothèque a été corrigée.
  • Les scripts CMake ont été améliorés pour rechercher les composants du compilateur nécessaires pour LTO (optimisation à l'heure de la liaison).
  • Le nombre maximal de lecteurs simultanés a été augmenté à 32767.
  • Les performances ont été accélérées lors de l'utilisation de Valgrind et d'AddressSanitizer.
  • Sous Windows, l'utilisation récursive du SRW-lock a été éliminée lors de l'exécution en mode MDBX_NOTLS (sans utilisation de stockage local pour les threads), la génération de bootid a été corrigée en cas de changement de l'heure système, la détection de WSL1 et WSL2 a été améliorée, et il est désormais possible d'ouvrir la base de données sur Plan 9 monté via DrvFS.
  • Au total, plus de 160 modifications ont été apportées dans 57 fichiers, environ 5000 lignes ajoutées et environ 2500 lignes supprimées.

Je tiens à remercier spécialement l'équipe du projet Erigon (écosystème Ethereum) pour leur aide dans les tests en scénarios d'utilisation extrêmes. Il est notable qu'en cinq mois depuis la sortie de libmdbx v0.10.0, avec un volume de base de données de 1 à 2 To pour chaque installation Erigon (utilisée sur 7 % des nœuds Ethereum), seulement trois rapports de corruption de base de données ont été reçus, tous dus à des causes externes et non à des erreurs logicielles : dans deux cas, les pannes étaient causées par des défaillances de la RAM et, dans le troisième, une erreur de remise à zéro des données dans une configuration spécifique du sous-système de stockage utilisant BTRFS.

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