Hibernate, JTable und Performance

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Guten Morgen,

wusste nicht ob ich meinen Thread in Datenbankprogrammierung oder Swing packen sollte - Performance Unterforum gibbet ja nicht mehr. Also Sorry fals falsch gepostet!

Zu meinem Anliegen:
Ich lese mir aus einer Datenbank derzeit ~10.000 Datensätze mit Hibernate aus einer MySQL DB.
Ausgelesen werden die Daten über
Code:
Session.createQuery("select o from Object o").list();

Was ich schön an Hibernate find, ist dass er mir gleich eine List mit den Objekten zum Arbeiten übergibt,
allerdings frage ich mich im Moment ob dies nicht eher mein Problem darstellt, da ich derzeit
ziemliche Performance Probleme bekomme.

10.000 Datensätze in phpMyAdmin anzeigen dauert nur wenige Millisekunden, das auslesen mit Hibernate
dauert ~15 Sekunden. Sind die Daten dann in der JTable gelandet (die Liste wird im Model hinterlegt) ist auch das navigieren durch die JTable nicht unbedingt das schnellste ...

Von solchen Dingen wie Sortierung über die TableHeader oder dergleichen einmal ganz abgesehen, das ist nämlich unzumutbar (könnte mir fast nen Kaffee holen in der Zeit)

Hatte eben kurz daran gedacht ob das Programm vllt. schneller laufen würde wenn man anstatt der HibernateObjekte sich eine List<HashMap<String, String>> aus der Db liest per Hibernate und die Werte direkt so an das Model gibt - hat jemand ne Idee ob dies vllt. schneller gehen würde?

Andere Variante über die ich nachgedacht hatte war, die Daten "Häppchen Weise aus der DB zu ziehen".
Also den ersten Select mit einem Limit von 5000 absetzen und wenn die Daten in die DB gelangen im Hintergrund die restlichen Daten nachladen und an die Liste anhängen.

Auch das nachladen der Datem beim Scrollen wie es z.B. schon auf der Seitze dzone.com zu sehen ist finde ich eigentlich recht interessant, allerdings wüsst ich nicht wie ich das ganze dann mit dem sortieren oder dergleichen lösen könnte/und oder sollte ...

Hat sonst jemand Tipps wie und wo man einiges an Performance gut machen kann im Bezug auf Hibernate und die JTable mit TableModels?
 

FArt

Top Contributor
Tipp: bevor das große Raten losgeht: nimm einen Profiler und schau dir an, wo die Zeit bleibt.

Ist es das SQL Statement oder fehlende Indexe auf der DB, oder ist es, weil so viele Datensätze im Speicher hängen bei zu geringem Heap, zu viele GCs, ....
 
G

Guest

Gast
FArt hat gesagt.:
Tipp: bevor das große Raten losgeht: nimm einen Profiler und schau dir an, wo die Zeit bleibt.

Ja sicherlich ein Schritt den ich heute noch gehen werde, aber schon beim Debuggen ist mir aufgefallen das der Befehl "Query.list()" nicht unbedingt der schnellste ist ...

Indizes existieren im übrigen auf der Tabelle.
 

foobar

Top Contributor
10 000 Datensätze mit Hibernate auslesen ist auf jeden Fall langsamer als handgeschriebenes SQL. Das ist ja klar. In so einem Fall leidet die Performance unter dem Hibernateoverhead.
Du kannst da aber noch einiges optimieren. In der Hibernatedoku gibts jede Menge Tips zum Performancetuning z.b. Paging.
 

byte

Top Contributor
Die Performance wird in diesem Fall aber auch nicht schlechter sein, als wenn Du entsprechendes Select-Statement absetzt und das Ergebnis in Objekte verpackst.
Genau weisst Du es aber, wenn Du einfach mal die Performance des reinen SQL-Statements testest. Wenn das auch so lange dauert, kannst Du nur bei der DB versuchen zu optimieren.

Generell würde ich es aber vermeiden, Tabellen mit so vielen Datensätzen anzuzeigen. Der User ist eh überfordert mit so großen Tabellen. Du könntest das Problem z.B. lösen, indem Du einen Pagable Table verwendest oder (falls sich das anbietet) einen TreeTable benutzt, der Kind-Elemente lazy nachlädt.
 
G

Guest

Gast
byto hat gesagt.:
z.B. lösen, indem Du einen Pagable Table verwendest

Gibt es da iwo etwas fertiges was auch mit Sortieren etc. pp. funktioniert?

Im besten Fall vllt. sogar etwas das nicht unbedingt mit verschiedenen Pages arbeitet sondern die Daten beim Scrollen aktualisiert?
 

FArt

Top Contributor
Noch mal der Tipp: auf Verdacht optimieren ist Käse. Stelle sicher, dass genau das dein Problem ist!
 

