-->
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.  [ 2 posts ] 
Author Message
 Post subject: Hibernate Select where langsam
PostPosted: Tue Jun 29, 2010 4:35 am 
Newbie

Joined: Tue Jun 29, 2010 4:20 am
Posts: 2
Hallo,
ich hab mal ne frage bzgl. der hibernate performance. zwar habe ich gelesen, dass hibernate im vergleich zu sql schon langsamer ist, einem aber auch viel datenverwaltungsarbeit abnimmt, aber irgendwie kann ich nicht glauben dass der geschw. unterschied beim faktor 10 liegt, oder ? ich habe nämlich eine tabelle, mit 25 datenseätzen. diese werden mit sql innerhalb 0,2 sekunden gelsen und zurückgegeben. hibernate braucht hierfür 2,5 sekunden, wenns mal gut läuft. die query ist vom format "where spaltenname='wert'. die zeit ist für die anwendung inakzeptabel zumal im standardfall in der tabelle meherere hundert einträge vorhanden sein werden. kann man irgendwie die hibernate verwaltung auf ein notwendiges minimum schrumpfen lassen, und dadurch etwa an leistung gewinnen? oder ist dies normal so? gibt es irgendwelche tipps wie man das beschleunigen kann, oder kann es eventuell an meiner hql query liegen? ich beziehe mir dabei eine Session über HibernateUtil.getCurrentSession. Starte eine Transaktion und rufe auf der Session die createQuery methode auf (kann stattdessen createSQLQuery benutzen? würde dies nen leistungsschub verursachen?), mehr ist da nicht. muss ich ev. etwas in der org.hibernate.xml beachten? bin für jeden tipp dankbar

MfG, Edin


Top
 Profile  
 
 Post subject: Re: Hibernate Select where langsam
PostPosted: Fri Jul 02, 2010 10:31 am 
Beginner
Beginner

Joined: Thu Oct 04, 2007 12:22 pm
Posts: 48
Du kannst ein ORM-Framework wie Hibernate nur sehr schlecht mit einer reinen JDBC Verbindung vergleichen. Grundsätzlich nimmst Du Geschwindigkeitseinbußen für die ganze Bequemlichkeit in Kauf: Hibernate muss Entities auflösen, den Cache verwalten, Objekte erzeugen und (je nach Einstellung) via Reflection befüllen usw. Du musst halt immer beachten, dass ein ORM-Framework on top einer JDBC Verbindung arbeitet, also immer Mehraufwand hat.
Im Gegenzug verwendet Hibernate aber auch viele Techniken, die einen Performancegewinn bringen können - z.B. die Caches. Viele Änderungen, Mehrfachanfragen etc. landen erst gar nicht bei der Datenbank.
Dein Test hat das Problem, welches viele Micro-Benchmarks teilen: Er ist wenig aussagekräftig. Die Performance Deines Testlaufen hängen von der Art ab, wie Du die Queries formulierst, ob du mit oder ohne Lazy-Loading arbeitest, wie Dein Anwendungsszenario ist (lädst Du viel nach oder wenig? gibt es viele Cache-Treffer oder nicht? ...), ob die Caches gefüllt sind und was nicht alles. Du selbst hast die Hibernate-Konfiguration erwähnt. Hier ist eine Menge möglich, was stark von Deinem Szenario abhängt, bsp. die Größe Deines Thread-Pools, der verwendete Cache-Algorithmus ..

Generell gilt: Hibernate ist nicht für Batch-Processing ausgelegt und knickt hier schnell in der Performance (Speicher und Geschwindigkeit) ein. Ein OR-Mapper ist aber auch nicht für solch einen Fall konzipiert (und trotzdem kann man hier vieles dafür optimieren: Cache abschalten, StatelessSession verwenden..). Wenn Du also ein gewöhnliches Lastszenarion hast, würde ich immer raten, eine saubere Implementierung mit Hibernate auf Basis von Standard-Einstellungen zu entwickeln und erst dann Gedanken an die Performance zu verschwenden, wenn Du Indikatoren für Probleme hast. Du kennst sicher den Spruch "Don't fix what is not broken" auch bekannt als "premature optimization".


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 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.