Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Entendendo a nova onda de calor do MySQL

A análise de dados é importante em qualquer empresa, pois você pode ver o que aconteceu no passado para poder tomar decisões inteligentes ou até mesmo prever ações futuras usando os dados existentes.

Analisar uma grande quantidade de dados pode ser difícil e você deve usar mais de um mecanismo de banco de dados para lidar com cargas de trabalho OLTP e OLAP. Neste blog, veremos o que é o HeatWave e como ele pode ajudá-lo nessa tarefa.

O que é HeatWave?

HeatWave é um novo mecanismo integrado para MySQL Database Service na nuvem. É um mecanismo de processamento de consulta distribuído, escalável, sem compartilhamento, na memória, colunar, projetado para execução rápida de consultas analíticas. De acordo com a documentação oficial, ele acelera o desempenho do MySQL em 400 vezes para consultas analíticas, escala para milhares de núcleos e é 2,7 vezes mais rápido com cerca de um terço do custo dos concorrentes diretos. O MySQL Database Service, com HeatWave, é o único serviço para executar cargas de trabalho OLTP e OLAP diretamente do banco de dados MySQL.

Como funciona o HeatWave

Um cluster HeatWave inclui um nó MySQL DB System e dois ou mais nós HeatWave. O nó MySQL DB System possui um plug-in HeatWave que é responsável pelo gerenciamento de cluster, carregamento de dados no cluster HeatWave, agendamento de consultas e retorno dos resultados da consulta ao MySQL DB System. Os nós HeatWave armazenam dados na memória e processam consultas de análise. Cada nó HeatWave contém uma instância de HeatWave.

O número de nós HeatWave necessários depende do tamanho de seus dados e da quantidade de compactação obtida ao carregar os dados no cluster HeatWave. Podemos ver a arquitetura deste produto na imagem a seguir:

Como você pode ver, os usuários não acessam o cluster HeatWave diretamente. As consultas que atendem a determinados pré-requisitos são automaticamente descarregadas do MySQL DB System para o cluster HeatWave para processamento acelerado e os resultados são retornados ao nó MySQL DB System e, em seguida, ao cliente ou aplicativo MySQL que emitiu a consulta.

Como usar

Para habilitar esse recurso, você precisará acessar o Oracle Cloud Management Site, acessar o MySQL DB System existente (ou criar um novo) e adicionar um Analitycs Cluster. Lá você pode especificar o tipo de cluster e o número de nós. Você pode usar o recurso Estimate Node Count para saber o número necessário com base em sua carga de trabalho.

Carregar dados em um cluster HeatWave requer a preparação de tabelas no MySQL DB System e a execução de operações de carregamento de tabelas.

Preparando Tabelas

A preparação de tabelas envolve a modificação de definições de tabela para excluir determinadas colunas, definir codificações de coluna de string, adicionar chaves de posicionamento de dados e especificar HeatWave (RAPID) como o mecanismo secundário para a tabela, pois o InnoDB é o principal.

Para definir RAPID como o mecanismo secundário para uma tabela, especifique a opção de tabela SECONDARY_ENGINE em uma instrução CREATE TABLE ou ALTER TABLE:

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

Carregando dados

Carregar uma tabela em um cluster HeatWave requer a execução de uma operação ALTER TABLE com a palavra-chave SECONDARY_LOAD.

mysql> ALTER TABLE orders SECONDARY_LOAD;

Quando uma tabela é carregada, os dados são divididos horizontalmente e distribuídos entre os nós HeatWave. Depois que uma tabela é carregada, as alterações nos dados de uma tabela no nó MySQL DB System são propagadas automaticamente para os nós HeatWave.

Exemplo

Para este exemplo, usaremos as ordens da tabela:

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

Você pode excluir colunas que não deseja carregar no HeatWave:

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

Agora, defina RAPID como SECONDARY_ENGINE para a tabela:

mysql> ALTER TABLE orders SECONDARY_ENGINE RAPID;

Certifique-se de ter o parâmetro SECONDARY_ENGINE adicionado na definição da tabela:

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

E, finalmente, carregue a tabela no HeatWave:

mysql> ALTER TABLE orders SECONDARY_LOAD;

Você pode usar EXPLAIN para verificar se está usando o mecanismo correto. Você deve ver algo assim:

Extra:Usando where; Usando temporário; Usando classificação de arquivos; Usando o mecanismo secundário RAPID

No site oficial do MySQL, você pode ver uma comparação entre uma execução normal e o uso do HeatWave:

Execução do 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)

Execução normal

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)

Como você pode ver, há uma diferença importante no tempo da consulta, mesmo em uma consulta simples. Para mais informações, você pode consultar a documentação oficial.

Conclusão

Um único banco de dados MySQL pode ser usado para aplicativos OLTP e analíticos. É 100% compatível com MySQL local, para que você possa manter suas cargas de trabalho OLTP no local e descarregar suas cargas de trabalho analíticas para o HeatWave sem alterações em seu aplicativo, ou até mesmo usá-lo diretamente no Oracle Cloud para melhorar seu desempenho MySQL para Analytics propósitos.