So erstellen Sie eine Testdatenbank mit zig Millionen Testdaten in MySQL

So erstellen Sie eine Testdatenbank mit zig Millionen Testdaten in MySQL

Manchmal müssen Sie basierend auf der offiziell von MySQL bereitgestellten Testbibliothek Testdaten erstellen und Hunderttausende, Millionen oder Zehnmillionen Daten einfügen. Dies geschieht mithilfe einiger Funktionen und gespeicherter Prozeduren.

Offizielle Adresse der Testbibliothek: https://github.com/datacharmer/test_db

Wir haben die offizielle Datenbank importiert und einige Vereinfachungen vorgenommen, wobei drei Tabellen übrig blieben: Abteilungstabelle, Mitarbeitertabelle und Beschäftigungstabelle, und Fremdschlüsselassoziationen entfernt. Da es sich um Testdaten handelt, ist die Übereinstimmung zwischen den Daten nicht genau.

Notwendige Funktionen

Generieren Sie eine zufällige Zeichenfolge

RAND(): Erzeugt eine Zufallszahl zwischen 0 und 1

FLOOR: Abwärts gerichtete Ganzzahl (FLOOR(1.2)=1)

CEILING rundet auf (CEILING(1.2)=2)

Teilzeichenfolge: Zeichenfolge abfangen

concat: Zeichenkettenverkettung

CREATE DEFINER=`root`@`localhost` FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1
BEGINNEN
	DECLARE chars_str varchar(100) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  DECLARE return_str varchar(255) DEFAULT '';
  DECLARE i INT DEFAULT 0;
  WÄHREND ich < n DO
    SET return_str = concat(return_str,substring(chars_str,FLOOR(1 + RAND()*62),1));
    Setze i = i +1;
  ENDE WÄHREND;
  RETURN return_str;
ENDE

Alle benutzerdefinierten Funktionen anzeigen

Funktionsstatus anzeigen

Testeinsatz:

wähle rand_string(5);

Generieren Sie eine zufällige Zeichenfolge für Jahr, Monat und Tag

Generieren Sie ein zufälliges Datum innerhalb eines bestimmten Zeitraums

WÄHLEN
	Datum(
	from_unixtime( unix_timestamp( '2000-01-01' ) + floor( rand() * ( unix_timestamp( '2020-12-31' ) - unix_timestamp( '2000-01-01' ) + 1 ) ) ));

Funktion: Generierung eines zufälligen Datums innerhalb eines bestimmten Zeitraums

CREATE DEFINER=`root`@`localhost` FUNCTION `rand_date_string`(startDate varchar(255),endDate varchar(255)) RETURNS varchar(255) CHARSET latin1
BEGINNEN
  DECLARE return_str varchar(255) DEFAULT '';
	
	 SET return_str =Datum(
		von_unixzeit( unix_zeitstempel( startdatum ) 
				+ floor( rand() * ( unix_timestamp( Enddatum ) - unix_timestamp( Startdatum ) + 1 ) ) 
			)
	 );
  
  RETURN return_str;
ENDE

Testeinsatz:

Wählen Sie rand_date_string('2000-01-01','2020-12-31');
//Ergebnis 10.09.2001

Gespeicherte Prozedur generiert Daten

Wenn in jede Abteilung eine Million Mitarbeiter eingetragen werden, enthält die Mitarbeitertabelle neun Millionen Datensätze.

CREATE DEFINER=`root`@`localhost` VERFAHREN `data`()
BEGINNEN
	
	DECLARE i INT DEFAULT 1;
	DECLARE j INT DEFAULT 0;
	DECLARE-ID INT DEFAULT 0;
	WÄHREND i < 10 DO
			WÄHREND j < 1000000 DO
				insert into employees_m (Mitarbeiternummer, Geburtsdatum, Vorname, Nachname, Geschlecht, Einstellungsdatum) VALUES(
					id,rand_date_string('1970-01-01','1997-01-01'),rand_string(5),rand_string(5),'M',JETZT());
				
				in dept_emp_m einfügen (emp_no,dept_no,from_date,to_date) Werte(
					 id, concat('d00', i), Randdatum_Zeichenfolge('1990-01-01','2020-12-31'),'2020-12-31');
					 
			Setze j = j + 1;  
			SETZEN Sie die ID = ID + 1;  
			ENDE WÄHREND;
	Setze j = 0;
	Setze i = i + 1;   
	ENDE WÄHREND;

