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

Verwendung und Beispiele für Linux-Befehle zur Echotextverarbeitung

Die Beschreibung von echo im Linux-Hilfedokument ...

So verwenden Sie Web-Frontend-Vektorsymbole

Vorwort Beim Schreiben von Frontend-Seiten verwen...

Detaillierte Erklärung der verschiedenen Verwendungen von proxy_pass in nginx

Inhaltsverzeichnis Proxy-Weiterleitungsregeln Der...

Vue+Swiper realisiert Timeline-Effekt

In diesem Artikel wird der spezifische Code von v...

Beispielcode zur Implementierung der Alipay-Sandbox-Zahlung mit Vue+SpringBoot

Laden Sie zunächst eine Reihe von Dingen aus der ...

MySQL InnoDB-Quellcodeanalyse für Transaktionssperren

Inhaltsverzeichnis 1. Schloss und Riegel 2. Wiede...

Der Unterschied und die Verwendung von LocalStorage und SessionStorage in Vue

Inhaltsverzeichnis Was ist LocalStorage Was ist S...

JavaScript Canvas realisiert den Effekt des Neun-Quadrat-Rasterschneidens

In diesem Artikel wird der spezifische Code der L...

Detaillierte Erklärung der dynamischen Angular-Komponenten

Inhaltsverzeichnis Anwendungsszenarien So erreich...

Implementierung der MySQL Master-Slave-Statusprüfung

1. Überprüfen Sie den Synchronisierungsstatus der...

Detaillierte Schritte zur Entwicklung von WeChat-Miniprogrammen mit Typescript

Auf die Vorteile von Typescript müssen wir nicht ...

So konfigurieren Sie Http, Https, WS und WSS in Nginx

Vorne geschrieben Im heutigen Internetbereich ist...