Deuxième version candidate de libmdbx v1.0 après cinq ans de développement.

bibliothèque libmdbx est un descendant considérablement repensé de LMDB - une base de données clé-valeur intégrée compacte et extrêmement performante.
La version actuelle v0.5 est une version technique, marque l'achèvement de toutes les améliorations et la transition vers la phase de test final public et de stabilisation, avec la formation ultérieure de la première version complète de la bibliothèque.

BDLM est un SGBD transactionnel clé-valeur intégré assez connu basé sur arbre B+ sans journalisation proactive, qui permet à un essaim de processus multithread de fonctionner de manière compétitive et extrêmement efficace avec une base de données partagée localement (et non en réseau). À son tour, MDBX est plus rapide et plus fiable que LMDB, tandis que libmdbx conserve toutes les fonctionnalités clés de son ancêtre, telles que ACID et des lectures non bloquantes avec une mise à l'échelle linéaire sur les cœurs de processeur, et en ajoute également plusieurs nouvelles.

Une description des différences et des améliorations de libmdbx par rapport à LMDB mérite un article séparé (dont la publication est prévue sur Habré et Medium). Il convient ici de mentionner les plus importants et les plus remarquables :

  • Fondamentalement, une plus grande attention est accordée à la qualité du code, aux tests et aux contrôles automatiques.
  • Beaucoup plus de contrôle pendant le fonctionnement, de la vérification des paramètres à l'audit interne des structures de bases de données.
  • Auto-compactification et 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.
  • Estimation de la taille de l'échantillon par plages (estimation par plage).
  • Prise en charge de clés deux fois plus grandes que les crêpes et taille de page de base de données sélectionnable par l'utilisateur.

La release candidate de libmdbx est le résultat de la décision (voir ci-dessous) de séparer les projets MDBX et MithrilDB en août 2019. Dans le même temps, libmdbx a décidé d'éliminer la dette technique maximale (rationnelle) et de stabiliser la bibliothèque. En fait, 2 à 3 fois plus ont été réalisés dans la direction désignée que ce qui avait été initialement estimé et prévu :

  • La prise en charge de Mac OS et des plates-formes de second niveau a été implémentée : FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. La prise en charge d'AIX et HP-UX peut être ajoutée si nécessaire.
  • Le code a été nettoyé à l'aide d'Undefined Behaviour Sanitizer et d'Address Sanitizer, tous les avertissements lors de la construction avec -Wpedantic, tous les avertissements de Coverity Static Analyser, etc. ont été éliminés.
  • Mise à jour Descriptions des API.
  • Fusion du code source pour faciliter l'intégration.
  • Prise en charge de CMake.
  • Prise en charge des transactions imbriquées.
  • Utilisation de bootid pour déterminer si le système d'exploitation a redémarré (arrêt de la base de données sale).
  • Comptage de bout en bout des pages mises à jour/anciennes et informations de transaction étendues.
  • Option MDBX_ACCEDE pour se connecter à une base de données déjà ouverte en mode compatible.
  • l'utilisation de Blocage OFD quand disponible.
  • Sauvegarde à chaud dans le tuyau.
  • Algorithme de tri interne optimisé spécialisé (jusqu'à 2 à 3 fois plus rapide que qsort() et jusqu'à 30 % plus rapide que std::sort()).
  • La longueur maximale de la clé a été augmentée.
  • Contrôle automatique de la lecture anticipée (stratégie de mise en cache des fichiers de base de données en mémoire).
  • Auto-compactification plus agressive et plus rapide.
  • Une stratégie plus optimale pour fusionner les pages de l'arborescence B+.
  • Contrôle des systèmes de fichiers non locaux (NFS, Samba, etc.) pour éviter d'endommager la base de données en cas de mauvaise utilisation.
  • L'ensemble des tests a été élargi.

Le développement de la « prochaine » version de libmdbx se poursuivra en tant que projet distinct MithrilDB, tandis que le vecteur de développement de la version « actuelle » de MDBX vise à geler l'ensemble des fonctionnalités et à le stabiliser. Cette décision a été prise pour trois raisons :

  • Totalement incompatible : MithrilDB nécessite un format de fichier de base de données différent (incompatible) et une API différente (incompatible) pour implémenter toutes les fonctionnalités prévues.
  • Nouveau code source : le code source de MithrilDB a été rendu sous licence indépendante de LMDB, et le projet lui-même devrait être publié sous une licence différente (approuvée par OSI Licence Apache 2.0Et ce n'est pas Fondation OpenLDAP).
  • La séparation évite toute confusion potentielle, offre plus de certitude et garantit que les projets suivent une voie indépendante.

MithrilDB, comme MDBX, est également basé sur arbre B+ et offrira également des performances extrêmement élevées, tout en éliminant un certain nombre d'inconvénients fondamentaux de MDBX et LMDB. En particulier, le problème des « lectures longues », qui se manifeste par un « gonflement » de la base de données en raison du blocage du traitement des déchets par les transactions de lecture longues, sera éliminé. Les nouvelles fonctionnalités de MithrilDB incluent :

  • prise en charge du placement de la base de données sur plusieurs supports hétérogènes : HDD, SSD et mémoire non volatile.
  • stratégies optimales pour les données « précieuses » et « de faible valeur », pour les données « chaudes », « tièdes » et « froides ».
  • utiliser l'arborescence Merkle pour surveiller l'intégrité de la base de données.
  • utilisation facultative de WAL et performances nettement supérieures dans les scénarios à forte écriture et garanties d'intégrité des données.
  • Fixation de rattrapage paresseuse des données sur les disques.

Source: linux.org.ru

Ajouter un commentaire