2012-05-25 16 views
6

Ho migliaia di record che devono essere recuperati su un singolo clic dell'utente. Attualmente mi sta dando i risultati molto lentamente, devo aspettare per molto tempo. C'è un modo per migliorare il recupero di questi risultati utilizzando l'ibernazione?Come migliorare le prestazioni di Hibernate in Java?

Ho un caso in cui un metodo che ha una query di selezione verrà eseguito ogni singolo minuto. Questo è dove Hibernate mi sta dando il risultato lento. Sto usando Hibernate con MySQL.

+2

È un po 'come dire "Quanto è lungo un pezzo di spago?". Abbiamo bisogno di maggiori dettagli su cosa sia il tuo HQL. Solo una semplice clausola "dove" potrebbe velocizzare notevolmente le cose. – david99world

+0

Stai utilizzando la memorizzazione nella cache? (hibernate.cache.user_query_cache = true) – stzoannos

+0

Il recupero di molti dati da un database è lento, in stato di ibernazione o meno. Riduci il numero di righe che stai recuperando, ad esempio, presentandole poche centinaia di righe alla volta. I tuoi utenti non possono comunque guardare tutte le 10000 righe contemporaneamente, quindi non ha senso presentarle con così tante informazioni. – dasblinkenlight

risposta

6

pratica comune sta permettendo di cache di livello 2 ° e cache delle query. Di quanto i tuoi dati saranno letti da memmory non da db.

buon articolo su di esso here

Altre cose può essere utile:

1 Indicizzazione - nel caso in cui non v'è dove e ordinazione - si deve costruire indici per i campi che si sta cercando/ordinazione - questo può migliorare velocità di ricerca fino a 10 volte

2 Denormalizzazione: se si ha un sacco di join si può dare una denormalizzazione (mettendo tutto in una sola tabella). Ma questa dovrebbe essere la soluzione finale quando tutto il resto fallisce.

+0

Grazie mille proverò questo –

+0

Ho un caso in cui un metodo che ha query di selezione verrà eseguito ogni singolo minuto. Qui è dove ibernare mi dà un risultato lento –

+0

Con cache di secondo livello e cache di query abilitata popolerà le entità dopo la prima esecuzione della query. Quindi la prima volta può rallentare. Ma le prossime volte userà i valori memorizzati nella cache. La lettura dalla memoria sarà più veloce – alexey28

1

vorrei suggerire di andare per Pagination se si dispone per visualizzare i record su una pagina web e recuperare una parte dei record in una sola volta dire 100.

Problemi correlati