sql >> Database teknologi >  >> RDS >> Mysql

Hibernate, JDBC og Java ydeevne på mellemstore og store resultatsæt

Kan du lave en røgtest med den simple forespørgsel som muligt som:

SELECT current_timestamp()

eller

SELECT 1 + 1

Dette vil fortælle dig, hvad der er den faktiske JDBC-driver overhead. Det er heller ikke klart, om begge tests udføres fra den samme maskine.

Kør den samme forespørgsel flere tusinde gange i Java. JVM har brug for lidt tid til at varme op (class-loading, JIT). Jeg antager også SimpleJDBC.getConnection() bruger C3P0 forbindelsespooling - omkostningerne ved at etablere en forbindelse er ret høje, så de første par udførelse kan være langsom.

Foretrækker også navngivne forespørgsler frem for ad hoc-forespørgsler eller kriterieforespørgsler.

Hibernate er en meget kompleks ramme. Som du kan se, bruger den 75% af den samlede eksekveringstid sammenlignet med rå JDBC. Hvis du har brug for rå ORM (ingen lazy-loading, dirty checking, advanced caching), overvej mybatis . Eller måske endda JdbcTemplate med RowMapper abstraktion.

Ikke rigtig. Tjek kapitel 19. Forbedring af ydeevnen i Dvale-dokumentation. Der er meget af refleksion, der sker derude + klassegenerering. Endnu en gang er Hibernate måske ikke den bedste løsning, når du vil presse hvert millisekund fra din database.

Men det er et godt valg, når du vil øge den samlede brugeroplevelse på grund af omfattende caching-understøttelse. Tjek ydeevnen doc igen. Det taler mest om caching. Der er en cache på første niveau, cache på andet niveau, forespørgselscache... Dette er stedet, hvor Hibernate faktisk kan udkonkurrere simpel JDBC - det kan cache meget på en måde, du ikke engang kunne forestille dig. På den anden side - dårlig cache-konfiguration ville føre til endnu langsommere opsætning.

Tjek ud:Caching med Hibernate + Spring - nogle spørgsmål!

JVM (især i server konfiguration) er ret hurtig. Objektskabelse på heapen er lige så hurtig som på stakken i f.eks. C, affaldsindsamling er blevet meget optimeret. Jeg tror ikke, at Java-versionen, der kører almindelig JDBC, ville være meget langsommere sammenlignet med en mere indbygget forbindelse. Det er derfor, jeg foreslog nogle få forbedringer i dit benchmark.

Jeg mener, at JDBC er et godt valg, hvis ydeevne er dit største problem. Java er blevet brugt med succes i mange databasetunge applikationer.




  1. Sådan viser du objektafhængigheder i Access 2016

  2. Hvordan kan jeg løse Postgresql SCRAM-godkendelsesproblem?

  3. Antal udførte MySQL-forespørgsler på side

  4. oracle-tabel eller -visning eksisterer ikke inde fra den lagrede procedure