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.