Sortie du SGBD embarqué hautes performances libmdbx 0.10

Après trois mois de développement, libmdbx 0.10.0 (MDBX) a été publié, implémentant une base de données clé-valeur intégrée compacte et hautes performances. Le code libmdbx est sous licence publique OpenLDAP. libmdbx est une refonte en profondeur du SGBD LMDB et, selon les développeurs, est supérieur à son ancêtre en termes de fiabilité, de gamme de capacités et de performances. Il est indiqué que libmdbx est jusqu'à 20 % plus rapide que LMDB dans les scénarios CRUD et jusqu'à 30 % plus rapide si les contrôles internes sont désactivés lors de la construction de libmdbx à un niveau comparable à LMDB.

Libmdbx offre ACID, une sérialisation forte des modifications et des lectures non bloquantes qui évoluent de manière linéaire sur les cœurs de processeur. Dans libmdbx, une grande attention est accordée à la qualité du code, au fonctionnement stable de l'API, aux tests et aux vérifications automatiques. Prend en charge l'auto-compactification, la gestion automatique de la taille de la base de données, un format de base de données unique pour les assemblys 32 bits et 64 bits et l'estimation des requêtes de plage. Un utilitaire permettant de vérifier l'intégrité de la structure de la base de données avec certaines capacités de récupération est fourni. Depuis 2016, le projet est financé par Positive Technologies et est utilisé dans ses produits depuis 2017, et les sanctions imposées par le gouvernement américain contre Positive Technologies n'ont pas d'impact notable.

Innovations majeures, améliorations et correctifs ajoutés depuis la dernière version :

  • Une liaison Ruby de Mahlon E. Smith et une version d'essai des liaisons Python de Noel Kuntze sont disponibles, et les liaisons GoLang d'Alexey Sharov ont été mises à jour.
  • Pour le mode « MDBX_WRITEMAP », lorsque les données de la base de données sont modifiées directement dans la RAM, un « déversement transparent » des pages de base de données modifiées sur le disque est implémenté. Désormais, après l'achèvement de chaque opération, ces pages sont immédiatement complètement prêtes à être écrites sur le disque et le noyau du système d'exploitation peut indépendamment vider les pages modifiées sur le disque, et la validation d'une transaction ne nécessitera pas leur modification. En conséquence, dans des scénarios chargés avec une RAM insuffisante, le volume des opérations sur disque peut être réduit jusqu'à 2 fois.
  • Mise en œuvre de l'expulsion des clichés instantanés inutilisés depuis longtemps des pages modifiées, avec une préférence pour l'expulsion des pages avec des valeurs grandes/longues, qui dans la grande majorité des scénarios ne sont modifiées qu'une seule fois par transaction. Le résultat est une réduction du trafic disque et des performances améliorées dans les scénarios impliquant des transactions très volumineuses.
  • Implémentation d'un mode « intelligent » pour diviser les pages lors de l'insertion de clés. Désormais, lors de l'insertion de séquences ordonnées, les pages sont automatiquement complètement remplies et, dans d'autres cas, l'arborescence est équilibrée de manière plus optimale. En conséquence, en moyenne, les pages de la base de données sont remplies de manière plus optimale et le B-tree est plus équilibré, ce qui a un effet positif sur les performances.
  • Des statistiques d'opérations avec des pages ont été ajoutées, ce qui permet d'estimer avec précision le coût des opérations de modification avec la base de données.
  • Plus d'une douzaine de bugs et bugs ont été corrigés, notamment : des problèmes de construction à l'aide de MinGW, d'utilisation de `std::filesystem::path` dans iOS <= 13.0, de construction ciblant les anciennes versions de Windows, etc.
  • Au total, plus de 200 modifications ont été apportées à 66 fichiers, environ 6500 4500 lignes ont été ajoutées et environ XNUMX ont été supprimées.

Par ailleurs, je voudrais souligner le choix du projet Turbo-Geth (un turbo fork de Go-Ethereum) libmdbx comme nouveau backend de stockage, et remercier également l'équipe du projet (notamment Alexey Sharov, Artyom Vorotnikov et Alexey Akhunov) pour leur une grande aide pour les tests dans des scénarios de cas d'utilisation extrêmes. En particulier, un défaut dans le contrôle de lecture anticipée/mise en cache a été découvert et éliminé, ce qui a entraîné une dégradation des performances dans des scénarios difficiles à reproduire avec de grandes bases de données.

Source: opennet.ru

Ajouter un commentaire