dao, jpa, hibernate, ejb, oracle - ZCACHEOWANIE WYNIKÓW ZAPYTAŃ LOKALNIE

0

hejka. mam mnóstwo serwisów, które korzystają z DAO itd...
potem te dao pytają przez JPA, dalej leci hibernate i do bazy oracle.

z bazy korzystam READ ONLY.
czasem jednak tracę dostęp do bazy - dostaję connection closed i mam problem.

chce żeby wtedy dao, jpa, hibernate - cokolwiek kurde brało scachowane wyniki tych zapytań lokalnie z mojego dysku.

znacie jakieś wspólne miejsce w kodzie przy JPA, hibernate, ejb - coś ale proxy w którym przepływają wszystkie zapytania w formie stringa i mogłabym sobie trochę pohackować, napisać jakiś prosty cache zapytań w stylu Map<String,String> co byłoby mapą <Zapytanie,Wynik> .

nwm jak się do tego zabrać

1

Napisałaś bardzo chaotycznie to co chcesz osiągnąć, może łatwiej to narysować?

Hmm jak już o proxy wspomniałaś, to może zrób serwer (ala kontroler), który będzie udawał bazę, a tylko wszystko co dostanie to prześle do bazy prawdziwej i jak baza będzie niedostępna to będzie odsyłał pobrane lokalnie dane, spreparowane dla danego zapytania.
Ewentualnie będzie miał czas na pewne modyfikacje w zapytaniach lub ich odpowiedziach w swoim buforze.

W kodzie interface odpowiednich metod powinien załatwić sprawę, ale co ty chcesz tam osiągnąć?

1

co chcesz osiągnąć. Dlaczego dostajesz connection close

0

@Szczery
Chce osiągnąć jak najprościej, topornie i najtańszym kosztem to, że gdy siądzie mi połączenie z bazą będę mimo to będę mogła dalej robić development tj klepać formatki.
Mam pomysł na użycie inceptora / AOP / proxy na wszystkie metody w ... no właśnie chyba założę go na wszystkie metody publiczne serwisów.
chce żeby ten inceptor cache będzie sobie zapisywał wywołania metod i z jakimi parametrami i cascheował na dysk wyniki tych wywołań
-a jak mi siądzie baza to będzie brał z cache to co metoda serwisu z tymi parametrami zwróciła ostatnio.
aktualność, zbytnia poprawność ani tryb WRITE danych mnie nie interesuje.

czyli:
frontend -> pytam o dane SERWIS
SERWIS -> pytam o dane nizej az do DAO
DAO -> zwraca dane do serwisu
SERWIS -> zwraca dane do widoku
INCEPTRO CACHE-> atkualizuje cache/zapisuje wywolanie i to co zwrocilismy na dysk
a gdy poleciał exception tj. baza siadla -> łapie go i zwracam to co ostatnio metoda zwróciła tyle, że deserializując z dysku a nie z bazki.

wiem, że musze na wszystkich zwracanych z dao obiektach wywołać rekurencyjnie gety, żeby hibernate zainicjował wszystkie lazy kolekcje i wtedy moge te obiekty serializowac i ladowac do cache.
a;e jak zrobić klucz na podstawie samej wywołanej metody to okey, ale jeszcze z parametrami to nwm za bardzo jak.
jak serializować gdy zwracane obiekty nie implementują serializable tez nwm :c ?
zastanawiam się w sumie teraz czy to jest wgl możliwe XD. #moja_znajomosc_javy #piątek

1

w Spring jest moetoda @cacheable która cacheuje wynik metody.
Może baza lokalna rozwiąże problem

1

Mam pomysł na użycie inceptora / AOP / proxy na wszystkie metody w ... no właśnie chyba założę go na wszystkie metody publiczne serwisów.
chce żeby ten inceptor cache będzie sobie zapisywał wywołania metod i z jakimi parametrami i cascheował na dysk wyniki tych wywołań

