Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comprendre la nouvelle vague de chaleur de MySQL

L'analyse des données est importante dans toute entreprise car vous pouvez voir ce qui s'est passé dans le passé pour pouvoir prendre des décisions intelligentes ou même prédire des actions futures à l'aide des données existantes.

Analyser une énorme quantité de données peut être difficile et vous devriez avoir besoin d'utiliser plus d'un moteur de base de données pour gérer les charges de travail OLTP et OLAP. Dans ce blog, nous verrons ce qu'est HeatWave et comment il peut vous aider dans cette tâche.

Qu'est-ce que HeatWave ?

HeatWave est un nouveau moteur intégré pour MySQL Database Service dans le Cloud. Il s'agit d'un moteur de traitement de requêtes distribué, évolutif, sans partage, en mémoire, en colonnes, conçu pour une exécution rapide des requêtes analytiques. Selon la documentation officielle, il accélère les performances de MySQL de 400X pour les requêtes d'analyse, s'étend à des milliers de cœurs et est 2,7X plus rapide à environ un tiers du coût des concurrents directs. Le service de base de données MySQL, avec HeatWave, est le seul service permettant d'exécuter des charges de travail OLTP et OLAP directement à partir de la base de données MySQL.

Comment fonctionne HeatWave

Un cluster HeatWave comprend un nœud MySQL DB System et au moins deux nœuds HeatWave. Le nœud du système de base de données MySQL possède un plug-in HeatWave qui est responsable de la gestion du cluster, du chargement des données dans le cluster HeatWave, de la planification des requêtes et du renvoi des résultats de la requête au système de base de données MySQL. Les nœuds HeatWave stockent les données en mémoire et traitent les requêtes d'analyse. Chaque nœud HeatWave contient une instance de HeatWave.

Le nombre de nœuds HeatWave requis dépend de la taille de vos données et de la quantité de compression obtenue lors du chargement des données dans le cluster HeatWave. Nous pouvons voir l'architecture de ce produit dans l'image suivante :

Comme vous pouvez le voir, les utilisateurs n'accèdent pas directement au cluster HeatWave. Les requêtes qui remplissent certaines conditions préalables sont automatiquement déchargées du système de base de données MySQL vers le cluster HeatWave pour un traitement accéléré, et les résultats sont renvoyés au nœud du système de base de données MySQL, puis au client ou à l'application MySQL qui a émis la requête.

Comment l'utiliser

Pour activer cette fonctionnalité, vous devrez accéder au site Oracle Cloud Management, accéder au système de base de données MySQL existant (ou en créer un nouveau) et ajouter un cluster Analitycs. Là, vous pouvez spécifier le type de cluster et le nombre de nœuds. Vous pouvez utiliser la fonction d'estimation du nombre de nœuds pour connaître le nombre nécessaire en fonction de votre charge de travail.

Le chargement de données dans un cluster HeatWave nécessite la préparation de tables sur le système de base de données MySQL et l'exécution d'opérations de chargement de table.

Préparer des tableaux

La préparation des tables implique la modification des définitions de table pour exclure certaines colonnes, définir des encodages de colonne de chaîne, ajouter des clés de placement de données et spécifier HeatWave (RAPID) comme moteur secondaire pour la table, car InnoDB est le moteur principal.

Pour définir RAPID comme moteur secondaire d'une table, spécifiez l'option de table SECONDARY_ENGINE dans une instruction CREATE TABLE ou ALTER TABLE :

mysql> CREATE TABLE orders (id INT) SECONDARY_ENGINE = RAPID;
or
mysql> ALTER TABLE orders SECONDARY_ENGINE = RAPID;

Charger des données

Le chargement d'une table dans un cluster HeatWave nécessite l'exécution d'une opération ALTER TABLE avec le mot clé SECONDARY_LOAD.

mysql> ALTER TABLE orders SECONDARY_LOAD;

Lorsqu'une table est chargée, les données sont découpées horizontalement et réparties entre les nœuds HeatWave. Après le chargement d'une table, les modifications apportées aux données d'une table sur le nœud MySQL DB System sont automatiquement propagées aux nœuds HeatWave.

