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

Forstå MySQL's nye hedebølge

Dataanalyse er vigtig i enhver virksomhed, da du kan se, hvad der skete i fortiden, for at kunne træffe smarte beslutninger eller endda forudsige fremtidige handlinger ved hjælp af de eksisterende data.

Det kan være svært at analysere en enorm mængde data, og du skal bruge mere end én databasemotor for at håndtere OLTP- og OLAP-arbejdsbelastninger. I denne blog vil vi se, hvad HeatWave er, og hvordan det kan hjælpe dig med denne opgave.

Hvad er HeatWave?

HeatWave er en ny integreret motor til MySQL Database Service i skyen. Det er en distribueret, skalerbar, delt intet, i hukommelsen, kolonneformet, forespørgselsbehandlingsmotor designet til hurtig udførelse af analytiske forespørgsler. Ifølge den officielle dokumentation accelererer den MySQL-ydeevnen med 400X for analyseforespørgsler, skalerer ud til tusindvis af kerner og er 2,7X hurtigere til omkring en tredjedel af prisen for de direkte konkurrenter. MySQL Database Service, med HeatWave, er den eneste service til at køre OLTP- og OLAP-arbejdsbelastninger direkte fra MySQL-databasen.

Sådan fungerer HeatWave

En HeatWave-klynge inkluderer en MySQL DB System-knude og to eller flere HeatWave-knuder. MySQL DB System-knuden har et HeatWave-plugin, der er ansvarlig for klyngestyring, indlæsning af data i HeatWave-klyngen, forespørgselsplanlægning og returnering af forespørgselsresultater til MySQL DB-systemet. HeatWave-noder gemmer data i hukommelse og procesanalyseforespørgsler. Hver HeatWave-node indeholder en instans af HeatWave.

Antallet af HeatWave-noder, der kræves, afhænger af størrelsen af ​​dine data og mængden af ​​komprimering, der opnås, når dataene indlæses i HeatWave-klyngen. Vi kan se arkitekturen af ​​dette produkt på følgende billede:

Som du kan se, har brugere ikke direkte adgang til HeatWave-klyngen. Forespørgsler, der opfylder visse forudsætninger, overføres automatisk fra MySQL DB System til HeatWave-klyngen til accelereret behandling, og resultaterne returneres til MySQL DB System-knuden og derefter til MySQL-klienten eller applikationen, der udstedte forespørgslen.

Sådan bruges det

For at aktivere denne funktion skal du få adgang til Oracle Cloud Management-webstedet, få adgang til det eksisterende MySQL DB-system (eller oprette et nyt) og tilføje en Analitycs-klynge. Der kan du angive typen af ​​klynge og antallet af noder. Du kan bruge funktionen Estimer nodetælling til at kende det nødvendige antal baseret på din arbejdsbyrde.

Indlæsning af data i en HeatWave-klynge kræver forberedelse af tabeller på MySQL DB-systemet og udførelse af tabelindlæsningsoperationer.

Forberedelse af tabeller

Forberedelse af tabeller involverer ændring af tabeldefinitioner for at udelukke bestemte kolonner, definere strengkolonnekodninger, tilføje dataplaceringsnøgler og specificere HeatWave (RAPID) som den sekundære motor for tabellen, da InnoDB er den primære.

For at definere RAPID som den sekundære motor for en tabel, skal du angive tabelindstillingen SECONDARY_ENGINE i en CREATE TABLE- eller ALTER TABLE-sætning:

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

Indlæser data

Indlæsning af en tabel i en HeatWave-klynge kræver udførelse af en ALTER TABLE-operation med nøgleordet SECONDARY_LOAD.

mysql> ALTER TABLE orders SECONDARY_LOAD;

Når en tabel indlæses, opdeles data vandret og fordeles mellem HeatWave-noder. Når en tabel er indlæst, overføres ændringer til en tabels data på MySQL DB System-knudepunktet automatisk til HeatWave-noderne.

Eksempel

I dette eksempel vil vi bruge tabelrækkefølgerne:

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

Du kan ekskludere kolonner, som du ikke ønsker at indlæse til HeatWave:

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

Definer nu RAPID som SECONDARY_ENGINE for tabellen:

mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;

Sørg for, at du har tilføjet parameteren SECONDARY_ENGINE i tabeldefinitionen:

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

Og til sidst indlæs tabellen i HeatWave:

mysql> ALTER TABLE orders SECONDARY_LOAD;

Du kan bruge EXPLAIN til at kontrollere, om den bruger den rigtige motor. Du burde se noget som dette:

Ekstra:Bruger hvor; Brug af midlertidig; Brug af filesort; Bruger sekundær motor RAPID

På den officielle MySQL-side kan du se en sammenligning mellem en normal udførelse og brug af HeatWave:

Heatwave-udførelse

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)

Normal udførelse

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)

Som du kan se, er der en vigtig forskel på tidspunktet for forespørgslen, selv i en simpel forespørgsel. For mere information kan du henvise til den officielle dokumentation.

Konklusion

En enkelt MySQL-database kan bruges til både OLTP- og Analytics-applikationer. Den er 100 % kompatibel med MySQL on-premises, så du kan beholde dine OLTP-arbejdsbelastninger på stedet og overføre dine analyse-arbejdsbelastninger til HeatWave uden ændringer i din applikation, eller endda bruge den direkte på Oracle Cloud til at forbedre din MySQL-ydeevne til Analytics formål.


  1. SSIS - værdien kan ikke konverteres på grund af et potentielt tab af data

  2. 4 PL/SQL anonyme blokeksempler

  3. Topfunktioner at se efter i et SQL Server-overvågningsværktøj

  4. Sådan får du lat og long fra sdo_geometry i oracle