Les développeurs SQLite développent un backend HC-tree avec prise en charge des écritures parallèles

Les développeurs du projet SQLite ont commencé à tester un backend expérimental HCtree qui prend en charge le verrouillage au niveau des lignes et fournit un haut niveau de parallélisation lors du traitement des requêtes. Le nouveau backend vise à améliorer l'efficacité de l'utilisation de SQLite dans les systèmes client-serveur qui doivent traiter un grand nombre de demandes d'écriture simultanées dans la base de données.

Les structures b-tree utilisées nativement dans SQLite pour stocker les données ne sont pas conçues pour ce type de charge, ce qui limite SQLite à écrire sur un seul thread. À titre expérimental, les développeurs ont commencé à développer une solution alternative utilisant des structures d'arbre HC pour le stockage, plus adaptées à la parallélisation des opérations d'écriture.

Pour permettre l'exécution simultanée de plusieurs opérations, un enregistrement HCtree utilise un mécanisme de partitionnement des transactions qui utilise le verrouillage au niveau de la page et est similaire au MVCC (Multi-Version Concurrency Control), mais utilise des contrôles de transaction basés sur des clés et des plages de clés au lieu d'ensembles de pages. Les opérations de lecture et d'écriture sont effectuées en relation avec un instantané de base de données, dont les modifications ne deviennent visibles dans la base de données principale qu'une fois la transaction terminée.

Les clients peuvent utiliser trois opérations de transaction ouvertes :

  • « BEGIN » : les transactions ne prennent pas en compte les données d'accès des autres clients. Si des opérations d'écriture sont effectuées au sein d'une transaction, la transaction ne peut être validée que si lors de son exécution il n'y a eu aucune autre opération d'écriture dans la base de données.
  • "BEGIN CONCURRENT" - les transactions collectent des informations sur l'accès d'autres clients. Si des opérations d'écriture sont effectuées dans une transaction, la transaction peut être validée si d'autres transactions ont été validées dans la base de données depuis la création de l'instantané.
  • "BEGIN EXCLUSIVE" - après l'ouverture d'une transaction, il bloque les opérations des autres transactions jusqu'à ce qu'elle soit terminée.

HCtree prend en charge la réplication maître-esclave, ce qui vous permet de migrer les transactions vers une autre base de données et de synchroniser les bases de données secondaires avec la base de données principale. HCtree supprime également la limitation de la taille de la base de données : au lieu des identifiants de page de données de 32 bits, HCtree utilise des identifiants de 48 bits, ce qui augmente la taille maximale de la base de données de 16 tébioctets à 1 exbioctet (millions de tébioctets). On s'attend à ce que les performances de SQLite avec le backend HCtree ne soient pas inférieures à celles du backend classique à thread unique. Les clients SQLite prenant en charge HCtree pourront accéder à la fois aux bases de données basées sur HC et aux bases de données SQLite héritées.

Source: opennet.ru

Ajouter un commentaire