Große Ergebnismengen von MySQL streamen
Das Abrufen großer Ergebnismengen von MySQL kann eine Herausforderung sein, insbesondere wenn der Anwendungsspeicher begrenzt ist. Dieses Problem tritt häufig auf, wenn der JDBC-Treiber versucht, die gesamte Tabelle in den Speicher zu laden, was zu einer OutOfMemoryException führt.
Verwendung von setFetchSize()
Eine gängige Lösung hierfür Das Problem besteht darin, die Methode setFetchSize() zu verwenden, um die Anzahl der aus der Datenbank abgerufenen Zeilen zu begrenzen. Dieser Ansatz allein reicht jedoch nicht immer aus, da der MySQL-JDBC-Treiber zusätzliche Einstellungen erfordert, um Streaming zu ermöglichen.
Erstellen einer Forward-Only-, Read-Only-Anweisung
Um das Streamen von Ergebnismengen in MySQL zu aktivieren, muss eine Anweisung mit den folgenden Einstellungen erstellt werden:
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
Festlegen des Abrufs Größe
Sobald die Anweisung erstellt wurde, sollte die Methode setFetchSize() verwendet werden, um dem Treiber anzuzeigen, dass große Ergebnismengen abgerufen werden können:
stmt.setFetchSize(Integer.MIN_VALUE);
Vorbehalte beim Streaming
Es ist wichtig, sich der Einschränkungen und Vorbehalte von bewusst zu sein Ergebnissatz-Streaming:
Zusätzliche Überlegungen
Wenn der OutOfMemoryError trotz Verwendung weiterhin besteht Bei Verwendung der oben genannten Einstellungen kann es sein, dass die Anwendung die Daten nicht sofort verarbeitet, sobald sie verfügbar sind. Dies erfordert eine Umstrukturierung des Codes, um Daten inkrementell zu verarbeiten und zu vermeiden, dass die gesamte Ergebnismenge im Speicher verbleibt.
Das obige ist der detaillierte Inhalt vonWie kann ich große Ergebnismengen effizient aus MySQL streamen, um OutOfMemoryErrors zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!