Sortie du SGBD libmdbx 0.11.7. Déplacer le développement vers GitFlic après le verrouillage sur GitHub

La bibliothèque libmdbx 0.11.7 (MDBX) a été publiée avec l'implémentation d'une base de données clé-valeur compacte intégrée hautes performances. Le code libmdbx est distribué sous la licence publique OpenLDAP. Tous les systèmes d'exploitation et architectures actuels sont pris en charge, ainsi que le russe Elbrus 2000.

La version est remarquable pour la migration du projet vers le service GitFlic après que l'administration GitHub a supprimé libmdbx ainsi qu'une foule d'autres projets le 15 avril 2022 sans aucun avertissement ni explication, tout en bloquant simultanément l'accès à de nombreux développeurs associés à des entreprises tombées. sous sanctions américaines. Du point de vue de l'utilisateur, toutes les pages, le référentiel et les forks du projet se sont soudainement transformés en une page "404", sans possibilité de communication et de découverte des raisons.

Malheureusement, presque tous les numéros ont été perdus, dans lesquels il y avait de nombreuses questions avec des réponses détaillées, ainsi que de nombreuses discussions. La perte de ces informations est le seul dommage objectif que l'administration GitHub a réussi à infliger au projet. Des copies partielles des discussions restent disponibles dans l'archive archive.org.

La perte des scripts et de l'infrastructure CI intégrés (disponibles gratuitement pour les projets OpenSource) nous a obligés à procéder à la révision, à l'unification et à l'élimination d'une petite dette technique. Maintenant, CI a été restauré presque dans la même mesure, à l'exception des versions et des tests pour toutes les variantes BSD et Solaris. Fait révélateur, après les actions de GitHub, aucune clarification ou notification n'a été reçue, à part un rappel de la nécessité d'un paiement et des tentatives de radiation de l'argent.

Depuis les dernières nouvelles concernant la sortie de libmdbx v0.11.3, en plus de la récupération des actions GitHub, les améliorations et correctifs suivants méritent d'être notés :

  • Ajout d'une solution de contournement pour un effet/défaut d'incohérence détecté dans la page combinée et le cache de tampon dans le noyau Linux. Sur les systèmes où les caches de pages et de tampons sont vraiment unifiés, cela n'a aucun sens que le noyau gaspille de la mémoire sur deux copies de données lors de l'écriture dans un fichier déjà mappé en mémoire. Par conséquent, les données en cours d'écriture deviennent visibles via le mappage de la mémoire avant la fin de l'appel système write(), même si les données n'ont pas encore été écrites sur le disque.

    Au total, un autre comportement n'est pas rationnel, car avec une fusion retardée, vous devez toujours saisir des verrous pour les listes de pages, copier des données ou ajuster le PTE. Par conséquent, la règle tacite de cohérence est en vigueur depuis 1989, lorsque le cache de tampon unifié est apparu dans SRV4. Par conséquent, trouver des échecs étranges dans des scénarios de production libmdbx occupés a nécessité beaucoup de travail. D'abord en reproduisant le problème, puis en vérifiant les hypothèses et en vérifiant les améliorations.

    Nous pouvons maintenant affirmer avec certitude que le problème a été identifié, localisé et éliminé de manière fiable, malgré la complexité et la spécificité du scénario de lecture. De plus, le travail du mécanisme de contournement a été confirmé par l'un des développeurs d'Erigon (Ethereum), dans son cas, sur la version de débogage, la protection s'est déclenchée comme une régression en raison d'une vérification d'assertion supplémentaire.

    Il convient de noter que dans le contexte de l'utilisation généralisée de libmdbx dans les projets de travail, il est fondamentalement plus important d'assurer un fonctionnement fiable, plutôt que de découvrir "est-ce un bogue ou une fonctionnalité" et si une telle cohérence peut être invoquée, surtout ne pas trouver les causes d'incohérence au sein du noyau Linux. Par conséquent, nous parlons ici de résoudre un problème qui pourrait affecter les utilisateurs.

  • Correction d'une régression de l'erreur EXDEV (Cross-device link) lors de la copie à chaud d'une base de données sans compactification vers un autre système de fichiers, à la fois via l'API et à l'aide de l'utilitaire mdbx_copy.
  • Kris Zyp a implémenté la prise en charge de libmdbx dans Deno. Kai Wetlesen a empaqueté les RPM pour Fedora. David Bouyssié a implémenté des liaisons pour Scala.
  • Correction du traitement de la valeur définie par l'option MDBX_opt_rp_augment_limit lors du traitement de transactions volumineuses dans de grandes bases de données. Auparavant, en raison d'un bogue, des actions inutiles pouvaient être effectuées, ce qui affectait parfois les performances des implémentations Ethereum (Erigon/Akula/Silkworm) et des projets Binance Chain.
  • De nombreux bogues ont été corrigés, y compris ceux de l'API C++. Correction de nombreux problèmes de construction dans des configurations rares et exotiques. Une liste complète de toutes les améliorations significatives est disponible dans le ChangeLog.
  • Au total, 185 modifications ont été apportées à 89 fichiers, ≈3300 lignes ont été ajoutées, ≈4100 ont été supprimées. Supprimé principalement en raison de la purge des fichiers techniques déjà inutiles associés à GitHub et aux services dépendants.

Historiquement, libmdbx est une refonte profonde du SGBD LMDB et surpasse son ancêtre en termes de fiabilité, de fonctionnalités et de performances. Par rapport à LMDB, libmdbx met beaucoup l'accent sur la qualité du code, la stabilité de l'API, les tests et les vérifications automatisées. Un utilitaire de vérification de l'intégrité de la structure de la base de données est fourni avec certaines options de récupération.

Technologiquement, libmdbx offre ACID, une sérialisation stricte des changements et des lectures non bloquantes avec une mise à l'échelle linéaire sur les cœurs de processeur. La compactification automatique, la gestion automatique de la taille de la base de données et l'estimation des requêtes de plage sont prises en charge. Depuis 2016, le projet est financé par Positive Technologies et est utilisé dans ses produits depuis 2017.

libmdbx offre une API C++ développée, ainsi que des liaisons prises en charge par les passionnés pour Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Source: opennet.ru

Ajouter un commentaire