Mysql
 sql >> база данни >  >> RDS >> Mysql

Разбиране на новата гореща вълна на MySQL

Анализът на данните е важен във всяка компания, тъй като можете да видите какво се е случило в миналото, за да можете да вземате интелигентни решения или дори да прогнозирате бъдещи действия, използвайки съществуващите данни.

Анализирането на огромно количество данни може да бъде трудно и трябва да използвате повече от една база данни, за да обработвате OLTP и OLAP работни натоварвания. В този блог ще видим какво е HeatWave и как може да ви помогне с тази задача.

Какво е HeatWave?

HeatWave е нов интегриран двигател за MySQL Database Service в облака. Това е разпределен, мащабируем, споделено нищо, в паметта, колонна машина за обработка на заявки, предназначена за бързо изпълнение на аналитични заявки. Според официалната документация, той ускорява производителността на MySQL с 400X за аналитични заявки, мащабира до хиляди ядра и е 2,7X по-бърз при около една трета от цената на преките конкуренти. MySQL Database Service, с HeatWave, е единствената услуга за изпълнение на OLTP и OLAP работни натоварвания директно от базата данни MySQL.

Как работи HeatWave

Клъстерът HeatWave включва възел на MySQL DB System и два или повече възела на HeatWave. Възелът MySQL DB System има плъгин HeatWave, който отговаря за управлението на клъстера, зареждането на данни в клъстера HeatWave, планирането на заявки и връщането на резултатите от заявката към MySQL DB System. Възлите HeatWave съхраняват данни в паметта и заявки за анализ на процесите. Всеки възел HeatWave съдържа екземпляр на HeatWave.

Броят на необходимите възли HeatWave зависи от размера на вашите данни и степента на компресия, която се постига при зареждане на данните в клъстера HeatWave. Можем да видим архитектурата на този продукт на следното изображение:

Както можете да видите, потребителите нямат директен достъп до клъстера HeatWave. Заявките, които отговарят на определени предпоставки, автоматично се разтоварват от MySQL DB System към клъстера HeatWave за ускорена обработка и резултатите се връщат към възела на MySQL DB System и след това към MySQL клиента или приложението, които са издали заявката.

Как да го използвам

За да активирате тази функция, ще трябва да получите достъп до сайта за управление на Oracle Cloud, да получите достъп до съществуващата MySQL DB система (или да създадете нова) и да добавите клъстер на Analitycs. Там можете да посочите вида на клъстера и броя на възлите. Можете да използвате функцията Estimate Node Count, за да знаете необходимия брой въз основа на вашето работно натоварване.

Зареждането на данни в клъстер HeatWave изисква подготовка на таблици в MySQL DB System и изпълнение на операции за зареждане на таблици.

Подготовка на таблици

Подготовката на таблици включва модифициране на дефиниции на таблици, за да се изключат определени колони, дефиниране на кодиране на колони на низове, добавяне на ключове за разположение на данни и указване на HeatWave (RAPID) като вторичен механизъм за таблицата, тъй като InnoDB е основният.

За да дефинирате RAPID като вторична машина за таблица, посочете опцията за таблица SECONDARY_ENGINE в израз CREATE TABLE или ALTER TABLE:

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

Зареждане на данни

Зареждането на таблица в клъстер HeatWave изисква изпълнение на операция ALTER TABLE с ключовата дума SECONDARY_LOAD.

mysql> ALTER TABLE orders SECONDARY_LOAD;

Когато се зареди таблица, данните се нарязват хоризонтално и се разпределят между възлите на HeatWave. След като таблицата бъде заредена, промените в данните на таблицата на възела на MySQL DB System автоматично се разпространяват към възлите HeatWave.

Пример

За този пример ще използваме заповедите на таблицата:

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

Можете да изключите колони, които не искате да зареждате в HeatWave:

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

Сега дефинирайте RAPID като SECONDARY_ENGINE за таблицата:

mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;

Уверете се, че имате добавен параметър SECONDARY_ENGINE в дефиницията на таблицата:

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

И накрая, заредете таблицата в HeatWave:

mysql> ALTER TABLE orders SECONDARY_LOAD;

Можете да използвате EXPLAIN, за да проверите дали използва правилния двигател. Трябва да видите нещо подобно:

Допълнително:Използване на where; Използване на временно; Използване на сортиране на файлове; Използване на вторичен двигател RAPID

На официалния сайт на MySQL можете да видите сравнение между нормално изпълнение и използване на HeatWave:

Изпълнение на 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)

Нормално изпълнение

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)

Както можете да видите, има важна разлика във времето на заявката, дори при обикновена заявка. За повече информация можете да се обърнете към официалната документация.

Заключение

Единична MySQL база данни може да се използва както за OLTP, така и за приложения за анализ. Той е 100% съвместим с MySQL на място, така че можете да запазите вашите OLTP работни натоварвания на място и да разтоварите вашите анализи на HeatWave без промени във вашето приложение или дори да го използвате директно в Oracle Cloud, за да подобрите ефективността на MySQL за Анализ цели.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Може ли JavaScript да се свърже с MySQL?

  2. Mysql рекурсия?

  3. MySQL не използва индекси с клауза WHERE IN?

  4. Използване на Python и MySQL в ETL процеса

  5. Генериране на дърво на базата на дълбочина от йерархични данни в MySQL (без CTEs)