Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zrozumienie nowej fali upałów MySQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podnoszenie poprzeczki w zakresie zarządzania MySQL, MariaDB, PostgreSQL i MongoDB

  2. Wolny czas startu MySQL w trybie GTID? Problemem może być rozmiar pliku dziennika binarnego

  3. Jak wybrać każdy n-ty wiersz z mysql

  4. Podstawy kluczy obcych w MySQL?

  5. MySQL, lepiej wstawić NULL lub pusty ciąg?