Wie zu vermeiden, OOM (Out of memory) Fehler beim abrufen aller Datensätze einer großen Tabelle?
Ich bin da eine Aufgabe zum konvertieren einer riesigen Tabelle, um benutzerdefinierte XML-Datei. Ich werde mich mit Java für diesen job.
Wenn ich einfach einen "SELECT * FROM Kunden", kann es Rückkehr die riesige Menge von Daten, die schließlich zu OOM. Ich Frage mich, gibt es eine Möglichkeit, die ich wählen, wird der Datensatz sofort, sobald es verfügbar ist, und entfernen Sie den Eintrag aus dem Speicher nach, während sql abrufen Prozess?
--- bearbeitet am 13 Jul 2009
Ich möchte meine Frage. Ich habe 1 db server und 1 application-server.
Wenn ich die Ausgabe einer select-Abfrage in einer Anwendung, die Daten reist von einem db-server app-server.
Glaube ich (korrigiert mich wenn ich falsch Liege) ResultSet müssen warten, bis alle mit dem Empfang der Datensätze in der Abfrage. Auch wenn wir-fetch-Größe 4, für eine 1000-Datensatz-Tabelle, die wir noch am Ende mit 1000 Datensätze, die im heap-Speicher des app-server, ist es richtig? - Fetch-Größe, beeinflussen nur die Anzahl der hin-und Rückfahrt vom/zum db-server.
Meine Frage ist, wie zu Beginn der Verarbeitung auf, dass 4 (oder beliebig viele) Datensätze sofort nach der Ankunft in app-server, und entsorgen Sie Sie, um Speicherplatz freizugeben in-app-server?
InformationsquelleAutor der Frage janetsmith | 2009-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie könnte verwenden Sie die gleiche Lösung wie diese eine. Ein scrollbares resultset.
InformationsquelleAutor der Antwort javamonkey79
Mit ein wenig mehr Informationen, die ich bekommen kann eine weitere hilfreiche Antwort.
Wenn Sie MySQL verwenden:
vom http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html:
InformationsquelleAutor der Antwort Clint
Wenn Sie mithilfe von JDBC können Sie eine Ergebnismenge mit einem cursor, die Sie Durchlaufen einen Datensatz zu einem Zeitpunkt. Müssen Sie stellt sicher, dass dann schreibst du deine XML aus einer Datei einen Datensatz zu einer Zeit, anstatt mithilfe von DOM-zu bauen, die XML-Daten.
InformationsquelleAutor der Antwort Dean Povey
Eine Faustregel, die ich gelernt habe, aus meiner Erfahrung ist, dass Sie NIE bringen Sie ALLE Daten aus der Datenbank in Ihrem Anwendung-server. Eine Sache, die Sie tun können, ist die Implementierung eines Verfahrens zur Seite, die Ihre Daten.
Bringen Sie eine Seite von Daten mit etwa 1000-5000 Datensätze, Bearbeiten Sie dann wieder Holen Sie die Daten für die nächste Seite.
InformationsquelleAutor der Antwort Kirtan
Ein Konzept für den Export der gesamten Tabelle.
(Hinweis für Experten: ich bin mir bewusst seine Mängel.)Bearbeiten Die Mängel (danke @J. S.):
InformationsquelleAutor der Antwort akarnokd
In welcher Phase ist der OOM-Fehler Auftritt, ist es auf Abruf von Daten oder die Verarbeitung von Daten in XML-Datei?
Wenn seine Daten abrufen, die Daten in batches. Holen Sie sich die Gesamtzahl der Zeilen, die erste, um die wählt durch die primäre Taste und begrenzen Sie die Reihen ausgewählt, um Kautabletten Größen.
Wenn Ihr an der Erstellung der XML-Datei senden Sie die XML-Knoten von jedem Kunden zu System.aus.println, nicht, halten Sie es im Speicher. Starten Sie das Programm über Leitung Leitung und umleiten der Ausgabe in eine Datei;
Als Sie eine Schleife durch die Aufzeichnung aller in der Datei gespeichert wird.
InformationsquelleAutor der Antwort n002213f