Mysql
 sql >> Database >  >> RDS >> Mysql

Comprendere la nuova ondata di caldo di MySQL

L'analisi dei dati è importante in qualsiasi azienda in quanto puoi vedere cosa è successo in passato per poter prendere decisioni intelligenti o persino prevedere azioni future utilizzando i dati esistenti.

Analizzare un'enorme quantità di dati potrebbe essere difficile e dovresti utilizzare più di un motore di database per gestire carichi di lavoro OLTP e OLAP. In questo blog vedremo cos'è HeatWave e come può aiutarti in questo compito.

Cos'è HeatWave?

HeatWave è un nuovo motore integrato per MySQL Database Service nel Cloud. È un motore di elaborazione delle query distribuito, scalabile, condiviso, in memoria, colonnare, progettato per l'esecuzione rapida di query analitiche. Secondo la documentazione ufficiale, accelera le prestazioni di MySQL di 400 volte per le query di analisi, scala fino a migliaia di core ed è 2,7 volte più veloce a circa un terzo del costo dei concorrenti diretti. MySQL Database Service, con HeatWave, è l'unico servizio per eseguire carichi di lavoro OLTP e OLAP direttamente dal database MySQL.

Come funziona HeatWave

Un cluster HeatWave include un nodo MySQL DB System e due o più nodi HeatWave. Il nodo MySQL DB System ha un plug-in HeatWave che è responsabile della gestione del cluster, del caricamento dei dati nel cluster HeatWave, della pianificazione delle query e della restituzione dei risultati delle query al MySQL DB System. I nodi HeatWave archiviano i dati in memoria ed elaborano le query di analisi. Ogni nodo HeatWave contiene un'istanza di HeatWave.

Il numero di nodi HeatWave richiesti dipende dalle dimensioni dei dati e dalla quantità di compressione ottenuta durante il caricamento dei dati nel cluster HeatWave. Possiamo vedere l'architettura di questo prodotto nell'immagine seguente:

Come puoi vedere, gli utenti non accedono direttamente al cluster HeatWave. Le query che soddisfano determinati prerequisiti vengono automaticamente scaricate dal sistema DB MySQL al cluster HeatWave per un'elaborazione accelerata e i risultati vengono restituiti al nodo del sistema database MySQL e quindi al client MySQL o all'applicazione che ha emesso la query.

Come usarlo

Per abilitare questa funzione, dovrai accedere al sito di gestione di Oracle Cloud, accedere al sistema DB MySQL esistente (o crearne uno nuovo) e aggiungere un cluster Analitycs. Qui puoi specificare il tipo di cluster e il numero di nodi. Puoi utilizzare la funzione Stima conteggio nodi per conoscere il numero necessario in base al tuo carico di lavoro.

Il caricamento dei dati in un cluster HeatWave richiede la preparazione delle tabelle sul sistema DB MySQL e l'esecuzione delle operazioni di caricamento delle tabelle.

Preparazione delle tabelle

La preparazione delle tabelle implica la modifica delle definizioni delle tabelle per escludere determinate colonne, definire le codifiche delle colonne delle stringhe, aggiungere chiavi di posizionamento dei dati e specificare HeatWave (RAPID) come motore secondario per la tabella, poiché InnoDB è quello principale.

Per definire RAPID come motore secondario per una tabella, specifica l'opzione della tabella SECONDARY_ENGINE in un'istruzione CREATE TABLE o ALTER TABLE:

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

Caricamento dati

Il caricamento di una tabella in un cluster HeatWave richiede l'esecuzione di un'operazione ALTER TABLE con la parola chiave SECONDARY_LOAD.

mysql> ALTER TABLE orders SECONDARY_LOAD;

Quando una tabella viene caricata, i dati vengono suddivisi orizzontalmente e distribuiti tra i nodi HeatWave. Dopo che una tabella è stata caricata, le modifiche ai dati di una tabella sul nodo MySQL DB System vengono propagate automaticamente ai nodi HeatWave.

Esempio

Per questo esempio, utilizzeremo gli ordini tabella:

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

Puoi escludere le colonne che non desideri caricare su HeatWave:

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

Ora, definisci RAPID come SECONDARY_ENGINE per la tabella:

mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;

Assicurati di aver aggiunto il parametro SECONDARY_ENGINE nella definizione della tabella:

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

E infine, carica la tabella in HeatWave:

mysql> ALTER TABLE orders SECONDARY_LOAD;

Puoi usare EXPLAIN per verificare se sta usando il motore corretto. Dovresti vedere qualcosa del genere:

Extra:usando dove; Utilizzo temporaneo; Utilizzo di filesort; Utilizzo del motore secondario RAPID

Sul sito ufficiale di MySQL, puoi vedere un confronto tra un'esecuzione normale e l'utilizzo di HeatWave:

Esecuzione 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)

Esecuzione 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)

Come puoi vedere, c'è un'importante differenza nel tempo della query, anche in una query semplice. Per ulteriori informazioni, puoi fare riferimento alla documentazione ufficiale.

Conclusione

Un singolo database MySQL può essere utilizzato sia per OLTP che per applicazioni di analisi. È compatibile al 100% con MySQL in locale, quindi puoi mantenere i carichi di lavoro OLTP in locale e scaricare i carichi di lavoro di analisi su HeatWave senza apportare modifiche all'applicazione, o persino utilizzarlo direttamente su Oracle Cloud per migliorare le prestazioni di MySQL per Analytics scopi.