Quando sua tabela tem 30 milhões de registros no MySQL

Imagine que você é um padeiro que precisa fatiar os pães produzidos. Agora multiplique isso por 3.000. É assim que se sente quando sua tabela MySQL cresce para 30 milhões de linhas. De repente, aquela consulta rápida vira uma espera eterna, como esperar o pão crescer em pleno inverno.

Por que 30 milhões de registros são diferentes?

Uma tabela pequena é como sua lista de compras – você encontra tudo rapidamente. Contudo, 30 milhões de registros são como a biblioteca de Alexandria: encontrar um livro específico exige organização e estratégia. O MySQL precisa de ajustes especiais para não ficar sobrecarregado, similar a como um padeiro profissional precisa de equipamentos industriais para produzir milhares de pães diariamente.

Preparando o terreno: configurando o MySQL para grandes volumes

Antes de mergulhar nos dados, precisamos ajustar nosso “forno” para assar pães em larga escala. As configurações padrão do MySQL são como um forno doméstico – perfeito para um bolo, mas insuficiente para uma padaria industrial.

Passos:

  • Feche o MySQL
  • abra o CMD como ADMINISTRADOR
  • Parando o MySQL pelo CMD

 

  • Navegar para a pasta de configuração onde está o arquivo my.ini

  • faça um Backup do my.ini original

  • Acessando my.ini em modeo edição

  • Minha receita para a minha situação

Assim como diferentes tipos de pão exigem temperaturas e tempos específicos, diferentes cargas de trabalho precisam de configurações personalizadas. Principalmente, focaremos no innodb_buffer_pool_size – a memória que o MySQL usa para armazenar dados frequentemente acessados.

No meu caso tenho uma tabela vendas_medicamentos com 30468924 de linhas que preciso fazer o group by por ANO_VENDA, MUNICIPIO_VENDA, PRINCIPIO_ATIVO.

O meu my.ini ficou desta forma:

Passo 8 -Reinicie o servidor de BD MySQL no CMD

  • No MySQL execute:

SET SESSION net_read_timeout = 1800;

SET SESSION net_write_timeout = 1800;

SET GLOBAL max_allowed_packet = 268435456;

Estratégias inteligentes para trabalhar com dados massivos

Trabalhar com 30 milhões de registros exige a mesma paciência e estratégia que um alpinista precisa para escalar o Everest. Você não sobe de uma vez – divide em acampamentos-base.

Atualizações em lotes: dividir para conquistar

Atualizar 30 milhões de registros de uma vez é como tentar assinar 10.000 pães no mesmo forno. Eventualmente, algo queima. Por isso, dividimos em lotes menores:

Consultas filtradas: buscando agulhas no palheiro

Encontrar dados específicos em 30 milhões de registros exige filtros inteligentes, similar a como um matemático usa equações para resolver problemas complexos:

Os detalhes que fazem diferença

Assim como a qualidade da farinha afeta o pão, pequenos detalhes na configuração impactam drasticamente o desempenho. Inegavelmente, o innodb_buffer_pool_size é o mais importante – ele determina quantos dados ficam na memória RAM, que é milhões de vezes mais rápida que o disco.

  • innodb_buffer_pool_size: Use 50-80% da RAM disponível
  • innodb_flush_log_at_trx_commit = 2: Acelera escrita mas reduz segurança em caso de queda de energia
  • Índices: Como índice de livro – aceleram buscas mas desaceleram inserções

Perguntas que os iniciantes fazem

Você deve estar se perguntando: “Por que não uso configurações gigantescas desde o início?” Analogamente a como um padeiro não usa fermento em excesso, configurações muito grandes podem travar seu servidor. Comece conservador e ajuste conforme necessário.

Uma confusão comum é pensar que mais RAM sempre resolve tudo. Surpreendentemente, sem os índices corretos, é como ter uma Ferrari em um congestionamento – o poder está lá, mas você não consegue usar.

Para onde ir agora?

Comece aplicando as configurações básicas e testando com consultas pequenas. Posteriormente, monitore o desempenho usando o slow query log para identificar gargalos. Lembre-se: otimização de banco de dados é uma jornada, não um destino.

