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

RGB-Farbtabellensammlung

RGB-Farbtabelle Farbe Englischer Name RGB 16 Farb...

Warum sollte CSS im Head-Tag platziert werden?

Denken Sie darüber nach: Warum sollte css im head...

Ein Artikel erklärt den Klassenlademechanismus von Tomcat

Inhaltsverzeichnis - Vorwort - - JVM-Klassenlader...

Lösung für MySQL-Fehlercode 1862 Ihr Passwort ist abgelaufen

Der Blogger hat MySQL ein oder zwei Monate lang n...

JavaScript zum Erzielen eines Zeitlupenanimationseffekts

In diesem Artikel wird der spezifische Code für J...

Analyse der vier Transaktionsisolationsstufen in MySQL anhand von Beispielen

Vorwort Um bei Datenbankoperationen die Richtigke...

Detaillierte Erklärung der gemischten Vererbung in Vue

Inhaltsverzeichnis Die Auswirkungen der gemischte...

Wie implementiert MySQL ACID-Transaktionen?

Vorwort Kürzlich wurde ich in einem Interview gef...

Detaillierte Erläuterung der Nginx-Prozessverwaltungs- und Neuladeprinzipien

Prozessstrukturdiagramm Nginx ist eine Multiproze...

Detailliertes Tutorial zur Installation von Protobuf 3 unter Ubuntu

Wann ist die Installation durchzuführen? Wenn Sie...

JavaScript zur Implementierung der Webversion des Gobang-Spiels

In diesem Artikel wird der spezifische Code für J...