"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como injetar dados fictícios simples em grande escala no MySQL

Como injetar dados fictícios simples em grande escala no MySQL

Publicado em 01/08/2024
Navegar:468

How to inject simple dummy data at a large scale in MySQL

Introdução

Você já se viu em uma situação em que precisava de uma grande quantidade de dados fictícios para testes, mas não queria gastar horas escrevendo scripts ou inserindo registros manualmente? Ou talvez você esteja curioso sobre como aproveitar os novos recursos do MySQL 8.0 para agilizar suas tarefas de banco de dados? Bem, você terá uma surpresa! Nesta postagem, exploraremos como usar Common Table Expressions (CTEs) para gerar e inserir sem esforço grandes quantidades de dados fictícios em seu banco de dados MySQL.

Imagine a necessidade de preencher uma tabela com um milhão de valores de hash para testes de carga ou benchmarking de desempenho. Parece um pesadelo, certo? Não mais! Com o advento dos CTEs no MySQL 8.0, você pode conseguir isso em questão de segundos. Vamos ver como isso funciona e como você pode usar esse recurso poderoso para simplificar suas necessidades de geração de dados.

TL; DR

Common Table Expressions (CTEs), um novo recurso adicionado no MySQL 8.0, pode ser usado para inserir facilmente uma grande quantidade de dados fictícios simples. Por exemplo, se você deseja inserir 1 milhão de dados fictícios em uma tabela chamada hashes que armazena valores de hash, você pode fazer isso com as seguintes etapas:

Definições de tabela

Primeiro, crie a tabela:

CREATE TABLE hashes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  hash CHAR(64)
);

Execução de consulta

Defina a variável de sessão para permitir uma maior profundidade de recursão:

SET SESSION cte_max_recursion_depth = 1000000;

Em seguida, execute o CTE para inserir 1 milhão de linhas:

INSERT INTO hashes(hash)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n   1 FROM cte WHERE n 



Este método aproveita uma expressão de tabela comum recursiva para gerar os dados fictícios.

Compreendendo os CTEs

Uma Common Table Expression (CTE) é um conjunto de resultados temporário nomeado que pode ser referenciado em uma única instrução várias vezes. CTEs são particularmente úteis para simplificar consultas complexas e melhorar a legibilidade.

Divisão de sintaxe

Configurando a profundidade da recursão

SET SESSION cte_max_recursion_depth = 1000000;

A variável de sistema cte_max_recursion_profundidade define o limite superior para recursão. Por padrão, é 1000, então para recorrer mais, você precisa ajustá-lo. Aqui, definimos como 1 milhão.

A consulta CTE

INSERT INTO hashes(hash)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n   1 FROM cte WHERE n 



Vamos analisar esta consulta:

  • WITH RECURSIVE cte (n): Isso inicia a definição do CTE. cte é o nome do conjunto de resultados temporário e n é a coluna.

  • SELECT 1: Esta é a parte não recursiva do CTE, servindo como ponto de partida (valor inicial).

  • UNION ALL SELECT n 1 FROM cte WHERE n

  • SELECT SHA2(n, 256) FROM cte: Esta parte final da consulta seleciona o hash SHA-256 de cada valor n, gerando os dados fictícios para inserção.

Como funciona

O CTE gera recursivamente números de 1 a 1.000.000. Para cada número, ele calcula o hash SHA-256 e o ​​insere na tabela de hashes. Essa abordagem é eficiente e aproveita os recursos recursivos do MySQL para lidar perfeitamente com grandes volumes de dados.

Velocidade de processamento

Ambiente de verificação

Para entender o impacto desse recurso, usei um espaço de trabalho Gitpod Enterprise, aproveitando o ambiente poderoso e efêmero para evitar o incômodo de configurações e instalações. Aqui está uma olhada na configuração:

  • Máquina: Gitpod Enterprise XXLarge espaço de trabalho
  • SO: Ubuntu 22.04.4 LTS (Jammy Jellyfish)
  • Containerização: Docker versão 26.0.1
  • Versão do MySQL: Imagem oficial do Docker do MySQL 8.0

Resultados

Para 1 milhão de linhas, o tempo de execução da consulta é de aproximadamente 4,46 segundos:

mysql> INSERT INTO hashes(hash)
    -> WITH RECURSIVE cte (n) AS
    -> (
    ->   SELECT 1
    ->   UNION ALL
    ->   SELECT n   1 FROM cte WHERE n  )
    -> SELECT SHA2(n, 256) FROM cte;
Query OK, 1000000 rows affected (4.43 sec)
Records: 1000000  Duplicates: 0  Warnings: 0

Métricas de desempenho

Numero de linhas Tempo de execução
1.000 0,03 seg
10.000 0,07 seg
100.000 0,42 seg
1.000.000 4,43 seg
10.000.000 48,53 seg

Conclusão

O uso de CTEs no MySQL 8.0 é uma virada de jogo para a geração rápida de grandes quantidades de dados fictícios. É especialmente útil para testes de carga e benchmarking de desempenho. Com apenas algumas linhas de código, você pode preencher suas tabelas sem esforço e depois voltar para outras partes importantes do seu projeto.

Não hesite em experimentar diferentes estratégias de geração de dados e profundidades de recursão para ver o que funciona melhor para você. Para obter mais dicas e insights sobre segurança e análise de log, siga-me no Twitter @Siddhant_K_code e fique atualizado com o conteúdo técnico mais recente e detalhado como este. Boa codificação!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/siddhantkcode/how-to-inject-simple-dummy-data-at-a-large-scale-in-mysql-eci?1 Se houver alguma violação, por favor entre em contato com study_golang@163 .comdelete
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3