ARadauer

Top Contributor
10 000 Datensätze mit Hibernate auslesen ist auf jeden Fall langsamer als handgeschriebenes SQL. Das ist ja klar. In so einem Fall leidet die Performance unter dem Hibernateoverhead.
na super ich bin gerade dabei, mein produkt wartungstool, das rund 2 mio datensätze ließt, bearbeitet und schreibt, auf hibernte umzubauen... na das kann ich mir ja dann wohl sparen.....
 

BjörnBu

Aktives Mitglied
ARadauer hat gesagt.:
10 000 Datensätze mit Hibernate auslesen ist auf jeden Fall langsamer als handgeschriebenes SQL. Das ist ja klar. In so einem Fall leidet die Performance unter dem Hibernateoverhead.
na super ich bin gerade dabei, mein produkt wartungstool, das rund 2 mio datensätze ließt, bearbeitet und schreibt, auf hibernte umzubauen... na das kann ich mir ja dann wohl sparen.....

Ich wüsste nicht wieso. Natürlich erzeugt hibernate overhead. Dank lazy-loading und cache-Unterstützung gewinnst du grade bei vielen Dantensätzen eher gegenüber reinem JDBC. Du hast zwar Overhead und DIE Lösung für große Datenmengen ist hibernate wohl kaum aber es lässt sich durchaus nutzen und bietet auf einem gewissem level auch echte Vorteile.

Will man aber von Partitioning profitieren, muss man andererseits aber meißt auf die standart-Methoden verzichten. Aber zumindest bisher habe ich mit der Criteria API immer bessere Ergebnisse erziel, als mit meinem JDBC Wissem möglich war. Allerdings habe ich erst einmal mit so vielen Datensätzen gearbeitet und in deisem Fall nur lesende Zugriffe gehabt
 

SnooP

Top Contributor
oder auch nicht, weil es einfach nicht stimmt.

Hibernate macht doch auch keine Hexerei - wenn das handgeschriebene SQL in ein Result-Set gepackt wird und man nur bestimmte Spalten ausliest und nur Strings darstellt - dann ist das JDBC vermutlich schneller, weil weniger große Objekte gebaut werden müssen... wenn man aber sowieso Objekte nutzt um die Daten aus der DB zu halten, fährt man mit Hibernate besser, weil es das manuelle JDBC und SQL-String rumgefrickel entfernt... zusammen mit Spring+HibernateTemplate hat man sehr schöne Mechanismen um den ganzen Zugriff nochmals zu kapseln...

das einzige was mit Hibernate sicher nicht so schön ist, sind Massenupdates... wobei auch hier schon einige Dinge verbessert wurden... ich werde das in meinem aktuellen Projekt wohl noch mal ausprobieren.

Zur Pagination und auch Scrollable iteration (wie das einige DB-Tools zur Darstellung von Tabellen-Inhalten auch machen) siehe die Hibernate-Doku... allerdings weiß ich nicht, ob der JDBC-Treiber für MySQL Scrollable Interation bereitstellt.
 
G

Gast

Gast
Derzeit habe ich in meinem TableModel immer eine Liste mit meinen jeweiligen Objekten (z.B. 10.000 Objekte vom Typ MyObject)

In der getValueAt Mothe hole ich mir die Werte dann immer über List.get(pRow).getXYZ(); - bin am überlegen ob ich mir vllt. die Zeit spare hier komplette Objekte erstellen zu lasen (beim select über hibernate) und mir einfach nur ein Object[] an Daten anzeigen lasse in der JTable ...

Macht zwar einiges komplizierter an Code, aber ich schätze mal das die Performance einiges zu legen könnte ...
 

FArt

Top Contributor
Gast hat gesagt.:
Derzeit habe ich in meinem TableModel immer eine Liste mit meinen jeweiligen Objekten (z.B. 10.000 Objekte vom Typ MyObject)

In der getValueAt Mothe hole ich mir die Werte dann immer über List.get(pRow).getXYZ(); - bin am überlegen ob ich mir vllt. die Zeit spare hier komplette Objekte erstellen zu lasen (beim select über hibernate) und mir einfach nur ein Object[] an Daten anzeigen lasse in der JTable ...

Macht zwar einiges komplizierter an Code, aber ich schätze mal das die Performance einiges zu legen könnte ...

„More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity. „
William Allan Wulf
 
G

Guest

Gast
FArt hat gesagt.:
„More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity. „
William Allan Wulf

Sachmal Kollege, hast du eigtl. auch iwas Sinnvolles beizutragen? Ich hab dir schon beim ersten mal gesagt das ich mit dem Profiler arbeite(n werde) und hatte das gestern auch den ganzen Tag getan.

Und was hatte ich gesehen => Query.list() ist - wenn er über viele einzelne Datensätze gehht mit sum() und avg() Kram ratten lahm - weswegen ich auch schon diesen Thread erstellt hatte!

