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 offre un haut niveau de parallĂ©lisme lors du traitement des requĂȘtes. Ce nouveau backend vise Ă amĂ©liorer l'efficacitĂ© de l'utilisation de SQLite dans les systĂšmes client-serveur, oĂč un grand nombre de requĂȘtes simultanĂ©es d'Ă©criture dans la base de donnĂ©es doivent ĂȘtre traitĂ©es.
Les structures b-tree, initialement utilisées dans SQLite pour le stockage des données, ne sont pas conçues pour ce type de charge, ce qui limite SQLite à effectuer des écritures dans un seul thread. En expérimentation, les développeurs ont commencé à développer une solution alternative utilisant des structures HC-tree, plus adaptées au parallélisme des opérations d'écriture.
Pour organiser l'exécution simultanée de plusieurs opérations d'écriture dans HCtree, un mécanisme de séparation des transactions est utilisé, reposant sur des verrous au niveau des pages et similaire au MVCC (contrÎle d'accÚs multi-version), mais utilisant des vérifications de transactions basées sur des clés et des plages de clés au lieu de jeux de pages. Les opérations de lecture et d'écriture sont effectuées par rapport à un instantané de la base de données, dont les modifications ne deviennent visibles dans la base de données principale qu'à la fin de la transaction.
Les clients peuvent utiliser trois opérations pour ouvrir des transactions :
- «BEGIN» â les transactions ne tiennent pas compte des donnĂ©es d'accĂšs d'autres clients. Si des opĂ©rations d'Ă©criture sont effectuĂ©es dans le cadre de la transaction, celle-ci ne peut ĂȘtre validĂ©e que si aucune autre opĂ©ration d'Ă©criture dans la base de donnĂ©es n'a eu lieu durant son exĂ©cution.
- «BEGIN CONCURRENT» â les transactions collectent des informations sur l'accĂšs par d'autres clients. Si des opĂ©rations d'Ă©criture sont rĂ©alisĂ©es dans le cadre de la transaction, celle-ci 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 de la transaction, elle bloque les opĂ©rations d'autres transactions jusqu'Ă son achĂšvement.
HCtree prend en charge la rĂ©plication de type « maĂźtre-esclave », permettant de transfĂ©rer des transactions vers une autre base de donnĂ©es et de maintenir des bases secondaires synchronisĂ©es avec la base principale. HCtree supprime Ă©galement la limite de taille de la base de donnĂ©es : au lieu des identifiants de pages 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Ă©biooctets Ă 1 exbiooctet (un million de tĂ©biooctets). La performance de SQLite avec le backend HCtree devrait ĂȘtre au moins Ă©quivalente Ă celle du backend classique Ă thread unique. Les clients SQLite prenant en charge HCtree pourront accĂ©der Ă la fois Ă une base de donnĂ©es basĂ©e sur la structure HC-tree et Ă d'anciennes bases de donnĂ©es SQLite.
Source : opennet.ru
