sql >> Database >  >> RDS >> Mysql

De nieuwe hittegolf van MySQL begrijpen

Data-analyse is belangrijk in elk bedrijf, omdat u kunt zien wat er in het verleden is gebeurd om slimme beslissingen te kunnen nemen of zelfs toekomstige acties te kunnen voorspellen met behulp van de bestaande gegevens.

Het analyseren van een enorme hoeveelheid gegevens kan moeilijk zijn en u zou meer dan één database-engine moeten gebruiken om OLTP- en OLAP-workloads te verwerken. In deze blog zullen we zien wat HeatWave is en hoe het je kan helpen bij deze taak.

Wat is HeatWave?

HeatWave is een nieuwe geïntegreerde engine voor MySQL Database Service in de Cloud. Het is een gedistribueerde, schaalbare, niets-gedeelde, in-memory, kolomvormige queryverwerkingsengine die is ontworpen voor snelle uitvoering van analytische query's. Volgens de officiële documentatie versnelt het de MySQL-prestaties met 400x voor analysequery's, schaalt het uit naar duizenden kernen en is het 2,7x sneller tegen ongeveer een derde van de kosten van de directe concurrenten. MySQL Database Service, met HeatWave, is de enige service voor het rechtstreeks uitvoeren van OLTP- en OLAP-workloads vanuit de MySQL-database.

Hoe HeatWave werkt

Een HeatWave-cluster omvat een MySQL DB-systeemknooppunt en twee of meer HeatWave-knooppunten. Het MySQL DB-systeemknooppunt heeft een HeatWave-plug-in die verantwoordelijk is voor clusterbeheer, het laden van gegevens in het HeatWave-cluster, het plannen van query's en het retourneren van queryresultaten naar het MySQL DB-systeem. HeatWave-knooppunten slaan gegevens op in het geheugen en verwerken query's voor analyse. Elke HeatWave-node bevat een instantie van HeatWave.

Het aantal benodigde HeatWave-knooppunten hangt af van de grootte van uw gegevens en de hoeveelheid compressie die wordt bereikt bij het laden van de gegevens in het HeatWave-cluster. We kunnen de architectuur van dit product zien in de volgende afbeelding:

Zoals u kunt zien, hebben gebruikers niet rechtstreeks toegang tot het HeatWave-cluster. Query's die aan bepaalde vereisten voldoen, worden automatisch overgedragen van het MySQL DB-systeem naar het HeatWave-cluster voor versnelde verwerking, en de resultaten worden teruggestuurd naar het MySQL DB-systeemknooppunt en vervolgens naar de MySQL-client of -toepassing die de query heeft verzonden.

Hoe het te gebruiken

Om deze functie in te schakelen, moet u toegang krijgen tot de Oracle Cloud Management Site, toegang krijgen tot het bestaande MySQL DB-systeem (of een nieuwe maken) en een Analitycs-cluster toevoegen. Daar kunt u het type cluster en het aantal knooppunten opgeven. U kunt de functie Estimate Node Count gebruiken om het benodigde aantal te weten op basis van uw werklast.

Het laden van gegevens in een HeatWave-cluster vereist het voorbereiden van tabellen op het MySQL DB-systeem en het uitvoeren van bewerkingen voor het laden van tabellen.

Tabellen voorbereiden

Het voorbereiden van tabellen omvat het wijzigen van tabeldefinities om bepaalde kolommen uit te sluiten, kolomcoderingen voor tekenreeksen te definiëren, sleutels voor gegevensplaatsing toe te voegen en HeatWave (RAPID) op te geven als de secundaire engine voor de tabel, aangezien InnoDB de primaire is.

Als u RAPID wilt definiëren als de secundaire engine voor een tabel, geeft u de tabeloptie SECONDARY_ENGINE op in een CREATE TABLE- of ALTER TABLE-instructie:

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

Gegevens laden

Het laden van een tabel in een HeatWave-cluster vereist het uitvoeren van een ALTER TABLE-bewerking met het sleutelwoord SECONDARY_LOAD.

mysql> ALTER TABLE orders SECONDARY_LOAD;

Wanneer een tabel wordt geladen, worden de gegevens horizontaal gesegmenteerd en verdeeld over HeatWave-knooppunten. Nadat een tabel is geladen, worden wijzigingen in de gegevens van een tabel op het MySQL DB-systeemknooppunt automatisch doorgegeven aan de HeatWave-knooppunten.

Voorbeeld

Voor dit voorbeeld gebruiken we de tafelvolgorde:

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

U kunt kolommen uitsluiten die u niet in HeatWave wilt laden:

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

Definieer nu RAPID als SECONDARY_ENGINE voor de tabel:

mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;

Zorg ervoor dat de parameter SECONDARY_ENGINE is toegevoegd aan de tabeldefinitie:

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

En tot slot, laad de tabel in HeatWave:

mysql> ALTER TABLE orders SECONDARY_LOAD;

Je kunt EXPLAIN gebruiken om te controleren of het de juiste engine gebruikt. Je zou zoiets als dit moeten zien:

Extra:Waar gebruiken; Tijdelijk gebruiken; Filesort gebruiken; Secundaire engine RAPID gebruiken

Op de officiële MySQL-site kun je een vergelijking zien tussen een normale uitvoering en het gebruik van HeatWave:

HeatWave-uitvoering

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)

Normale uitvoering

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)

Zoals je kunt zien, is er een belangrijk verschil in de tijd van de zoekopdracht, zelfs bij een eenvoudige zoekopdracht. Voor meer informatie kunt u de officiële documentatie raadplegen.

Conclusie

Eén enkele MySQL-database kan worden gebruikt voor zowel OLTP- als analysetoepassingen. Het is 100% compatibel met MySQL on-premises, dus u kunt uw OLTP-workloads on-premises houden en uw analytics-workloads overdragen aan HeatWave zonder wijzigingen in uw applicatie, of het zelfs rechtstreeks in de Oracle Cloud gebruiken om uw MySQL-prestaties voor Analytics te verbeteren doeleinden.


  1. Converteer maandnummer naar maandnaam in PostgreSQL

  2. Mysql:Bestellen op like?

  3. Meerdere updates in MySQL

  4. Full-Text Search implementeren in SQL Server 2016 voor geavanceerde gebruikers