lancement de la base de donnĂ©es distribuĂ©e , dĂ©veloppĂ©e sous l'influence des technologies de Google et . TiDB fait partie des systĂšmes hybrides HTAP (Hybrid Transactional/Analytical Processing), capables Ă la fois d'assurer l'exĂ©cution de transactions en temps rĂ©el (OLTP) et de traiter des requĂȘtes analytiques. Le projet est Ă©crit en Go et sous licence Apache 2.0.
Caractéristiques de TiDB :
- Prise en charge de SQL et fourniture d'une interface client compatible avec le protocole MySQL, facilitant l'adaptation des applications existantes pour TiDB déjà écrites pour MySQL, tout en permettant d'utiliser des bibliothÚques clientes largement répandues. En plus du protocole MySQL pour accéder à la base de données, il est possible d'utiliser une API basée sur JSON et un connecteur pour Spark.
- Les fonctionnalitĂ©s SQL incluent les index, les fonctions d'agrĂ©gation, les expressions GROUP BY, ORDER BY, DISTINCT, les jointures (LEFT JOIN / RIGHT JOIN / CROSS JOIN), les vues, les fonctions analytiques et les sous-requĂȘtes. Les fonctionnalitĂ©s fournies sont suffisantes pour le fonctionnement avec TiDB d'applications web telles que PhpMyAdmin, et WordPress ;
- PossibilitĂ© d'Ă©voluer horizontalement et d'assurer la rĂ©silience : la taille du stockage et la puissance de calcul peuvent ĂȘtre augmentĂ©es simplement en ajoutant de nouveaux nĆuds. Les donnĂ©es sont rĂ©parties sur les nĆuds avec redondance, permettant la continuitĂ© de l'opĂ©ration en cas de dĂ©faillance de nĆuds individuels. Les pannes sont gĂ©rĂ©es automatiquement.
- Le systĂšme garantit la cohĂ©rence et pour le logiciel client il apparaĂźt comme une grande base de donnĂ©es, mĂȘme si, en rĂ©alitĂ©, les donnĂ©es proviennent de nombreux nĆuds pour exĂ©cuter une transaction.
- Pour le stockage physique des donnĂ©es sur les nĆuds, diffĂ©rents backends peuvent ĂȘtre utilisĂ©s, par exemple, les moteurs de stockage locaux GoLevelDB et BoltDB ou son propre moteur de stockage distribuĂ© .
- PossibilitĂ© de modifier la structure de stockage de maniĂšre asynchrone, permettant d'ajouter des colonnes et des index Ă la volĂ©e sans arrĂȘter le traitement des opĂ©rations en cours.
Principales :
- Des efforts ont Ă©tĂ© consacrĂ©s Ă l'amĂ©lioration des performances. Dans le test Sysbench version 3.0, il dĂ©passe la branche 2.1 de 1,5 fois lors de l'exĂ©cution des opĂ©rations de sĂ©lection et de mise Ă jour, et dans le test TPC-C, de 4,5 fois. Les optimisations ont concernĂ© diffĂ©rents types de requĂȘtes, y compris les sous-requĂȘtes « IN », « DO » et « NOT EXISTS », les opĂ©rations de jointure de tables (JOIN), l'utilisation des index et bien d'autres;
- Un nouveau moteur de stockage TiFlash a Ă©tĂ© ajoutĂ©, permettant d'atteindre de meilleures performances lors de l'exĂ©cution de tĂąches analytiques (OLAP), grĂące Ă un stockage en colonne. TiFlash complĂšte le stockage TiKV prĂ©cĂ©demment proposĂ©, qui stockait les donnĂ©es sous forme de lignes dans un format clĂ©/valeur, plus optimal pour les tĂąches de traitement des transactions (OLTP). TiFlash fonctionne en complĂ©ment de TiKV, et les donnĂ©es continuent d'ĂȘtre rĂ©pliquĂ©es dans TiKV comme auparavant, en utilisant le protocole Raft pour Ă©tablir un consensus, mais pour chaque groupe de rĂ©pliques Raft, une rĂ©plique supplĂ©mentaire est créée, utilisĂ©e dans TiFlash. Cette approche permet une meilleure sĂ©paration des ressources entre les tĂąches OLTP et OLAP, et rend Ă©galement les donnĂ©es de transaction instantanĂ©ment accessibles pour les requĂȘtes analytiques.
- Un collecteur de dĂ©chets distribuĂ© a Ă©tĂ© mis en Ćuvre, permettant d'amĂ©liorer considĂ©rablement la vitesse de collecte des dĂ©chets dans de grands clusters et d'augmenter la stabilitĂ© du systĂšme.
- Une implémentation expérimentale du systÚme de contrÎle d'accÚs basé sur les rÎles (RBAC) a été ajoutée. Il est également possible de définir des droits d'accÚs pour les opérations ANALYZE, USE, SET GLOBAL et SHOW PROCESSLIST.
- La possibilitĂ© d'utiliser des expressions SQL pour sĂ©lectionner Ă partir du journal des requĂȘtes lentes a Ă©tĂ© ajoutĂ©e.
- Un mĂ©canisme de rĂ©cupĂ©ration rapide des tables supprimĂ©es a Ă©tĂ© mis en Ćuvre, permettant de restaurer des donnĂ©es supprimĂ©es par inadvertance.
- Le format des journaux enregistrés a été unifié.
- Le mode de verrouillage pessimiste a été ajouté, ce qui rapproche le traitement des transactions de MySQL.
- La prise en charge des fonctions de fenĂȘtre (window functions ou fonctions analytiques) compatibles avec MySQL 8.0 a Ă©tĂ© ajoutĂ©e. Les fonctions de fenĂȘtre permettent d'effectuer des calculs pour chaque ligne d'une requĂȘte en utilisant d'autres lignes. Contrairement aux fonctions d'agrĂ©gation qui rĂ©duisent un ensemble de lignes groupĂ©es en une seule ligne, les fonctions de fenĂȘtre effectuent une agrĂ©gation basĂ©e sur le contenu de la « fenĂȘtre », englobant une ou plusieurs lignes de l'ensemble de rĂ©sultats. Parmi les fonctions de fenĂȘtre implĂ©mentĂ©es :
NTILE, LEAD, LAG, PERCENT_RANK, NTH_VALUE, CUME_DIST, FIRST_VALUE, LAST_VALUE, RANK, DENSE_RANK et ROW_NUMBER. - Un support expérimental pour les vues (VIEW) a été ajouté.
- Le systÚme de partitionnement a été amélioré, permettant de distribuer les données entre des sections sur la base de plages de valeurs ou de hachages.
- Un framework pour le développement de plugins a été ajouté, avec par exemple des plugins déjà préparés pour l'utilisation d'une liste blanche d'IP ou pour la tenue d'un journal d'audit ;
- Un support expĂ©rimental pour la fonction « EXPLAIN ANALYZE » a Ă©tĂ© assurĂ© pour la crĂ©ation d'un plan d'exĂ©cution de requĂȘte SQL (SQL Plan Management) ;
- La commande next_row_id a été ajoutée pour obtenir l'identifiant de la prochaine ligne ;
- De nouvelles fonctions intégrées JSON_QUOTE, JSON_ARRAY_APPEND, JSON_MERGE_PRESERVE, BENCHMARK, COALESCE et NAME_CONST ont été ajoutées.
Source : opennet.ru