Schneller gehts tatsache ein klein wenig wenn ich nur mit Object[] arbeite anstatt mir von Hibernate meine Objekte sofort immer erstellen zu lassen - ist halt nur bei weitem nciht so komfortabel ...

Vllt. noch jemand der ein paar Beispiele zur Pageable Table oder dem nachladen von Daten hat?
Nehm ich auch gerne Erfahrungsberichte WANN die Daten am besten gelesen werden sollten, also z.B.:
Erstmal 1000 und dann im Hintergrund munter fröhlich die restlichen Daten ziehen etc. pp. ...
 

byte

Top Contributor
Wie ich oben schon geschrieben habe solltest Du erstmal überprüfen, ob Du mit reinem SQL wirklich schneller bist als mit Hibernate. Und dann kannst Du daran arbeiten, Deine HQL bzw. Criteria-Queries zu optimieren. Mit Object[] zu arbeiten halte ich für recht sinnfrei. Das ist Micro-Optimierung, weil Du maximal das Erzeugen und Verpacken der Objekte sparst. Wenns danach geht kannst Du auch gleich auf Objektorientierung pfeifen...

Einen Pagable Table zu bauen, ist wirklich nicht schwierig. Einfach die Anzahl Zeilen begrenzen (z.B. auf 100) und entsprechende Buttons für Vor, Zurück, Anfang, Ende einbauen. Idealerweise zeigt er auch noch die Gesamtanzahl Einträge an. Mit Hilfe der Seitenzahl kannst Du dann mit Hibernate das entsprechende Ergebnis holen.

http://www.hibernate.org/314.html
 

FArt

Top Contributor
Anonymous hat gesagt.:
Und was hatte ich gesehen => Query.list() ist - wenn er über viele einzelne Datensätze geht mit sum() und avg() Kram ratten lahm - weswegen ich auch schon diesen Thread erstellt hatte!

Das ist eine Infromation, die du bis jetzt vorenthalten hast. Jetzt muss nicht mehr geraten werden wo das Problem liegt. Besonders der unklare Zusammenhang zur JTable... es geht wohl doch nur um die Query, oder? Dennoch ist die Messung der list() Methode noch nicht feingranular genug. Was passiert denn da drinnen genau?

byto hat das wichtigste sonst schon gesagt.

Stecken sum() und avg() in der Query oder im Javacode? Ist genau diese Query in plain SQL mit genau diesen Daten signifikant schneller?
 

byte

Top Contributor
Was soll das heissen? Das von Hibernate generierte SQL ist in phpmyadmin schneller? Wohl kaum.