user image

A wiesz jaki to będzie miało wpływ na wydajność ? za każdym wywołaniem metody i refleksja 0.0 + blokująca operacja I/O DD jak to ma latać na produkcji to wole nie wiedzieć co tam się aktualnie znajduje :D to musi być jakaś puszka pandory :D

a;e jak zrobić klucz na podstawie samej wywołanej metody to okey, ale jeszcze z parametrami to nwm za bardzo jak.
jak serializować gdy zwracane obiekty nie implementują serializable tez nwm :c ?

cache to może być < Query, Wynik> - tak się cachuje wyniki HTTP na przykład. A wywołanie może mieć w kluczy np: wartość aktualnego requestu, chyba macie takie coś jak requestId ????

Jeżeli robisz to samodzielnie (niech Bóg ma Cie w swojej opiece) - to zgodnie z MVP - zrób to jak najniżej i najprościej - jakiś klient na którym wykonujesz query/execute- nadpisz entityManager (czy jak to sie nazywa w hajbernejcie - przecież i tak musisz zarządzać brakiem połączenia, chyba nie łapiesz wyjątku gdzieś na poziomie serwisu DDDD) - i zapisuj na początek query na wynik. Zobacz jak będzie działąć.

Dodatkowo, wgl, jakie zapisywanie na dysk ? to ma być cache ? cache to chyba jest po to żeby coś szybciej działało D:D a jak będziesz robić takie nieprzemyślane I/O to powodzenia, trzymaj to w pamięci, w jakieś istniejącej implementacji Cacha https://github.com/google/guava/wiki/CachesExplained

**WGL:
hystrix ma wszystko czego potrzebujesz - wywołujesz query jako call do zewnętrznej zależności, masz cachowanie - retry stategy (to co cchesz chyba, bo jak sie wywali to idziesz do cacha), masz circuit breaker(bo jak sie 5razy połączenia wywalą to po co marnować zasób na kolejne strzelanie, lepiej od razu następne requesty wysłać do cacha) https://github.com/Netflix/Hystrix - idealnie pasuje

0

@Szczery nie chce mi się adnotować wszytstkiego @cacheable , nie mam springa i musze ładować to na dysk -> wolę pisać sama.

@maryiusz aka @niezdecydowany wiem, ale muszę ładować na dysk z prywatnych względów.
XD nie będzie latać na produkcji. entity managera nadpisać za dużo bawienia żebym napdisała -zresztą nie wiem nie wiem jak to się robi :c XD.
za nisko i profesjonalnie nie chce mi się. najszybciej i najprościej dla mnie na serwisach spróbuje.
dam te inceptory proxiaki. wyjątek będzie łapany w inceptorze czyli ofczywiście na poziomie serwisu XD.
tak bd trzymać właśnie trochę w pamięci jakieś mapce, guava cache ale i tak wszystko co nowe będzie musiało na dysk musi lecieć. na starcie jak brak polaczenia,
to zaczytać trochę.

i te ostatnie rozwiązanie - fajnie to opisałeś brzmi mega i zawodowo. może spróbuje tylko zalezy mi na szybkości, nwm czy zanim mavenem i ogarne to czy nie
szybciej mi napisac sama. ciekawe czy bd to szybkie. I/O na dysk blokuje a niby java7 ma juz jakies NIO2 czy takie cos? myslalam ze to jest dobre :c .

wgl mam nowe linki kilka dobrego lol kontentu:
- Dawid Kostecki
- Robert Lewandowski
- pogrzeb kota [*]
- Skąd to zwątpienie?
- OPINIA NA TEMAT PREZYDENTA DUDY
- OBGADUJĄ CIĘ ZA PLECAMI? MILCZENIE JEST ZŁOTEM [NAPISY PL]
- Satyrycy oceniają Tomasza Terkę

1 użytkowników online, w tym zalogowanych: 0, gości: 1