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

Detaillierte Erklärung der MySQL-Halbsynchronisierung

Inhaltsverzeichnis Vorwort MySQL Master-Slave-Rep...

Docker verwendet ein einzelnes Image zum Zuordnen zu mehreren Ports

brauchen: Der Ressourcenserver der offiziellen We...

Linux-Installation, MongoDB-Start und Lösung allgemeiner Probleme

MongoDB-Installationsprozess und Problemaufzeichn...

Warum sollte CSS im Head-Tag platziert werden?

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

So überwachen Sie MySQL mit Zabbix

Dokumentation zur Zabbix-Bereitstellung Nach der ...

Vue implementiert Mehrfachauswahl im unteren Popup-Fenster

In diesem Artikelbeispiel wird der spezifische Co...

js genaue Berechnung

var numA = 0,1; var numB = 0,2; Alarm (Zahl A + Z...