sql >> Databasteknik >  >> RDS >> Mysql

Hibernate, JDBC och Java prestanda på medelstora och stora resultatuppsättningar

Kan du göra ett röktest med den enkla frågan som är möjlig som:

SELECT current_timestamp()

eller

SELECT 1 + 1

Detta kommer att berätta vad som är den faktiska JDBC-drivrutinen overhead. Det är inte heller klart om båda testerna utförs från samma maskin.

Kör samma fråga flera tusen gånger i Java. JVM behöver lite tid att värma upp (klassladdning, JIT). Jag antar också SimpleJDBC.getConnection() använder C3P0-anslutningspoolning - kostnaden för att upprätta en anslutning är ganska hög så de första exekveringarna kan vara långsamma.

Föredrar även namngivna frågor framför ad-hoc-förfrågningar eller kriteriefrågor.

Hibernate är ett mycket komplext ramverk. Som du kan se förbrukar den 75 % av den totala exekveringstiden jämfört med rå JDBC. Om du behöver rå ORM (ingen lazy-loading, dirty checking, advanced caching), överväg mybatis . Eller kanske till och med JdbcTemplate med RowMapper abstraktion.

Inte riktigt. Kolla in kapitel 19. Förbättra prestanda i Hibernate-dokumentationen. Det finns mycket av reflektion som händer där ute + klassgenerering. Återigen, Hibernate kanske inte är den bästa lösningen när du vill klämma ut varje millisekund från din databas.

Men det är ett bra val när du vill öka den övergripande användarupplevelsen tack vare omfattande cachningsstöd. Kolla in prestanda doc igen. Det handlar mest om cachning. Det finns en första nivås cache, andra nivå cache, frågecache... Det här är platsen där Hibernate faktiskt kan överträffa enkla JDBC - det kan cache mycket på ett sätt som du inte ens kunde föreställa dig. Å andra sidan - dålig cache-konfiguration skulle leda till ännu långsammare installation.

Kolla in:Cacha med Hibernate + Spring - några frågor!

JVM (särskilt i server konfiguration) är ganska snabb. Objektskapandet på högen går lika snabbt som på högen i t.ex. C, sophämtning har optimerats kraftigt. Jag tror inte att Java-versionen som kör vanlig JDBC skulle vara mycket långsammare jämfört med mer inbyggd anslutning. Det är därför jag föreslog några förbättringar i ditt riktmärke.

Jag tror att JDBC är ett bra val om prestanda är ditt största problem. Java har använts framgångsrikt i många databastunga applikationer.




  1. PDO offertmetod

  2. javafx-anslutning till mysql

  3. Utvärdera när ett uttryck i en fråga utvärderas

  4. PHP:PDO Query returnerar inga resultat, men samma fråga returnerar 4 resultat i phpmyadmin?