# JAVA und große Datenabfragen



## freichle (25. Jun 2007)

Hallo,

ich habe eine Datenbank mit ca. 1 Million Einträgen. Als Datenbank verwende ich PostGreSQL. Wenn ich eine SQL Abfrage über Konsole auf die Datenbank mache, klappt das absolut Problemlos. Allerdings will ich aus Bequemlich ein Java Frontend. Bei einer Abfage die eine solche Datenmenge beinhaltet, bekomme ich aber ein Problem mit dem Speicher in der JVM und er wirft mir eine


> AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space


ICh könnte jetzt den Speicher der JVM mit 





> -Xmx256m


 hochsetzen allerdings halte ich das nicht gerade für eine perfomante Lösung. Gibt es da elegantere Lösungen und muss ich da einen ganz anderen Weg gehen?


----------



## hupfdule (25. Jun 2007)

Nun ja, du solltest  mal heraus finden, _was_ da so viel Speicher verbraucht. Wie verwendest du die Daten? Legst du dafür Objekte an? Gibst du sie direkt in eine GUI-Komponente weiter? Ohne so was zu wissen, kann man dir schlecht raten, was du ändern solltest.


----------



## freichle (25. Jun 2007)

Ich mache eine SQL Abfrage mit einem Statement, den Inhalt vom Statement schreibe ich dann in eine Collection, das können dann natürlich schon Datengröße von mehr als 100 MB werden. Das ganze soll dann von der Collection in in eine Textdatei geschrieben werden.


----------



## hupfdule (25. Jun 2007)

Das heißt, du willst die Daten gar nicht dem Benutzer anzeigen, sondern direkt aus der DB in die Textdatei schreiben? Dann könntest du den Umweg über die Collection umgehen und jeden Datensatz direkt in die Textdatei schreiben.


----------



## MasterEvil (25. Jun 2007)

Warum der Umweg über die Collection?
Schreibe es doch direkt vom ResultSet in die Datei ohne Zwischenstation.

Ach verdammt, ich hab doch keine 2 Minuten für diesen kurzen Text gebraucht


----------



## Guest (25. Jun 2007)

Hab ich vergessen zu erwähnen  :roll:  natürlich sollten sie auch dem Benutzer angezeigt werden, deswegen hab ich noch eine Collection angelegt.


----------



## MasterEvil (25. Jun 2007)

Verwende  doch die Daten direkt aus dem ResultSet, ist ja auch eine Art Collection.

Wie willst du denn die Daten anzeigen? 100MB in einer TextPane dürften auch nicht ohne sein!


----------



## Guest (26. Jun 2007)

Seitenweise nachladen bzw. nur bei Bedarf.
Zunächst mal nur die Id's in Value-Objekten laden, Rest bei Bedarf bzw. wenn zum ersten mal
darauf zugegriffen wird und das nur Seitenweise. Die Daten in SoftReferences halten und wenn 
vom GC freigegeben und benötigt, nachladen. Das ganze am besten mit Proxies und Annotations
verallgemeinen.

So viel zur Theorie. Jetzt mach hin.


----------

