"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo inyectar datos ficticios simples a gran escala en MySQL

Cómo inyectar datos ficticios simples a gran escala en MySQL

Publicado el 2024-08-01
Navegar:194

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

Introducción

¿Alguna vez te has encontrado en una situación en la que necesitabas una gran cantidad de datos ficticios para realizar pruebas, pero no querías pasar horas escribiendo scripts o insertando registros manualmente? ¿O tal vez ha sentido curiosidad por saber cómo aprovechar las nuevas funciones de MySQL 8.0 para optimizar las tareas de su base de datos? Bueno, ¡te espera un placer! En esta publicación, exploraremos cómo usar expresiones de tabla comunes (CTE) para generar e insertar sin esfuerzo grandes cantidades de datos ficticios en su base de datos MySQL.

Imagínese la necesidad de completar una tabla con un millón de valores hash para pruebas de carga o evaluaciones comparativas de rendimiento. Suena como una pesadilla, ¿verdad? ¡Ya no! Con la llegada de CTE en MySQL 8.0, puedes lograr esto en cuestión de segundos. Analicemos cómo funciona esto y cómo puede utilizar esta potente función para simplificar sus necesidades de generación de datos.

TL; DR

Las expresiones de tabla comunes (CTE), una nueva característica agregada en MySQL 8.0, se pueden usar para ingresar fácilmente una gran cantidad de datos ficticios simples. Por ejemplo, si desea ingresar 1 millón de datos ficticios en una tabla llamada hashes que almacena valores hash, puede lograrlo con los siguientes pasos:

Definiciones de tablas

Primero, crea la tabla:

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

Ejecución de consultas

Establezca la variable de sesión para permitir una mayor profundidad de recursividad:

SET SESSION cte_max_recursion_depth = 1000000;

Luego, ejecuta el CTE para insertar 1 millón de filas:

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



Este método aprovecha una expresión de tabla común recursiva para generar datos ficticios.

Comprender las CTE

Una expresión de tabla común (CTE) es un conjunto de resultados temporales con nombre al que se puede hacer referencia dentro de una sola declaración varias veces. Los CTE son particularmente útiles para simplificar consultas complejas y mejorar la legibilidad.

Desglose de sintaxis

Establecer la profundidad de la recursividad

SET SESSION cte_max_recursion_depth = 1000000;

La variable de sistema cte_max_recursion_ Depth establece el límite superior de recursividad. De forma predeterminada, es 1000, por lo que para repetir más, debes ajustarlo. Aquí lo configuramos en 1 millón.

La consulta CTE

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



Desglosemos esta consulta:

  • CON cte RECURSIVO (n): Esto inicia la definición de CTE. cte es el nombre del conjunto de resultados temporal y n es la columna.

  • SELECT 1: Esta es la parte no recursiva del CTE, que sirve como punto de partida (valor inicial).

  • UNION ALL SELECT n 1 FROM cte WHERE n

  • SELECT SHA2(n, 256) FROM cte: esta parte final de la consulta selecciona el hash SHA-256 de cada valor n, generando los datos ficticios para su inserción.

Cómo funciona

El CTE genera recursivamente números del 1 al 1.000.000. Para cada número, calcula el hash SHA-256 y lo inserta en la tabla de hashes. Este enfoque es eficiente y aprovecha las capacidades recursivas de MySQL para manejar grandes volúmenes de datos sin problemas.

Velocidad de procesamiento

Entorno de verificación

Para comprender el impacto de esta característica, utilicé un espacio de trabajo de Gitpod Enterprise, aprovechando el entorno poderoso y efímero para evitar la molestia de configuraciones e instalaciones. Aquí hay un vistazo a la configuración:

  • Máquina: Espacio de trabajo Gitpod Enterprise XXLarge
  • SO: Ubuntu 22.04.4 LTS (Jammy Jellyfish)
  • Containerización: Docker versión 26.0.1
  • Versión MySQL: Imagen oficial de MySQL 8.0 Docker

Resultados

Para 1 millón de filas, el tiempo de ejecución de la consulta es 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 rendimiento

Número de filas Tiempo de ejecución
1000 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

Conclusión

El uso de CTE en MySQL 8.0 cambia las reglas del juego para generar grandes cantidades de datos ficticios rápidamente. Es especialmente útil para pruebas de carga y evaluaciones comparativas de rendimiento. Con solo unas pocas líneas de código, puedes completar tus tablas sin esfuerzo y luego volver a las otras partes importantes de tu proyecto.

No dude en probar diferentes estrategias de generación de datos y profundidades de recursividad para ver cuál funciona mejor para usted. Para obtener más consejos e información sobre seguridad y análisis de registros, sígueme en Twitter @Siddhant_K_code y mantente actualizado con el contenido tecnológico más reciente y detallado como este. ¡Feliz codificación!

Declaración de liberación Este artículo se reproduce en: https://dev.to/siddhantkcode/how-to-inject-simple-dummy-data-at-a-large-scale-in-mysql-eci?1 Si hay alguna infracción, por favor contacto Study_golang@163 .comeliminar
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3