Assuntos relacionados

  • Complexidade algorítmica e notação Big O
  • Estatística descritiva para análise de dados
  • Probabilidade e distribuições de dados
  • Otimização matemática e trade-offs
  • Álgebra relacional e teoria de conjuntos

Referências que valem a pena

Dominar grandes volumes de dados é como dominar a arte da panificação: requer prática, paciência e os ingredientes certos. Agora você tem a receita – mãos à obra!

Regularização Min-Max Scaling no Python

O Min-Max Scaling é uma técnica de pré-processamento de dados que transforma features (características) escalando cada feature para um range específico, geralmente [0, 1]. É uma das técnicas de normalização mais comuns em aprendizado de máquina.

O que é Min-Max Scaling?

Min-Max Scaling é um método de normalização que transforma os dados redimensionando-os para um intervalo fixo, normalmente [0, 1]. A transformação é dada pela fórmula:

\(X_{\text{scaled}} = \frac{X – X_{\text{min}}}{X_{\text{max}} – X_{\text{min}}}\)

Onde:

  • \(X\) é o valor original
  • \(X_{\text{min}}\) é o valor mínimo da feature
  • \(X_{\text{max}}\) é o valor máximo da feature
  • \(X_{\text{scaled}}\) é o valor normalizado

Implementação manual em Python:

Em R, podemos implementar Min-Max Scaling similarmente:

Implementação com Scikit-Learn

Usando MinMaxScaler

A biblioteca Scikit-Learn fornece a classe MinMaxScaler que implementa eficientemente a normalização Min-Max:

O MinMaxScaler também permite definir um range personalizado:

Aplicação em DataFrame Pandas

O MinMaxScaler pode ser aplicado diretamente em DataFrames do Pandas:

Em R, podemos usar a função scale() com parâmetros apropriados ou o pacote caret:

Vantagens e Desvantagens do Min-Max Scaling

Vantagens:

  • Preserva a forma da distribuição original
  • Mantém as relações entre os valores originais
  • Fácil de implementar e interpretar
  • Não distorce as distâncias entre os valores
  • Ideal para dados com distribuição não-normal

Desvantagens:

  • Sensível a outliers (valores extremos)
  • Não centraliza os dados na média zero
  • Não reduz a variabilidade dos dados
  • Não é adequado quando a presença de outliers é significativa

⚠️ Cuidado com Outliers

O Min-Max Scaling é sensível a outliers pois os valores mínimo e máximo são determinados pelos valores extremos do conjunto de dados:

Neste caso, o outlier (1000) comprime todos os outros valores em uma faixa muito estreita próximo a zero.

Quando Usar Min-Max Scaling

Algoritmos Baseados em Distância

Use Min-Max Scaling para algoritmos que dependem de medidas de distância, como K-NN, K-Means e SVM.

Redes Neurais

Use Min-Max Scaling para normalizar inputs de redes neurais, especialmente com funções de ativação como sigmoid ou tanh.

Processamento de Imagens

Use Min-Max Scaling para normalizar valores de pixels (0-255) para o range 0-1.

Comparação com Outras Técnicas de Normalização

O Min-Max Scaling é uma entre várias técnicas de normalização. Vamos compará-lo com outras abordagens comuns:

Standardization (Z-score Normalization)

\(X_{\text{standardized}} = \frac{X – \mu}{\sigma}\)
  • Centraliza os dados na média 0
  • Escala para desvio padrão 1
  • Menos sensível a outliers
  • Ideal para dados com distribuição normal

Robust Scaling

\(X_{\text{robust}} = \frac{X – \text{mediana}}{\text{IQR}}\)
  • Usa mediana e IQR (Intervalo Interquartil)
  • Robusto a outliers
  • Ideal para dados com outliers significativos

Exemplo comparativo:

Conclusão

O Min-Max Scaling é uma técnica fundamental de pré-processamento de dados no machine learning. Sua simplicidade e eficácia o tornam uma escolha popular para normalizar features para um range específico, especialmente quando a distribuição original dos dados não é normal e não há outliers significativos.

Lembre-se de sempre:

  1. Ajustar o scaler apenas com dados de treinamento
  2. Aplicar a mesma transformação em dados de teste/validação
  3. Considerar técnicas alternativas como StandardScaler ou RobustScaler quando houver outliers
  4. Documentar os parâmetros de transformação para reprodutibilidade

Referências