Exemple

Pour cet exemple, nous utiliserons les ordres de table :

mysql> SHOW CREATE TABLE orders\G
*************************** 1. row ***************************
       Table: orders
Create Table: CREATE TABLE `orders` (
  `O_ORDERKEY` int NOT NULL,
  `O_CUSTKEY` int NOT NULL,
  `O_ORDERSTATUS` char(1) COLLATE utf8mb4_bin NOT NULL,
  `O_TOTALPRICE` decimal(15,2) NOT NULL,
  `O_ORDERDATE` date NOT NULL,
  `O_ORDERPRIORITY` char(15) COLLATE utf8mb4_bin NOT NULL,
  `O_CLERK` char(15) COLLATE utf8mb4_bin NOT NULL,
  `O_SHIPPRIORITY` int NOT NULL,
  `O_COMMENT` varchar(79) COLLATE utf8mb4_bin NOT NULL,
  PRIMARY KEY (`O_ORDERKEY`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

Vous pouvez exclure les colonnes que vous ne souhaitez pas charger dans HeatWave :

mysql> ALTER TABLE orders MODIFY `O_COMMENT` varchar(79) NOT NULL NOT SECONDARY;

Maintenant, définissez RAPID comme SECONDARY_ENGINE pour la table :

mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;

Assurez-vous d'avoir ajouté le paramètre SECONDARY_ENGINE dans la définition de la table :

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin SECONDARY_ENGINE=RAPID

Et enfin, chargez la table dans HeatWave :

mysql> ALTER TABLE orders SECONDARY_LOAD;

Vous pouvez utiliser EXPLAIN pour vérifier s'il utilise le bon moteur. Vous devriez voir quelque chose comme ceci :

Extra :Utiliser où ; Utilisation temporaire ; Utilisation du tri de fichiers ; Utilisation du moteur secondaire RAPID

Sur le site officiel de MySQL, vous pouvez voir une comparaison entre une exécution normale et l'utilisation de HeatWave :

Exécution HeatWave

mysql> SELECT O_ORDERPRIORITY, COUNT(*) AS ORDER_COUNT FROM orders 
       WHERE O_ORDERDATE >= DATE '1994-03-01' GROUP BY O_ORDERPRIORITY 
       ORDER BY O_ORDERPRIORITY;
+-----------------+-------------+
| O_ORDERPRIORITY | ORDER_COUNT |
+-----------------+-------------+
| 1-URGENT        |     2017573 |
| 2-HIGH          |     2015859 |
| 3-MEDIUM        |     2013174 |
| 4-NOT SPECIFIED |     2014476 |
| 5-LOW           |     2013674 |
+-----------------+-------------+
5 rows in set (0.04 sec)

Exécution normale

mysql> SELECT O_ORDERPRIORITY, COUNT(*) AS ORDER_COUNT FROM orders 
       WHERE O_ORDERDATE >= DATE '1994-03-01' GROUP BY O_ORDERPRIORITY 
       ORDER BY O_ORDERPRIORITY;
+-----------------+-------------+
| O_ORDERPRIORITY | ORDER_COUNT |
+-----------------+-------------+
| 1-URGENT        |     2017573 |
| 2-HIGH          |     2015859 |
| 3-MEDIUM        |     2013174 |
| 4-NOT SPECIFIED |     2014476 |
| 5-LOW           |     2013674 |
+-----------------+-------------+
5 rows in set (8.91 sec)

Comme vous pouvez le voir, il y a une différence importante dans le temps de la requête, même dans une requête simple. Pour plus d'informations, vous pouvez vous référer à la documentation officielle.

Conclusion

Une seule base de données MySQL peut être utilisée à la fois pour les applications OLTP et Analytics. Il est 100 % compatible avec MySQL sur site, vous pouvez donc conserver vos charges de travail OLTP sur site et décharger vos charges de travail d'analyse sur HeatWave sans modifier votre application, ou même l'utiliser directement sur Oracle Cloud pour améliorer vos performances MySQL pour Analytics. fins.