Lassen Sie uns zunächst über eine Frage nachdenken: Um solch große Datenmengen in die Datenbank einzufügen, muss unter normalen Umständen häufig auf sie zugegriffen werden, und keine maschinelle Ausrüstung kann dies verarbeiten. Wie können wir also häufige Zugriffe auf die Datenbank vermeiden? Können wir einmal darauf zugreifen und sie dann ausführen? Java hat uns tatsächlich die Antwort gegeben. Hier kommen zwei Schlüsselobjekte zum Einsatz: Schauen wir uns die Eigenschaften der beiden an: Zu verwendende BaseDao-Toolklasse (JAR-Paket/Maven-Abhängigkeit) (Maven-Abhängigkeitscode ist am Ende des Artikels angehängt) (für einfache Verwendung gepackt) Hinweis: (Wichtig) rewriteBatchedStatements=true, fügen Sie mehrere Daten gleichzeitig ein und fügen Sie sie nur einmal ein! ! public class BaseDao { // Statische Tool-Klasse, die zum Erstellen von Datenbankverbindungsobjekten und Freigeben von Ressourcen für einfache Aufrufe verwendet wird // Importieren Sie das JAR-Treiberpaket oder fügen Sie Maven-Abhängigkeiten hinzu (hier wird Maven verwendet und der Maven-Abhängigkeitscode ist am Ende des Artikels angehängt) statisch { versuchen { Klasse.fürName("com.mysql.cj.jdbc.Driver"); } Fang (ClassNotFoundException e) { e.printStackTrace(); } } // Datenbankverbindungsobjekt abrufen public static Connection getConn() { Verbindung conn = null; versuchen { // rewriteBatchedStatements=true, mehrere Daten gleichzeitig einfügen, nur einmal einfügenconn = DriverManager.getConnection("jdbc:mysql://localhost:3306/million-test?rewriteBatchedStatements=true", "root", "qwerdf"); } Fang (SQLException-Ausnahmen) { throwables.printStackTrace(); } Rückverbindung; } // Ressourcen freigeben public static void closeAll(AutoCloseable... autoCloseables) { für (AutoCloseable autoCloseable : autoCloseables) { wenn (autoCloseable != null) { versuchen { autoCloseable.close(); } Fang (Ausnahme e) { // TODO Automatisch generierter Catch-Block e.printStackTrace(); } } } } } Als nächstes folgen die Schlüsselcodes und Kommentare: /* Da die Verarbeitungsgeschwindigkeit der Datenbank sehr hoch ist, ist der Einzeldurchsatz sehr groß und die Ausführungseffizienz sehr hoch. addBatch() lädt mehrere SQL-Anweisungen zusammen und sendet sie zur gleichzeitigen Ausführung an die Datenbank. Die Ausführung dauert sehr kurz. preparedStatement.executeUpdate() sendet sie einzeln zur Ausführung an die Datenbank, und die Zeit wird für die Übertragung der Datenbankverbindung verbraucht.*/ öffentliche statische void main(String[] args) { long start = System.currentTimeMillis(); // Aktuelle Zeit des Systems abrufen und aufzeichnen, bevor die Methode mit der Ausführung beginnt. Connection conn = BaseDao.getConn(); // Die soeben geschriebene statische Toolklasse aufrufen, um das Datenbankobjekt der Verbindung abzurufen. String sql = "insert into mymilliontest values(null,?,?,?,NOW())"; // Auszuführende SQL-Anweisung PreparedStatement ps = null; versuchen { ps = conn.prepareStatement(sql); // PreparedStatement-Objekt abrufen // Kontinuierlich SQL generieren für (int i = 0; i < 1000000; i++) { ps.setString(1, Math.ceil(Math.random() * 1000000) + ""); ps.setString(2, Math.ceil(Math.random() * 1000000) + ""); ps.setString(3, UUID.randomUUID().toString()); // Die UUID-Klasse wird verwendet, um zufällig einen String zu generieren, der nicht wiederholt wird. ps.addBatch(); // Fügen Sie dem Batch-Befehl dieses PreparedStatement-Objekts einen Parametersatz hinzu. } int[] ints = ps.executeBatch(); // Senden Sie einen Stapel von Befehlen zur Ausführung an die Datenbank. Wenn alle Befehle erfolgreich ausgeführt wurden, wird ein Array mit Aktualisierungszahlen zurückgegeben. // Wenn die Array-Länge ungleich 0 ist, bedeutet dies, dass die SQL-Anweisung erfolgreich ausgeführt wurde, d. h. eine Million Daten wurden erfolgreich hinzugefügt! wenn (ints.length > 0) { System.out.println("Eine Million Datensätze wurden erfolgreich hinzugefügt!!"); } } Fang (SQLException-Ausnahmen) { throwables.printStackTrace(); Endlich BaseDao.closeAll(conn, ps); // Rufe die gerade geschriebene statische Tool-Klasse auf, um Ressourcen freizugeben} long end = System.currentTimeMillis(); // Systemzeit erneut abrufen System.out.println("Benötigte Zeit: " + (end - start) / 1000 + "seconds"); // Die Subtraktion der beiden Zeiten ergibt die zum Ausführen der Methode benötigte Zeit} Lassen Sie uns abschließend die Ausführung durchführen und die Wirkung betrachten: Hey, die Dauer hier beträgt mehr als 10 Sekunden, die Ausrüstung ist nicht gut genug, ich hoffe du verstehst ~ <!--mysql-connector-java-Abhängigkeit zur Verbindung mit der Datenbank--> <Abhängigkeit> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </Abhängigkeit> PS: Nach dem Hinzufügen von Threads geht es schneller. In den nachfolgenden Artikeln werden Beispiele gegeben. Dies ist das Ende dieses Artikels darüber, wie man innerhalb von 10 Sekunden eine Million Datensätze in eine MySQL-Datenbank einfügt. Weitere Informationen zum Einfügen einer Million Datensätze in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Einführung in die Benutzerverwaltung unter Linux-Systemen
>>: So erhalten Sie Formulardaten in Vue
Szenario: Beim Starten von Tomcat in Docker (Vers...
Inhaltsverzeichnis BOM (Browserobjektmodell) 1. F...
Die Betriebsumgebung dieses Tutorials: Windows 7-...
ModSecurity ist ein leistungsstarkes Paketfiltert...
Anforderung: Manchmal, wenn der Seiteninhalt kurz...
Inhaltsverzeichnis 1. Optionale Verkettung 2. Nul...
Inhaltsverzeichnis einführen Objektattribute in R...
Im vorherigen Artikel haben wir erklärt, wie ngin...
VC6.0 ist tatsächlich zu alt VC6.0 ist ein Entwic...
Vorwort Dieses Tutorial installiert die neuste Ve...
Mit dem Aufkommen von Docker haben sich viele Die...
Standardmäßig werden Breite und Höhe der Zelle au...
1. Umsetzungsideen Der Zweck der Schnittstellensi...
Es gibt viele Tags in XHTML, aber nur wenige werd...
Dieser Artikel beschreibt anhand eines Beispiels,...