2012-05-25 15 views
6

Mam tysiące rekordów, które należy pobrać po kliknięciu jednego użytkownika. Obecnie daje mi bardzo powoli wyniki, muszę długo czekać. Czy istnieje sposób na poprawienie pobierania tych wyników za pomocą hibernacji?Jak poprawić wydajność hibernacji w Javie?

Mam przypadek, w którym metoda, która ma zapytanie wyboru, będzie uruchamiana co minutę. To tutaj Hibernate daje mi powolny wynik. Używam Hibernate z MySQL.

+2

To trochę jak powiedzenie "Jak długi jest kawałek sznurka?". Potrzebujemy więcej szczegółów na temat tego, czym jest twój HQL. Tylko prosta klauzula "gdzie" mogłaby radykalnie przyspieszyć działanie. – david99world

+0

Czy używasz buforowania? (hibernate.cache.user_query_cache = true) – stzoannos

+0

Pobieranie wielu danych z bazy danych jest po prostu powolne, hibernuj lub nie. Zmniejsz liczbę pobieranych wierszy, na przykład wyświetlając kilkaset wierszy naraz. Twoi użytkownicy nie mogą jednocześnie przeglądać wszystkich 10000 wierszy, więc nie ma sensu przedstawiać ich z tak dużą ilością informacji. – dasblinkenlight

Odpowiedz

6

Powszechną praktyką jest umożliwienie cache poziomu 2 i cache zapytań. Niż dane będą czytane z pamięci nie z db.

dobry artykuł o tym here

Inne rzeczy mogą być pomocne:

1 Indeksowanie - w przypadku nie ma gdzie i zamawianie - trzeba budować indeksy dla pól szukasz/zamówienie - może to poprawić Szybkość wyszukiwania 10 razy

2 Denormalizacja - jeśli masz dużo sprzężeń, możesz pomóc w denormalizacji (umieszczenie wszystkich w jednym stole). Ale to powinno być ostateczne rozwiązanie, gdy wszystko inne zawiedzie.

+0

Dziękuję bardzo, spróbuję tego. –

+0

Mam przypadek, w którym metoda, która ma zapytanie wyboru będzie uruchamiana co minutę. Tutaj hibernacja daje mi powolny wynik. –

+0

Z włączoną pamięcią podręczną drugiego poziomu i pamięcią podręczną zapytań, zapełni ona jednostki po pierwszym wykonaniu zapytania. Pierwszy raz może potrwać powoli. Ale następnym razem użyje buforowanych wartości. Czytanie z pamięci będzie szybsze – alexey28

1

Proponuję udać się do Pagination jeśli trzeba wyświetlić rekordy na stronie internetowej i odzyskać część zapisów w pewnym momencie powiedzieć 100.

Powiązane problemy