ENDE

Ungefähre Zeit zum Einfügen von 9 Millionen Datensätzen: 4868 s

Die obige Methode zum Einfügen von Daten ist sehr langsam. Sie können Daten in eine Speichertabelle einfügen, d. h. die Speicher-Engine der Tabelle in MEMORY ändern. Auf diese Weise wird der Speicher zum Speichern von Daten verwendet, was viel schneller ist, als sie direkt mit der INNODB-Engine in eine Tabelle einzufügen. Es gibt nur keine Persistenz, aber die Geschwindigkeit ist sehr hoch. Das Einfügen von 10 Millionen Daten dauert etwa 1227,89 s.

Anhang

Ändern der Tabellenspeicher-Engine

ALTER TABLE dept_emp_m ENGINE=MEMORY;

Passen Sie die Größe der Speichertabelle an und ändern Sie die Konfigurationsdatei

[mysqld]
maximale Heap-Tabellengröße = 2048 MB
temporäre Tabellengröße = 2048 M

Oben finden Sie Einzelheiten zum Erstellen einer Testbibliothek mit zig Millionen Testdaten in MySQL. Weitere Informationen zu zig Millionen Testdaten in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • MySQL-Schleife fügt zig Millionen Daten ein
  • So paginieren Sie schnell MySQL-Datenmengen im zweistelligen Millionenbereich
  • Detaillierte Erläuterung mehrerer praktischer Lösungen zum schnellen Löschen großer Datenmengen (zig Millionen) in MySQL
  • Zusammenfassung der Wissenspunkte zur SQL-Abfrageoptimierung für MySQL-Big Data im zweistelligen Millionenbereich
  • MySql schnelles Einfügen von zig Millionen großen Datenbeispielen
  • So erstellen Sie schnell zig Millionen Testdaten in MySQL
  • Detaillierte Erläuterung des Batch-Abfrage-Entwurfsmusters für MySQL-Sharding zur verteilten Speicherung von Millionen von Datensätzen
  • MySQL-Paging-Optimierung auf Millionenebene (MySQL-Fast-Paging auf zehn Millionen Ebenen)
  • Wie lassen sich MySQL-Tabellen mit mehreren zehn Millionen Daten optimieren?
  • Optimieren Sie das MySQL-Limit, verweisen Sie auf den zusammengesetzten Index der schnellen Paging von einer Million auf zehn Millionen und wenden Sie ihn auf ein leichtes Framework an

<<:  Lösen Sie das Problem, dass beim Ausführen von Docker zwei Ports gestartet werden, die unterschiedliche Ports belegen

>>:  So implementieren Sie einen einfachen HTML-Videoplayer

Artikel empfehlen

Zusammenfassung einiger Tipps zum Umgehen der Node.js-Codeausführung

Inhaltsverzeichnis 1. untergeordneter Prozess 2. ...

Lösung, wenn der Docker-Container nicht auf den Host-Port zugreifen kann

Ich bin kürzlich bei der Arbeit auf ein Problem g...

Erläuterung des Prinzips des MySQL-Replikationsmechanismus

Hintergrund Bei der Replikation handelt es sich u...

Div verschachteltes HTML ohne Iframe

Als ich kürzlich Hausaufgaben machte, musste ich e...

Über die Position des H1-Tags in XHTML

In letzter Zeit wurde viel über H1 diskutiert (auf...

Tutorial zu HTML-Tabellen-Tags (11): Horizontales Ausrichtungsattribut ALIGN

In horizontaler Richtung können Sie die Ausrichtu...

Webpack erstellt ein Gerüst zum Verpacken von TypeScript-Code

Erstellen eines Ordners Verzeichnisstruktur: daba...

React + Threejs + Swiper vollständiger Code zum Erzielen eines Panoramaeffekts

Schauen wir uns den Panorama-Effekt an: Adresse a...

5 äußerst nützliche Open-Source-Docker-Tools, die dringend empfohlen werden

Einführung Die Docker-Community hat viele Open-So...

Detaillierte Erläuterung der Wissenspunkte zu Linux Netfilter/Iptables

Netzfilter Netfilter ist ein Paketverarbeitungsmo...