Analiza danych jest ważna w każdej firmie, ponieważ możesz zobaczyć, co wydarzyło się w przeszłości, aby móc podejmować mądre decyzje, a nawet przewidywać przyszłe działania na podstawie istniejących danych.
Analiza ogromnej ilości danych może być trudna i do obsługi obciążeń OLTP i OLAP należy użyć więcej niż jednego silnika bazy danych. Na tym blogu zobaczymy, czym jest HeatWave i jak może Ci pomóc w tym zadaniu.
Co to jest HeatWave?
HeatWave to nowy zintegrowany silnik usługi bazy danych MySQL w chmurze. Jest to rozproszony, skalowalny, kolumnowy silnik przetwarzania zapytań typu „shared-nothing” w pamięci, przeznaczony do szybkiego wykonywania zapytań analitycznych. Zgodnie z oficjalną dokumentacją, przyspiesza on wydajność MySQL 400-krotnie w przypadku zapytań analitycznych, skaluje się do tysięcy rdzeni i jest 2,7-krotnie szybszy przy około jednej trzeciej kosztu bezpośrednich konkurentów. Usługa bazy danych MySQL, z HeatWave, jest jedyną usługą do uruchamiania obciążeń OLTP i OLAP bezpośrednio z bazy danych MySQL.
Jak działa HeatWave
Klaster HeatWave obejmuje węzeł MySQL DB System i dwa lub więcej węzłów HeatWave. Węzeł MySQL DB System ma wtyczkę HeatWave, która jest odpowiedzialna za zarządzanie klastrem, ładowanie danych do klastra HeatWave, planowanie zapytań i zwracanie wyników zapytań do MySQL DB System. Węzły HeatWave przechowują dane w pamięci i zapytania analizy procesu. Każdy węzeł HeatWave zawiera instancję HeatWave.
Liczba wymaganych węzłów HeatWave zależy od rozmiaru danych i stopnia kompresji, jaki uzyskuje się podczas ładowania danych do klastra HeatWave. Możemy zobaczyć architekturę tego produktu na następującym obrazku:
Jak widać, użytkownicy nie uzyskują bezpośredniego dostępu do klastra HeatWave. Zapytania, które spełniają określone wymagania wstępne, są automatycznie przenoszone z systemu MySQL DB do klastra HeatWave w celu przyspieszonego przetwarzania, a wyniki są zwracane do węzła MySQL DB System, a następnie do klienta lub aplikacji MySQL, która wysłała zapytanie.
Jak z tego korzystać
Aby włączyć tę funkcję, musisz uzyskać dostęp do witryny Oracle Cloud Management Site, uzyskać dostęp do istniejącego systemu bazy danych MySQL (lub utworzyć nowy) i dodać klaster Analitycs. Tam możesz określić typ klastra i liczbę węzłów. Możesz użyć funkcji Oszacuj liczbę węzłów, aby poznać niezbędną liczbę w oparciu o obciążenie pracą.
Ładowanie danych do klastra HeatWave wymaga przygotowania tabel w systemie MySQL DB i wykonania operacji ładowania tabel.
Przygotowywanie tabel
Przygotowywanie tabel obejmuje modyfikowanie definicji tabel w celu wykluczenia określonych kolumn, zdefiniowanie kodowania kolumn ciągów, dodanie kluczy rozmieszczania danych i określenie HeatWave (RAPID) jako dodatkowego silnika tabeli, ponieważ InnoDB jest głównym.
Aby zdefiniować RAPID jako dodatkowy mechanizm tabeli, określ opcję tabeli SECONDARY_ENGINE w instrukcji CREATE TABLE lub ALTER TABLE:
mysql> CREATE TABLE orders (id INT) SECONDARY_ENGINE = RAPID;
or
mysql> ALTER TABLE orders SECONDARY_ENGINE = RAPID;
Ładowanie danych
Załadowanie tabeli do klastra HeatWave wymaga wykonania operacji ALTER TABLE ze słowem kluczowym SECONDARY_LOAD.
mysql> ALTER TABLE orders SECONDARY_LOAD;
Gdy tabela jest ładowana, dane są dzielone poziomo i rozdzielane między węzły HeatWave. Po załadowaniu tabeli zmiany w danych tabeli w węźle MySQL DB System są automatycznie propagowane do węzłów HeatWave.
Przykład
W tym przykładzie użyjemy kolejności tabel:
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
Możesz wykluczyć kolumny, których nie chcesz ładować do HeatWave:
mysql> ALTER TABLE orders MODIFY `O_COMMENT` varchar(79) NOT NULL NOT SECONDARY;
Teraz zdefiniuj RAPID jako SECONDARY_ENGINE dla tabeli:
mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;
Upewnij się, że w definicji tabeli dodano parametr SECONDARY_ENGINE:
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin SECONDARY_ENGINE=RAPID
I na koniec załaduj tabelę do HeatWave:
mysql> ALTER TABLE orders SECONDARY_LOAD;
Możesz użyć polecenia EXPLAIN, aby sprawdzić, czy używa właściwego silnika. Powinieneś zobaczyć coś takiego:
Dodatkowe:używanie gdzie; Korzystanie tymczasowe; Korzystanie z sortowania plików; Korzystanie z dodatkowego silnika RAPID
Na oficjalnej stronie MySQL można zobaczyć porównanie między normalnym wykonaniem a użyciem HeatWave:
Wykonywanie 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)
Normalne wykonanie
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 widać, istnieje istotna różnica w czasie zapytania, nawet w przypadku prostego zapytania. Więcej informacji można znaleźć w oficjalnej dokumentacji.
Wnioski
Pojedyncza baza danych MySQL może być używana zarówno dla aplikacji OLTP, jak i analitycznych. Jest w 100% kompatybilny z lokalnym MySQL, dzięki czemu możesz przechowywać swoje obciążenia OLTP lokalnie i przenosić obciążenia analityczne do HeatWave bez wprowadzania zmian w aplikacji, a nawet używać go bezpośrednio w Oracle Cloud, aby poprawić wydajność MySQL dla Analytics celów.