Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Leistung von Hibernate, JDBC und Java bei mittleren und großen Ergebnismengen

Können Sie einen Rauchtest mit der einfachsten Abfrage durchführen, die möglich ist wie:

SELECT current_timestamp()

oder

SELECT 1 + 1

Dadurch erfahren Sie, was der tatsächliche Overhead des JDBC-Treibers ist. Auch ist nicht klar, ob beide Tests von derselben Maschine durchgeführt werden.

Führen Sie dieselbe Abfrage mehrere tausend Mal in Java aus. JVM benötigt einige Zeit zum Aufwärmen (Class-Loading, JIT). Ich nehme auch SimpleJDBC.getConnection() an verwendet C3P0-Verbindungspooling - die Kosten für den Verbindungsaufbau sind ziemlich hoch, daher können die ersten Ausführungsschritte langsam sein.

Bevorzugen Sie auch benannte Abfragen gegenüber Ad-hoc-Abfragen oder Kriterienabfragen.

Hibernate ist ein sehr komplexes Framework. Wie Sie sehen können, verbraucht es 75 % der gesamten Ausführungszeit im Vergleich zu reinem JDBC. Wenn Sie rohes ORM benötigen (kein Lazy-Loading, Dirty Checking, erweitertes Caching), ziehen Sie mybatis in Betracht . Oder vielleicht sogar JdbcTemplate mit RowMapper Abstraktion.

Nicht wirklich. Lesen Sie das Kapitel 19. Leistungssteigerung in der Hibernate-Dokumentation. Es gibt viel der Reflexion da draußen + Klassengeneration. Auch hier ist Hibernate möglicherweise nicht die beste Lösung, wenn Sie jede Millisekunde aus Ihrer Datenbank herausquetschen möchten.

Allerdings Es ist eine gute Wahl, wenn Sie die allgemeine Benutzererfahrung aufgrund umfassender Caching-Unterstützung verbessern möchten. Sehen Sie sich die Leistung an Dok nochmal. Es wird hauptsächlich über Caching gesprochen. Es gibt einen First-Level-Cache, einen Second-Level-Cache, einen Abfrage-Cache ... Dies ist der Ort, an dem Hibernate einfaches JDBC tatsächlich übertreffen könnte - es kann viel auf eine Weise zwischenspeichern, die Sie sich nicht einmal vorstellen können. Andererseits würde eine schlechte Cache-Konfiguration zu einer noch langsameren Einrichtung führen.

Lesen Sie:Caching mit Hibernate + Spring - einige Fragen!

JVM (insbesondere in server Konfiguration) ist ziemlich schnell. Die Objekterstellung auf dem Heap ist so schnell wie auf dem Stack in z.B. C, Garbage Collection wurde stark optimiert. Ich glaube nicht, dass die Java-Version, auf der einfaches JDBC ausgeführt wird, im Vergleich zu einer nativeren Verbindung viel langsamer wäre. Aus diesem Grund habe ich einige Verbesserungen in Ihrem Benchmark vorgeschlagen.

Ich glaube, dass JDBC eine gute Wahl ist, wenn Leistung Ihr größtes Problem ist. Java wurde erfolgreich in vielen datenbankintensiven Anwendungen eingesetzt.