"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment injecter des données factices simples à grande échelle dans MySQL

Comment injecter des données factices simples à grande échelle dans MySQL

Publié le 2024-08-01
Parcourir:391

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

Introduction

Vous êtes-vous déjà retrouvé dans une situation où vous aviez besoin d'une grande quantité de données factices pour les tests, mais ne vouliez pas passer des heures à écrire des scripts ou à insérer manuellement des enregistrements ? Ou peut-être êtes-vous curieux de savoir comment tirer parti des nouvelles fonctionnalités de MySQL 8.0 pour rationaliser les tâches de votre base de données ? Eh bien, vous allez vous régaler ! Dans cet article, nous explorerons comment utiliser les expressions de table communes (CTE) pour générer et insérer sans effort de grandes quantités de données factices dans votre base de données MySQL.

Imaginez avoir besoin de remplir une table avec un million de valeurs de hachage pour des tests de charge ou une analyse comparative des performances. Cela ressemble à un cauchemar, non ? Pas plus! Avec l'avènement des CTE dans MySQL 8.0, vous pouvez y parvenir en quelques secondes. Voyons comment cela fonctionne et comment vous pouvez utiliser cette fonctionnalité puissante pour simplifier vos besoins de génération de données.

TL ; RD

Les expressions de table communes (CTE), une nouvelle fonctionnalité ajoutée dans MySQL 8.0, peuvent être utilisées pour saisir facilement une grande quantité de données factices simples. Par exemple, si vous souhaitez saisir 1 million de données factices dans une table appelée hachages qui stocke les valeurs de hachage, vous pouvez y parvenir en procédant comme suit :

Définitions des tableaux

Tout d'abord, créez le tableau :

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

Exécution de requête

Définissez la variable de session pour autoriser une profondeur de récursion plus élevée :

SET SESSION cte_max_recursion_depth = 1000000;

Ensuite, exécutez le CTE pour insérer 1 million de lignes :

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



Cette méthode exploite une expression de table commune récursive pour générer les données factices.

Comprendre les CTE

Une expression de table commune (CTE) est un jeu de résultats temporaire nommé qui peut être référencé plusieurs fois dans une seule instruction. Les CTE sont particulièrement utiles pour simplifier les requêtes complexes et améliorer la lisibilité.

Répartition de la syntaxe

Définition de la profondeur de récursion

SET SESSION cte_max_recursion_depth = 1000000;

La variable système cte_max_recursion_degree définit la limite supérieure de récursion. Par défaut, c'est 1000, donc pour récurer davantage, vous devez l'ajuster. Ici, nous l'avons fixé à 1 million.

La requête CTE

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



Décomposons cette requête :

  • AVEC RECURSIVE cte (n) : ceci démarre la définition du CTE. cte est le nom du jeu de résultats temporaire et n est la colonne.

  • SELECT 1 : Il s'agit de la partie non récursive du CTE, servant de point de départ (valeur initiale).

  • UNION ALL SELECT n 1 FROM cte WHERE n

  • SELECT SHA2(n, 256) FROM cte : cette dernière partie de la requête sélectionne le hachage SHA-256 de chaque n valeur, générant les données factices à insérer.

Comment ça fonctionne

Le CTE génère de manière récursive des nombres de 1 à 1 000 000. Pour chaque numéro, il calcule le hachage SHA-256 et l'insère dans la table de hachage. Cette approche est efficace et exploite les capacités récursives de MySQL pour gérer de gros volumes de données de manière transparente.

Vitesse de traitement

Environnement de vérification

Pour comprendre l'impact de cette fonctionnalité, j'ai utilisé un espace de travail Gitpod Enterprise, tirant parti de l'environnement puissant et éphémère pour éviter les tracas de configuration et d'installation. Voici un aperçu de la configuration :

  • Machine : Gitpod Enterprise XXGrand espace de travail
  • OS : Ubuntu 22.04.4 LTS (Jammy Jellyfish)
  • Conteneurisation : Docker version 26.0.1
  • Version MySQL : image Docker officielle de MySQL 8.0

Résultats

Pour 1 million de lignes, le temps d'exécution de la requête est d'environ 4,46 secondes :

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

Indicateurs de performance

Nombre de rangées Temps d'exécution
1 000 0,03 s
10 000 0,07 s
100 000 0,42 s
1 000 000 4,43 secondes
10 000 000 48,53 secondes

Conclusion

L'utilisation des CTE dans MySQL 8.0 change la donne pour générer rapidement de grandes quantités de données factices. C'est particulièrement pratique pour les tests de charge et l'analyse comparative des performances. Avec seulement quelques lignes de code, vous pouvez facilement remplir vos tableaux, puis revenir aux autres parties importantes de votre projet.

N'hésitez pas à jouer avec différentes stratégies de génération de données et profondeurs de récursion pour voir ce qui fonctionne le mieux pour vous. Pour plus de conseils et d'informations sur la sécurité et l'analyse des journaux, suivez-moi sur Twitter @Siddhant_K_code et restez à jour avec le contenu technique le plus récent et détaillé comme celui-ci. Bon codage !

Déclaration de sortie Cet article est reproduit sur : https://dev.to/siddhantkcode/how-to-inject-simple-dummy-data-at-a-large-scale-in-mysql-eci?1 En cas de violation, veuillez contacter study_golang@163 .comdelete
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3