So fügen Sie in 88 Sekunden 10 Millionen Datensätze in eine MySQL-Datenbanktabelle ein

So fügen Sie in 88 Sekunden 10 Millionen Datensätze in eine MySQL-Datenbanktabelle ein

Die von mir verwendete Datenbank ist MySQL Datenbank Version 5.7

Bereiten Sie die Datenbanktabelle zunächst selbst vor

Tatsächlich sind beim Einfügen von 10 Millionen Daten einige Probleme aufgetreten. Jetzt werde ich diese zuerst lösen. Zu Beginn trat beim Einfügen von 1 Million Daten ein Fehler auf. Die Konsoleninformationen lauten wie folgt:

com.mysql.jdbc.PacketTooBigException: Paket für Abfrage ist zu groß (4232009 > 4194304). Sie können diesen Wert auf dem Server ändern, indem Sie die Variable „max_allowed_packet“ festlegen.

Der obige Fehler tritt auf, weil die max_allowed_packet-Konfiguration der Datenbanktabelle nicht groß genug ist, da der Standardwert 4 M beträgt. Später habe ich ihn auf 100 M angepasst und es wurde kein Fehler gemeldet.

setze global max_allowed_packet = 100*1024*1024*

Denken Sie daran, dass Sie sich nach dem Einstellen erneut bei der Datenbank anmelden müssen, um den eingestellten Wert anzuzeigen

VARIABLEN anzeigen wie '%max_allowed_packet%'

Der Code lautet wie folgt:

Packungsbeilage;
importiere java.sql.Connection;
importiere java.sql.DriverManager;
importiere java.sql.SQLException;
importiere java.util.Date;
importiere com.mysql.jdbc.PreparedStatement;
öffentliche Klasse InsertTest {
   public static void main(String[] args) throws ClassNotFoundException, SQLException {
     endgültige String-URL = "jdbc:mysql://127.0.0.1/teacher"; 
     endgültiger String-Name = "com.mysql.jdbc.Driver"; 
     endgültiger String-Benutzer = "root"; 
     endgültiges String-Passwort = "123456"; 
     Verbindung conn = null; 
     Class.forName(name); //Verbindungstyp angeben conn = DriverManager.getConnection(url, user, password); //Verbindung abrufen if (conn!= null ) {
       System.out.println("Verbindung erfolgreich hergestellt");
       einfügen(conn);
     } anders {
       System.out.println("Verbindung konnte nicht hergestellt werden");
     }
   }
   öffentliche statische Leere einfügen (Verbindung conn) {
     // Startzeit Long begin = new Date().getTime();
     // SQL-Präfix String-Präfix = "INSERT INTO t_teacher (id,t_name,t_password,sex,description,pic_url,school_name,registrate,remark) VALUES ";
     versuchen {
       // SQL-Suffix speichern StringBuffer suffix = new StringBuffer();
       // Transaktion auf Nicht-Automatisches Commit setzen conn.setAutoCommit( false );
       // PST ist besser als ST PreparedStatement pst = (PreparedStatement) conn.prepareStatement( "" ); //Anweisung zur Ausführung vorbereiten// Äußere Schleife, Gesamtzahl der festgeschriebenen Transaktionen für (int i = 1; i <= 100; i++) {
         Suffix = neuer StringBuffer();
         // j-ter Übermittlungsschritt für (int j = 1; j <= 100000; j++) {
           // SQL-Suffix erstellen suffix.append( "('" + uutil.UUIDUtil.getUUID()+ "','" +i*j+ "','123456'" + ",'Männlich'" + ",'Lehrer'" + ",'www.bbk.com'" + ",'XX Universität'" + ",'" + "2016-08-12 14:43:26" + "','Hinweis'" + ")," );
         }
         // Vollständiges SQL erstellen
         Zeichenfolge SQL = Präfix + Suffix.Teilzeichenfolge (0, Suffix.Länge() – 1);
         //Ausführungs-SQL hinzufügen
         pst.addBatch(sql);
         // Operationen ausführen pst.executeBatch();
         // Transaktion festschreiben conn.commit();
         // Zuletzt hinzugefügte Daten löschen suffix = new StringBuffer();
       }
       //Erstklassige Verbindung pst.close();
       Verbindung schließen();
     } Fang (SQLException e) {
       e.printStackTrace();
     }
     // Endzeit Langes Ende = neues Date().getTime();
     // Zeitaufwendig System.out.println( "Zeit, die zum Einfügen von 10 Millionen Datensätzen benötigt wird: " + (end - begin) / 1000 + " s" );
     System.out.println("Einfügen abgeschlossen");
   }
}

Zusammenfassen

Oben ist die vom Editor eingeführte Operationsmethode, um 10 Millionen Daten in 88 Sekunden in die MySQL-Datenbanktabelle einzufügen. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • MySql schnelles Einfügen von zig Millionen großen Datenbeispielen
  • Beispielcode zum Einfügen von Millionen von Daten in MySQL mithilfe von JDBC in Java
  • So fügen Sie schnell Millionen von Testdaten in MySQL ein
  • Lernen Sie, wie Sie in 6 Sekunden 1 Million Datensätze in MySQL einfügen

<<:  ThingJS-Partikeleffekte, um Regen- und Schneeeffekte mit einem Klick zu erzielen

>>:  JavaScript-Offset implementiert die Erfassung der Mauskoordinaten und das Ziehen von Modulen innerhalb des Fensters

Artikel empfehlen

Die Tücken der automatischen Inkrementierung numerischer MySQL-Typen

Beim Entwurf von Tabellenstrukturen gehören numer...

Eine kurze Erläuterung des Sperrbereichs der MySQL-Next-Key-Sperre

Vorwort Eines Tages wurde ich plötzlich nach der ...

Fallstudie zum Löschen und Neuinstallieren eines Mac-Knotens

Mac-Knoten löschen und neu installieren löschen K...

So ermitteln Sie, ob das Linux-System auf VMware installiert ist

Wie kann festgestellt werden, ob das aktuelle Lin...

MySql Group By implementiert die Gruppierung mehrerer Felder

Bei täglichen Entwicklungsaufgaben verwenden wir ...

HTML-Code zum Hinzufügen von Symbolen zum transparenten Eingabefeld

Ich habe vor Kurzem eine Website mit Anwaltsempfe...

Detaillierte Erklärung des JavaScript-Fortschrittsmanagements

Inhaltsverzeichnis Vorwort Frage Prinzip prüfen V...

Detaillierter Prozess der Installation von Jenkins-2.249.3-1.1 mit Docker

Inhaltsverzeichnis 1. Docker installieren 2. Zieh...

Tiefgreifendes Verständnis der logischen Architektur von MySQL

MySQL ist heute die Datenbank, die von den meiste...