Hej hej #webdev i #programowanie, przychodzę z ciekawym pytaniem :) Mam w projekcie (#java, #hibernate, #primefaces, #postgres) jeden widok wyświetlający dane z wielu tabel. Obecnie zaciągam dane hibernatem cały czas, ale coś wolno mi to działa i wpadłem na ciekawy pomysł.
Ogólnie w projekcie będzie więcej przeglądania danych niż modyfikowania. Kilka razy do roku wprowadzenie kilkudziesięciu rekordów, a tak to przeglądanie istniejących danych.
1) Nigdy nie robiłem widoków w bazie. Kiedy wg Was są najbardziej przydatne? Czy mój przypadek może się nadać, czy za bardzo kombinuję? 2) Czy wg Waszego doświadczenia szybciej powinienem dostać wszystkie dane z widoku, czy te same dane wyciągając ORMem przez jakieś ichniejsze metody? 3) Jeśli będę robił refresh automatycznie po insercie i okaże się, że trwa on 2-3 sekundy, to czy podczas pobierania danych aplikacja zwolni na ten czas, czy pobierze nieaktualne dane z widoku z pg? Bo gdyby pobierała nieaktualne, to trochę słabo...
@MetroStation: pytanie nr 1 - po co w projekcie ktory glownie czyta dane uzywac hibernate? dostajesz wszystkie wady hibernate i zadnej zalety. pytanie pomocnicze - zapytania robisz na encjach? jesli tak to hibernate buduje cache na wypadek ich edycji (czego nie robisz), stad spadek wydajnosci. moja propozyja - uzywanie encji hibernate zostaw tylko do cruda, zapytania do przegladania danych rob sqlem (jak engine bazy staly), albo hibernatem ale nie uzywaj
@Darjo: Hibernate jest wymogiem i nie mam na to wpływu. Do cruda używam encji, a do zapytań albo ciągnę po encjach, albo częściej przez criteria api wybieram projekcją konkretne kolumny z 3-4 tabel i docelowo zapisuję do modelu odpowiadającemu polom na widoku.
A nie wiesz czy można by to jeszcze jakoś przyspieszyć?
@MetroStation: no troche dziwne, rozwijam spory system i tez musze hibernate uzywac i dopoki nie pytam o encje to nie zauwazam duzych spadkow wydajnosci...
@Darjo: Może próbuję przyspieszyć za bardzo:) A używasz może statelessSession? http://stackoverflow.com/a/2761630 Rozważam coś takiego, może mógłbym pobrać paczkę danych nieco szybciej...
@MetroStation: kurcze, musialbym kod zdekompilowac, bo ja robie tylko dodatkowe moduly do systemu, ktory opakowuje hibernate swoimi bibliotekami i szczegolow implementacji niestety nie znam. postaram sie sprawdzic jak to w srodku maja skonfigurowane.
@MetroStation: tak na szybko jeszcze - moze faktycznie nie w tym miejscu lezy problem. sprawdz jakie zapytanie sql wygenerowal hibernate, moze ono jest niewydajne. a moze jeszcze inne miejsce. moze sprawdz jprofilerem co tak naprawde "muli"
@Darjo: Ładowanie danych trwa ok 3-4 sekundy i widać laga na frontach, co mnie nieco drażni. Chyba że to norma?:) Właśnie nie chciało mi się pisać hql, ale wszystko zmierza ku temu jesli stateless session nie pomoże.
@Darjo: Pic polega na tym, że jest tam dużo filtrowania po każdej z tych kolumn i lazyloading dużo by mi nie dał, zmuliłby się przy filtrowaniu. A danych aż tak dużo tu nie ma :) No nic, to spróbuję coś pogrzebać jutro, może się uda przyspieszyć nieco.
Thx za pomoc! Gdybym miał jakieś pytania to mogę na priv albo wołać w poście?;)
@MetroStation: czyli filtrowanie na kliencie robisz? no to faktycznie stronicowanie nic by nie dalo. chyba ze filtrowanie od razu w zapytaniu bedziesz robil... choc pewnie mocno by to skomplikowalo pobieranie danych. wolaj, wolaj, moze uda mi sie skuteczniej pomoc :)
Mam w projekcie (#java, #hibernate, #primefaces, #postgres) jeden widok wyświetlający dane z wielu tabel. Obecnie zaciągam dane hibernatem cały czas, ale coś wolno mi to działa i wpadłem na ciekawy pomysł.
Chciałbym zrobić w bazie widok z potrzebnymi mi danymi (http://www.postgresql.org/docs/9.3/static/rules-materializedviews.html), widok byłby cache'owany, automatycznie przed selectem (czy lepiej po insercie) robiłbym refresha (http://stackoverflow.com/questions/23906977/refresh-a-materialized-view-automatically-using-a-rule-or-notify) i może by to działało szybciej.
Ogólnie w projekcie będzie więcej przeglądania danych niż modyfikowania. Kilka razy do roku wprowadzenie kilkudziesięciu rekordów, a tak to przeglądanie istniejących danych.
1) Nigdy nie robiłem widoków w bazie. Kiedy wg Was są najbardziej przydatne? Czy mój przypadek może się nadać, czy za bardzo kombinuję?
2) Czy wg Waszego doświadczenia szybciej powinienem dostać wszystkie dane z widoku, czy te same dane wyciągając ORMem przez jakieś ichniejsze metody?
3) Jeśli będę robił refresh automatycznie po insercie i okaże się, że trwa on 2-3 sekundy, to czy podczas pobierania danych aplikacja zwolni na ten czas, czy pobierze nieaktualne dane z widoku z pg? Bo gdyby pobierała nieaktualne, to trochę słabo...
Co myślicie?
A nie wiesz czy można by to jeszcze jakoś przyspieszyć?
@SuppressWarnings("unchecked")
@Override
public List listVerificationsLight() {
Criteria
Właśnie nie chciało mi się pisać hql, ale wszystko zmierza ku temu jesli stateless session nie pomoże.
No nic, to spróbuję coś pogrzebać jutro, może się uda przyspieszyć nieco.
Thx za pomoc! Gdybym miał jakieś pytania to mogę na priv albo wołać w poście?;)