libmdbx 0.12.3 est déjà sorti et voici ses nouveautés

libmdbx

libmdbx est une base de données clé-valeur transactionnelle extrêmement rapide, compacte, puissante, intégrée et sous licence permissive.

le sortie de la nouvelle version de libmdbx 0.12.3 (MDBX) une implémentation d'une base de données clé-valeur intégrée compacte et hautes performances.

libmdbx est une profonde refonte du SGBD LMDB et surpasse son prédécesseur en termes de fiabilité, ensemble de fonctionnalités et performances. Par rapport à LMDB, libmdbx met l'accent sur la qualité du code, la stabilité de l'API, les tests et les auto-vérifications.

Principales nouvelles fonctionnalités de libmdbx 0.12.3

Dans cette nouvelle version, nous pouvons trouver que implémenté un choix dynamique entre écriture simultanée sur disque et écriture normal suivi de fdatasync(), contrôlé par l'option MDBX_opt_writethrough_threshold. Dans les modes durables, les données peuvent être vidées sur le disque de deux manières : écriture via un descripteur de fichier ouvert avec O_DSYNC, et écriture normale suivie de fdatasync().

La première méthode c'est plus pratique pour écrire un petit nombre de pages et/ou si le canal de communication avec le disque/média a un retard proche de zéro. La deuxième méthode est pratique si vous avez besoin d'écrire beaucoup de pages et/ou si le canal d'interaction a un retard important (centres de données, nuages). L'option MDBX_opt_writethrough_threshold ajoutée vous permet de définir un seuil au moment de l'exécution pour sélectionner dynamiquement la méthode d'écriture en fonction du volume et des conditions d'utilisation spécifiques.

Un autre changement qui ressort est que ajout d'une option de compilation MDBX_MMAP_USE_MS_ASYNC qui vous permet de désactiver l'utilisation d'un appel système msync(MS_ASYNC), qui n'est pas nécessaire sur la grande majorité des systèmes d'exploitation actuels.

à côté par défaut à MDBX_MMAP_USE_MS_ASYNC=0(désactivé) sur Linux et d'autres systèmes avec cache de page unifié. Ce comportement (sans utiliser msync(MS_ASYNC)) correspond à la logique LMDB codée en dur. En conséquence, dans les benchmarks simples/naïfs, libmdbx surpasse LMDB de la même manière qu'en utilisation réelle.

Juste au cas où, il convient de noter/rappeler une fois de plus que sous Windows, libmdbx devrait être à la traîne de LMDB dans les scénarios avec de nombreuses petites transactions, car libmdbx utilise délibérément des verrous de fichiers sous Windows, qui sont lents (mal implémentés). le système d'exploitation), mais vous permet de protéger les utilisateurs contre le grand nombre d'actions erronées qui conduisent à la corruption de la base de données.

En mode d'allocation/réutilisation MDBX_WRITEMAP, les pages génèrent un défaut de page et la page est lue à partir du disque, même si le contenu de la page n'est pas nécessaire (il sera écrasé). Ceci est une conséquence du travail du sous-système de mémoire virtuelle, et la méthode de traitement MADV_REMOVE habituelle ne fonctionne pas sur tous les systèmes de fichiers et est souvent plus coûteuse que les économies qui en résultent.

En plus de cela, il convient également de noter que libmdbx utilise désormais "l'écriture anticipée" de ces pages, qui, sur les systèmes dotés d'un cache de page unifié, entraîne le "poussage" des données, éliminant ainsi le besoin de lire à partir du disque lors de l'accès à cette page à partir de la mémoire. La nouvelle fonctionnalité fonctionne en conjonction avec la gestion automatique du cache de lecture anticipée et d'état de présence de page dans la RAM, via mincore().

Il est également mentionné que l'écriture avant l'échec a été implémentée lors de l'allocation de pages pour les allocations de lecture et d'écriture. Cela conduit à une réduction multiple des coûts système et à une augmentation significative des performances dans les cas d'utilisation pertinents, lorsque : la taille de la base de données et la quantité de données sont nettement supérieures à la RAM ; Le mode MDBX_WRITEMAP est utilisé ; Transactions non petites (plusieurs centaines ou milliers de pages sont allouées au cours d'une transaction).

Des autres changements qui se démarquent:

  • Ajout d'un contrôle pour l'absence de fichiers LCK avec des noms alternatifs.
  • Prise en charge améliorée de la fusion automatique des enregistrements GC dans page_alloc_slowpath().
  • Impliqué un seul curseur pour rechercher le GC. Drapeaux internes modifiés liés à la pagination du GC.
  • Amélioration de la préparation de la réservation avant la mise à jour du GC avec BigFoot activé.
  • Optimisation de l'utilisation de pnl_merge() pour les cas de listes fusionnées sans chevauchement.
  • Prise en charge optimisée de la liste ordonnée des pages dans dpl_append().
  • Amélioration des performances de mdbx_chk lors du traitement des entrées utilisateur sur @MAIN.
  • Marquages ​​LRU modifiés
  • Contrôle d'"incohérence" du cache de page unifié repensé pour réduire les frais généraux.
  • Installation automatique fournie MDBX_opt_rp_augment_limit en fonction de la taille de la base de données.
  • Ajout de l'option MDBX_opt_prefault_write_enable pour forcer l'activation/la désactivation de l'écriture avant l'erreur.
  • Ajout de la prise en charge des noms non imprimables pour subDb.
    Ajout d'une option explicite tls_model("local-dynamic") pour corriger un problème "la relocalisation R_X86_64_TPOFF32 contre FOO ne peut pas être utilisée avec -shared" en raison d'un bogue dans Clang qui entraînait l'utilisation du mauvais mode ls_model.

Enfin, si vous souhaitez en savoir plus, vous pouvez vérifier les détails dans le lien suivant.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.