Analýza dat je důležitá v každé společnosti, protože můžete vidět, co se stalo v minulosti, abyste mohli činit chytrá rozhodnutí nebo dokonce předvídat budoucí akce pomocí stávajících dat.
Analyzovat velké množství dat může být obtížné a ke zpracování zátěže OLTP a OLAP byste měli potřebovat více než jeden databázový stroj. V tomto blogu uvidíme, co je HeatWave a jak vám může pomoci s tímto úkolem.
Co je HeatWave?
HeatWave je nový integrovaný modul pro databázovou službu MySQL v cloudu. Je to distribuovaný, škálovatelný, sdílený-nic, in-memory, sloupcový procesor pro zpracování dotazů navržený pro rychlé provádění analytických dotazů. Podle oficiální dokumentace zrychluje výkon MySQL 400x pro analytické dotazy, škáluje se na tisíce jader a je 2,7x rychlejší při přibližně jedné třetině nákladů oproti přímým konkurentům. Databázová služba MySQL s HeatWave je jedinou službou pro spouštění úloh OLTP a OLAP přímo z databáze MySQL.
Jak HeatWave funguje
Cluster HeatWave zahrnuje uzel systému MySQL DB System a dva nebo více uzlů HeatWave. Uzel MySQL DB System má zásuvný modul HeatWave, který je zodpovědný za správu clusteru, načítání dat do clusteru HeatWave, plánování dotazů a vracení výsledků dotazů do systému MySQL DB System. Uzly HeatWave ukládají data do paměti a zpracovávají analytické dotazy. Každý uzel HeatWave obsahuje instanci HeatWave.
Počet požadovaných uzlů HeatWave závisí na velikosti vašich dat a míře komprese, které je dosaženo při načítání dat do clusteru HeatWave. Architekturu tohoto produktu můžeme vidět na následujícím obrázku:
Jak vidíte, uživatelé ke clusteru HeatWave nemají přímý přístup. Dotazy, které splňují určité předpoklady, jsou automaticky přesunuty z MySQL DB System do HeatWave clusteru pro urychlené zpracování a výsledky jsou vráceny do MySQL DB System uzlu a poté do MySQL klienta nebo aplikace, která dotaz zadala.
Jak jej používat
Chcete-li tuto funkci povolit, budete muset vstoupit na web Oracle Cloud Management, získat přístup ke stávajícímu systému MySQL DB (nebo vytvořit nový) a přidat klastr analýzy. Zde můžete určit typ clusteru a počet uzlů. Pomocí funkce Odhad počtu uzlů můžete zjistit potřebný počet na základě vaší pracovní zátěže.
Načítání dat do HeatWave clusteru vyžaduje přípravu tabulek v systému MySQL DB System a provádění operací načítání tabulek.
Příprava tabulek
Příprava tabulek zahrnuje úpravu definic tabulek tak, aby byly vyloučeny určité sloupce, definování kódování sloupců řetězců, přidání klíčů pro umístění dat a určení HeatWave (RAPID) jako sekundárního modulu pro tabulku, protože InnoDB je primární.
Chcete-li definovat RAPID jako sekundární stroj pro tabulku, zadejte volbu tabulky SECONDARY_ENGINE v příkazu CREATE TABLE nebo ALTER TABLE:
mysql> CREATE TABLE orders (id INT) SECONDARY_ENGINE = RAPID;
or
mysql> ALTER TABLE orders SECONDARY_ENGINE = RAPID;
Načítání dat
Načtení tabulky do HeatWave clusteru vyžaduje provedení operace ALTER TABLE s klíčovým slovem SECONDARY_LOAD.
mysql> ALTER TABLE orders SECONDARY_LOAD;
Když je tabulka načtena, data jsou horizontálně rozdělena a distribuována mezi HeatWave uzly. Po načtení tabulky se změny v datech tabulky v uzlu MySQL DB System automaticky přenesou do uzlů HeatWave.
Příklad
Pro tento příklad použijeme pořadí tabulek:
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
Můžete vyloučit sloupce, které nechcete načítat do HeatWave:
mysql> ALTER TABLE orders MODIFY `O_COMMENT` varchar(79) NOT NULL NOT SECONDARY;
Nyní definujte RAPID jako SECONDARY_ENGINE pro tabulku:
mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;
Ujistěte se, že máte v definici tabulky přidán parametr SECONDARY_ENGINE:
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin SECONDARY_ENGINE=RAPID
A nakonec načtěte tabulku do HeatWave:
mysql> ALTER TABLE orders SECONDARY_LOAD;
Můžete použít EXPLAIN ke kontrole, zda používá správný engine. Měli byste vidět něco takového:
Extra:Použití where; Použití dočasné; Použití řazení souborů; Použití sekundárního motoru RAPID
Na oficiálních stránkách MySQL můžete vidět srovnání mezi normálním spuštěním a použitím HeatWave:
Provedení 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)
Normální provedení
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)
Jak vidíte, existuje důležitý rozdíl v čase dotazu, a to i v případě jednoduchého dotazu. Další informace naleznete v oficiální dokumentaci.
Závěr
Jednu databázi MySQL lze použít pro aplikace OLTP i Analytics. Je 100% kompatibilní s místními MySQL, takže můžete své úlohy OLTP ponechat na místě a přesunout své analytické úlohy na HeatWave beze změn ve vaší aplikaci, nebo ji dokonce použít přímo v Oracle Cloud ke zlepšení výkonu MySQL pro Analytics. účely.