Hast Du Dir das von Hibernate generierte SQL überhaupt mal angeguckt? Poste es doch mal, dann sehen wir weiter.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
S org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: right near Allgemeine Java-Themen 6
P Hibernate Proxy Allgemeine Java-Themen 1
C Hibernate EJB JTA Allgemeine Java-Themen 4
M JAXB Reimport zu Hibernate DB -> Exception Allgemeine Java-Themen 3
Shoox Hibernate / JAXB für Schnittstellen Allgemeine Java-Themen 4
Jay_030 Guice + Hibernate = Probleme? Allgemeine Java-Themen 2
G Hibernate search (Lucene) - Index wird nicht rechtzeitig erzeugt? Allgemeine Java-Themen 2
H Hibernate: @OneToOne Beziehung Allgemeine Java-Themen 4
N Hibernate und Fehlermeldung Allgemeine Java-Themen 18
neurox Tutorial: Hibernate mit MySQL (erste Schritte) Allgemeine Java-Themen 34
P Hibernate oder Java Persistence API? Allgemeine Java-Themen 3
A Spring und Hibernate Allgemeine Java-Themen 2
MQue log4j mit hibernate Allgemeine Java-Themen 3
F Hibernate speichern - Null Allgemeine Java-Themen 5
T Wie Hibernate im Tomcat installieren? Allgemeine Java-Themen 2
M Hibernate frage zur Verbindung Allgemeine Java-Themen 3
G Obfuscator und Hibernate! Allgemeine Java-Themen 5
W JBoss,Axis2,Hibernate/JPA,Oracle - EntityManager Problem Allgemeine Java-Themen 4
T Hibernate Criteria Queries - Abfragen von Collection-Members Allgemeine Java-Themen 2
J Hibernate & Java Allgemeine Java-Themen 4
A Hibernate und Swing Allgemeine Java-Themen 2
G Hibernate speichert Daten nur während Session in HSQL-DB Allgemeine Java-Themen 10
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
H Swing JTextArea als TableCellRenderer in JTable - wie Zeilen selektieren? Allgemeine Java-Themen 47
D JTable mit JTextAreas in den Zellen Allgemeine Java-Themen 8
X Swing JTable zeigt nichts Allgemeine Java-Themen 4
G jTable aktualisieren?! Allgemeine Java-Themen 1
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
D falsche Zeile aus JTable in MySQL gelöscht Allgemeine Java-Themen 6
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
V JTable Externe Lib Allgemeine Java-Themen 2
F JTable Pfeiltasten-Verhalten Allgemeine Java-Themen 1
T jTable Gestaffelte Überschriften Allgemeine Java-Themen 22
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
R jTable, nur Werte zwischen 2 Double values ausgeben Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
A JTable Bilder Allgemeine Java-Themen 1
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
A JTable - CellRange auslesen Allgemeine Java-Themen 2
A jTable Renderer Allgemeine Java-Themen 5
N JTable filtern Allgemeine Java-Themen 3
hdi JTable#print & Druckgröße Allgemeine Java-Themen 6
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
G JTable: ListSelectionListener removen Allgemeine Java-Themen 8
M JTable + ArrayList Allgemeine Java-Themen 3
G Aktualisierung einer JTable erfolgt nicht zuverlässig Allgemeine Java-Themen 14
E Hintergrund einer JTable änden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
Iron Monkey Inhalt von JTable in die Textdatei mit StringWidth schreiben Allgemeine Java-Themen 3
P jTable getSelectedRow? Allgemeine Java-Themen 2
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
B LEERE JTable MouseListener + popupmenu Allgemeine Java-Themen 2
X xml aus Zip in JTable Allgemeine Java-Themen 2
L jTable drag & drop einzelner Zeilen Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
H JTable per iText in PDF: Größenanpassung möglich? Allgemeine Java-Themen 2
F XML zu JTable mit JDOM Allgemeine Java-Themen 2
E JTable wird nicht angezeigt Allgemeine Java-Themen 11
Screen ImageIcon in Cell der JTable Allgemeine Java-Themen 2
G JTable mit Keylistener geht nicht Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
A Swing JTable Polymorphismus Allgemeine Java-Themen 2
trash super + JTable Allgemeine Java-Themen 7
D JTable -> 1Spalte nur zahlen Allgemeine Java-Themen 2
L JTABLE setvalueat methode! Allgemeine Java-Themen 16
C Swing Daten zwischen JTable teilen Allgemeine Java-Themen 6
hdi JTable: Sortierung von Date-Objekten Allgemeine Java-Themen 4
B JTable nach Icon sortieren Allgemeine Java-Themen 6
N Exception beim auslesen einer JTable Allgemeine Java-Themen 5
M jdesktop binding: jTable update nach Änderung... Allgemeine Java-Themen 3
D JTable mit GROUP BY Allgemeine Java-Themen 23
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
X JTable mit Checkboxen -> Setzen (true/false) der Checkboxen per Mouseklick... Allgemeine Java-Themen 3
P JTable drucken Allgemeine Java-Themen 8
A JTable Feldwerte in JTextFelder mit blättern Allgemeine Java-Themen 5
DStrohma [Erledigt] Wieso kann ich Taste 'ENTER' in JTable nicht belegen? Allgemeine Java-Themen 2
M jTable Allgemeine Java-Themen 19
D jTable und TableModel Allgemeine Java-Themen 2
B Exception bei leerem JTable verhindern Allgemeine Java-Themen 10
A Observable BeansBinding an einer JTable bzw. JXTable Allgemeine Java-Themen 3
P Textfile -> Array -> JTable Allgemeine Java-Themen 9
S JTable Aktuelisieren ber Wie ? Allgemeine Java-Themen 4
MQue JComboBox in JTable Allgemeine Java-Themen 4
J Ergebnismenge eines SQL-Queries in JTable anzeigen Allgemeine Java-Themen 3
MQue JTable alles rechts Allgemeine Java-Themen 8
G Checkboxen abfragen,Auswahl sichern, JTable laden Allgemeine Java-Themen 2
R JTable und Cell Renderer Allgemeine Java-Themen 3
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
S Welche Speicherung von Daten bei Kalendarfunktion der jtable Allgemeine Java-Themen 7
J keylistener auf jtable Allgemeine Java-Themen 19
C JTable, Abstand zwischen Zellen Allgemeine Java-Themen 2
G Eindeutiges Identifizieren einer JTable/Component z.laufzeit Allgemeine Java-Themen 2
D JTable -> ArrayIndexOutOfBoundsException bei Mausklick Allgemeine Java-Themen 2
S JTable editieren + in JTextField schreiben Allgemeine Java-Themen 7
G Daten in / für JTable beim Scrollen nachladen? Allgemeine Java-Themen 5
M JTable verändert Position auf meinem JPanel Allgemeine Java-Themen 3
P JTable Allgemeine Java-Themen 2
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben