sql >> Base de Datos >  >> RDS >> Mysql

Comprender la nueva ola de calor de MySQL

El análisis de datos es importante en cualquier empresa, ya que puede ver lo que sucedió en el pasado para poder tomar decisiones inteligentes o incluso predecir acciones futuras utilizando los datos existentes.

Analizar una gran cantidad de datos podría ser difícil y debería necesitar usar más de un motor de base de datos para manejar cargas de trabajo OLTP y OLAP. En este blog, veremos qué es HeatWave y cómo puede ayudarte en esta tarea.

¿Qué es HeatWave?

HeatWave es un nuevo motor integrado para el servicio de base de datos MySQL en la nube. Es un motor de procesamiento de consultas distribuido, escalable, no compartido, en memoria, en columnas, diseñado para una ejecución rápida de consultas analíticas. Según la documentación oficial, acelera el rendimiento de MySQL en 400X para consultas de análisis, escala a miles de núcleos y es 2,7X más rápido a alrededor de un tercio del costo de los competidores directos. MySQL Database Service, con HeatWave, es el único servicio para ejecutar cargas de trabajo OLTP y OLAP directamente desde la base de datos MySQL.

Cómo funciona HeatWave

Un clúster de HeatWave incluye un nodo del sistema de base de datos MySQL y dos o más nodos de HeatWave. El nodo del sistema de base de datos MySQL tiene un complemento HeatWave que es responsable de la administración del clúster, la carga de datos en el clúster HeatWave, la programación de consultas y la devolución de los resultados de la consulta al sistema de base de datos MySQL. Los nodos de HeatWave almacenan datos en la memoria y procesan consultas de análisis. Cada nodo de HeatWave contiene una instancia de HeatWave.

La cantidad de nodos de HeatWave requeridos depende del tamaño de sus datos y la cantidad de compresión que se logra al cargar los datos en el clúster de HeatWave. Podemos ver la arquitectura de este producto en la siguiente imagen:

Como puede ver, los usuarios no acceden directamente al clúster HeatWave. Las consultas que cumplen ciertos requisitos previos se descargan automáticamente del sistema de base de datos MySQL al clúster de HeatWave para un procesamiento acelerado, y los resultados se devuelven al nodo del sistema de base de datos MySQL y luego al cliente o aplicación MySQL que emitió la consulta.

Cómo usarlo

Para habilitar esta función, deberá acceder al sitio de administración de Oracle Cloud, acceder al sistema de base de datos MySQL existente (o crear uno nuevo) y agregar un clúster de Analitycs. Allí puede especificar el tipo de clúster y la cantidad de nodos. Puede utilizar la función Calcular recuento de nodos para conocer el número necesario en función de su carga de trabajo.

La carga de datos en un clúster HeatWave requiere la preparación de tablas en el sistema de base de datos MySQL y la ejecución de operaciones de carga de tablas.

Preparación de mesas

La preparación de tablas implica modificar las definiciones de las tablas para excluir ciertas columnas, definir codificaciones de columnas de cadenas, agregar claves de ubicación de datos y especificar HeatWave (RAPID) como motor secundario para la tabla, ya que InnoDB es el principal.

Para definir RAPID como motor secundario para una tabla, especifique la opción de tabla SECONDARY_ENGINE en una instrucción CREATE TABLE o ALTER TABLE:

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

Cargando datos

Cargar una tabla en un clúster HeatWave requiere ejecutar una operación ALTER TABLE con la palabra clave SECONDARY_LOAD.

mysql> ALTER TABLE orders SECONDARY_LOAD;

Cuando se carga una tabla, los datos se dividen horizontalmente y se distribuyen entre los nodos de HeatWave. Después de cargar una tabla, los cambios en los datos de una tabla en el nodo del sistema de base de datos MySQL se propagan automáticamente a los nodos de HeatWave.

Ejemplo

Para este ejemplo, usaremos las órdenes de la tabla:

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

Puede excluir columnas que no desea cargar en HeatWave:

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

Ahora, defina RAPID como SECONDARY_ENGINE para la tabla:

mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;

Asegúrese de haber agregado el parámetro SECONDARY_ENGINE en la definición de la tabla:

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

Y finalmente, cargue la tabla en HeatWave:

mysql> ALTER TABLE orders SECONDARY_LOAD;

Puede usar EXPLAIN para verificar si está usando el motor correcto. Deberías ver algo como esto:

Extra:Usando where; Uso temporal; Usando ordenación de archivos; Uso del motor secundario RAPID

En el sitio oficial de MySQL, puede ver una comparación entre una ejecución normal y el uso de HeatWave:

Ejecución de ola de calor

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)

Ejecución normal

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)

Como puede ver, hay una diferencia importante en el tiempo de la consulta, incluso en una consulta simple. Para obtener más información, puede consultar la documentación oficial.

Conclusión

Se puede usar una sola base de datos MySQL para aplicaciones OLTP y de análisis. Es 100 % compatible con MySQL en las instalaciones, por lo que puede mantener sus cargas de trabajo de OLTP en las instalaciones y descargar sus cargas de trabajo de análisis a HeatWave sin cambios en su aplicación, o incluso usarlas directamente en Oracle Cloud para mejorar su rendimiento de MySQL para análisis. propósitos.