-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: [Performance] Speichern von großen Listen
PostPosted: Sun Jun 12, 2011 11:22 am 
Newbie

Joined: Sun May 22, 2011 7:06 am
Posts: 6
Hallo Leute,

ich hab derzeit an der Universität ein mittelgroßes Projekt am Laufen, das Hibernate verwenden soll. Man hat uns allerdings nicht die geringste Einführung gegeben und uns sozusagen ins kalte Wasser geworfen (bitte ein klein wenig Rücksicht nehmen bin wirklich Anfänger). Mittlerweile sind wir soweit, dass alles zumindest *funktioniert*, kämpfen jetzt aber mit Performance-Problemen.

Konkret haben wir eine Liste (also wirklich eine Java-Liste) von Entitätsobjekten, die selber wiederum in einem Entitätsobjekt steckt (klassische Many-To-Many-Beziehung) mit cascade = CascadeType.ALL . Das Funktioniert, ist aber langsam. Zum Beispiel kann ich auf einen Schlag 1000 Objekte in die Liste einfügen und speichern, dauert ca. 1 Minute (das ist durchaus annehmbar). Wenn ich die Liste lade (geht schnell!), EIN Objekt hinzufüge und sie anschließend wieder abspeichere, dauert es wieder 30 Sekunden und das ist extrem. Hibernate scheint hier also *die ganze* Liste neu abzuspeichern anstatt einfach ein INSERT zu machen. Ich habe schon von dynamischen Updates gelesen die nur das abspeichern, was sich effektiv verändert hat, aber bei Many-To-Many-Beziehungen, die über einen eigenen Join Table gemapped werden, scheint das keinerlei Unterschied zu machen...

Irgendwelche Tipps / Hinweise was man da machen könnte?


Danke,



Alan


Top
 Profile  
 
 Post subject: Re: [Performance] Speichern von großen Listen
PostPosted: Tue Jun 14, 2011 3:53 am 
Newbie

Joined: Thu Apr 14, 2011 11:27 am
Posts: 9
Ich habe es noch nicht in diesem many-to many Fall getestet (daher keine Gewähr), aber ggf. hilft das:

http://www.galileocomputing.de/artikel/gp/artikelID-328

Da gibt es zwei Annotationen, die ggf für dich interessant sind: dynamicInsert und dynamicUpdate.
Vielleicht hilft dir dieser Tipp schon.


Top
 Profile  
 
 Post subject: Re: [Performance] Speichern von großen Listen
PostPosted: Tue Jun 14, 2011 7:21 am 
Newbie

Joined: Sun May 22, 2011 7:06 am
Posts: 6
Hi,

danke für die Antwort :) Ich hatte diese beiden Annotationen schon gestestet, leider mit wenig Erfolg.

Ich habe aber inzwischen eine Lösung für mein Problem gefunden. Und zwar habe ich bislang immer für meine Liste als Datenstruktur eine java.util.List verwendet. Allerdings hat sich herausgestellt, dass Hibernate bei großen Listen um ein VIELFACHES schneller ist, wenn man stattdessen als Datenstruktur ein java.util.Set (wie zum Beispiel ein HashSet) verwendet - dadurch verliert man zwar die Ordnung der Elemente, aber da die sowieso nur nebensächlich war kann ich darauf gerne verzichten.

Zum Vergleich: Laden von einer Liste mit 1000 Elementen, hinzufügen eines weiteren und anschließendes Abspeichern der Liste dauert mit einer java.util.List bei mir über 30 Sekunden. Mit einem HashSet geht es in 110 Millisekunden. Der Zeitgewinn ist hier also ganz *erheblich* - darum wundert es mich auch warum in den Performance-Tutorials nur selten auf diese nicht ganz unwichtige Kleinigkeit hingewiesen wird....


Danke nochmal für die Antwort :)


Gruß,



Alan


Top
 Profile  
 
 Post subject: Re: [Performance] Speichern von großen Listen
PostPosted: Thu Jun 30, 2011 7:14 am 
Expert
Expert

Joined: Thu Jan 08, 2009 6:16 am
Posts: 661
Location: Germany
Das mit Lists und Sets ist im Collections-Teil erklärt. "Einfach" ein Set zu verwenden ändert natürlich auch das Verhalten: Du kannst Objekte nur einmal hinzufügen. Das bedeutet, hibernate hat es auch viel einfacher beim Laden, weil es weiß, dass Einträge nicht doppelt in einer Liste gewesen sein konnten.

_________________
-----------------
Need advanced help? http://www.viada.eu


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.