sql >> Databasteknik >  >> RDS >> Mysql

Förstå MySQL:s nya värmebölja

Dataanalys är viktigt i alla företag eftersom du kan se vad som hände tidigare för att kunna fatta smarta beslut eller till och med förutse framtida åtgärder med hjälp av befintlig data.

Det kan vara svårt att analysera en enorm mängd data och du borde behöva använda mer än en databasmotor för att hantera OLTP- och OLAP-arbetsbelastningar. I den här bloggen kommer vi att se vad HeatWave är och hur det kan hjälpa dig med den här uppgiften.

Vad är HeatWave?

HeatWave är en ny integrerad motor för MySQL Database Service i molnet. Det är en distribuerad, skalbar, delad-ingenting, i minnet, kolumnär, frågebehandlingsmotor designad för snabb exekvering av analytiska frågor. Enligt den officiella dokumentationen accelererar den MySQL-prestandan med 400X för analysfrågor, skalas ut till tusentals kärnor och är 2,7X snabbare till ungefär en tredjedel av kostnaden för de direkta konkurrenterna. MySQL Database Service, med HeatWave, är den enda tjänsten för att köra OLTP- och OLAP-arbetsbelastningar direkt från MySQL-databasen.

Hur HeatWave fungerar

Ett HeatWave-kluster inkluderar en MySQL DB-systemnod och två eller flera HeatWave-noder. MySQL DB System-noden har en HeatWave-plugin som ansvarar för klusterhantering, laddning av data till HeatWave-klustret, frågeschemaläggning och returnering av frågeresultat till MySQL DB-systemet. HeatWave-noder lagrar data i minne och processanalysfrågor. Varje HeatWave-nod innehåller en instans av HeatWave.

Antalet HeatWave-noder som krävs beror på storleken på dina data och mängden komprimering som uppnås när data laddas in i HeatWave-klustret. Vi kan se arkitekturen för denna produkt i följande bild:

Som du kan se kommer användare inte direkt åt HeatWave-klustret. Frågor som uppfyller vissa förutsättningar laddas automatiskt av från MySQL DB System till HeatWave-klustret för accelererad bearbetning, och resultaten returneras till MySQL DB System-noden och sedan till MySQL-klienten eller applikationen som utfärdade frågan.

Hur man använder det

För att aktivera den här funktionen måste du komma åt Oracle Cloud Management Site, komma åt det befintliga MySQL DB-systemet (eller skapa ett nytt) och lägga till ett Analitycs-kluster. Där kan du ange typen av kluster och antalet noder. Du kan använda funktionen Uppskatta nodräkning för att veta det nödvändiga antalet baserat på din arbetsbelastning.

Inläsning av data till ett HeatWave-kluster kräver att tabeller förbereds på MySQL DB-systemet och att tabellladdningsoperationer utförs.

Förbereda tabeller

Att förbereda tabeller innebär att modifiera tabelldefinitioner för att utesluta vissa kolumner, definiera strängkolumnkodningar, lägga till dataplaceringsnycklar och specificera HeatWave (RAPID) som den sekundära motorn för tabellen, eftersom InnoDB är den primära.

För att definiera RAPID som den sekundära motorn för en tabell, ange tabellalternativet SECONDARY_ENGINE i en CREATE TABLE- eller ALTER TABLE-sats:

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

Laddar data

Inläsning av en tabell i ett HeatWave-kluster kräver att en ALTER TABLE-operation utförs med nyckelordet SECONDARY_LOAD.

mysql> ALTER TABLE orders SECONDARY_LOAD;

När en tabell laddas delas data upp horisontellt och fördelas mellan HeatWave-noder. Efter att en tabell har laddats överförs ändringar av en tabells data på MySQL DB System-noden automatiskt till HeatWave-noderna.

Exempel

I det här exemplet kommer vi att använda bordsordningarna:

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 utesluta kolumner som du inte vill ladda till HeatWave:

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

Definiera nu RAPID som SECONDARY_ENGINE för tabellen:

mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;

Se till att du har lagt till parametern SECONDARY_ENGINE i tabelldefinitionen:

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

Och slutligen, ladda tabellen i HeatWave:

mysql> ALTER TABLE orders SECONDARY_LOAD;

Du kan använda EXPLAIN för att kontrollera om den använder rätt motor. Du borde se något sånt här:

Extra:Använder där; Använda tillfälliga; Använda filesort; Använder sekundär motor RAPID

På den officiella MySQL-webbplatsen kan du se en jämförelse mellan en normal körning och att använda HeatWave:

Heatwave Execution

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)

Normalt utförande

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 finns det en viktig skillnad i tidpunkten för frågan, även i en enkel fråga. För mer information kan du hänvisa till den officiella dokumentationen.

Slutsats

En enda MySQL-databas kan användas för både OLTP- och Analytics-applikationer. Den är 100 % kompatibel med MySQL på plats, så du kan behålla dina OLTP-arbetsbelastningar på plats och ladda ner dina analytiska arbetsbelastningar till HeatWave utan ändringar i din applikation, eller till och med använda den direkt på Oracle Cloud för att förbättra din MySQL-prestanda för Analytics syften.


  1. SQL Server konverterar varbinary till sträng

  2. Hur man uppdaterar befintliga data med SQLite

  3. Returnera alla främmande nycklar &KONTROLLERA begränsningar i en SQL Server-databas (T-SQL-exempel)

  4. Hur använder man Array/Table Parameter till Oracle (ODP.NET 10g) via ADO.NET/C#?