[Java lista] Metodusok cachelese

Zsombor gzsombor at gmail.com
2011. Feb. 9., Sze, 00:08:36 CET


2011/2/9 sashee <gsashee at gmail.com>

> Szia,
>
> nem, konkretan forditott cacheuritesre gondolok. Tehat nem azt
> mondani, hogy ez a metodus modosit a db-n, es ezert a futasa utan ki
> kell uriteni a cacheket, hanem azt, hogy ez a metodus nem modosit a
> db-n, emiatt minden altala meghivott lekerdezo metodus eredmenyet eleg
> csak egyszer kiszamolni.
>
> sashee
>
>
oké, de ez a zárójeles megjegyzésemet leszámítva nem módosít semmit a
mondanivalĂłmon:
"Persze, az adott esetben elhiszem, hogy ilyen egyszerű cache megoldás
megteszi - azaz egy módosító metódus után az összes cachet üríted csak
tapasztalataim szerint ennél többre van szükség."
S emiatt kétlem, hogy megéri a beléfeccölt energiát, egy ilyen cache
kifejlesztése.

Zs




> 2011/2/8 Zsombor <gzsombor at gmail.com>:
> >
> >
> > 2011/2/8 sashee <gsashee at gmail.com>
> >>
> >> Szia,
> >>
> >> az annotaciokat mar nem kell parameterezni, ha belep egy @DbQuery-vel
> >> annotalt metodusba, akkor az osszes cache torlodik es elesedik, mivel
> >> ez ugyis csak olvasni fog. Tehat az egesz felvetes 3 db annotaciot
> >> tartalmaz, nem parameterezhetoek, es csak metodusra tehetoek. Cachelo
> >> DAO-t alkalmazok jelenleg, viszont ehhez kellett irni egy csomo kodot
> >> (megha nagyjabol trivialis is volt), ezert is kezdtem el gondolkodni
> >> altalanos megoldason.
> >>
> >> Nem tudtam meg eddig, hogy ezt memoizationnek hivjak, ugylatom nehany
> >> nyelvben megvan ennek a tudomanya is. Ahogy latom javaban proxy-val
> >> megoldhato, azonban en inkabb az adatbaziscachelo reszt tartom
> >> fontosabbnak.
> >>
> >> sashee
> >>
> >
> > Szia !
> >
> >  Persze, az adott esetben elhiszem, hogy ilyen egyszerű cache megoldás
> > megteszi - azaz egy módosító metódus után az összes cachet üríted
> (mondjuk
> > akkor én nem a DbQuery hanem mondjuk DbUpdate vagy DbUpdater annotációt
> > használnék :) ), csak tapasztalataim szerint ennél többre van szükség.
> >
> > Zs
> >
> >
> >>
> >> 2011/2/8 Zsombor <gzsombor at gmail.com>:
> >> >
> >> >
> >> > 2011/2/8 sashee <gsashee at gmail.com>
> >> >>
> >> >> Sziasztok,
> >> >>
> >> >> ma fejlesztes kozben jutott eszembe egy otlet, es errol kerem a
> >> >> velemenyeteket. Idonkent belefutok, hogy van nehany tisztan
> >> >> funkcionalis metodusom, ami kizarolag az argumentumaibol olvas ki,
> >> >> ebbol csinal valami eredmenyt. Ezt eleg hatekonyan lehet cachelni,
> >> >> minden bemenetre eleg lenne csak 1x kiszamolni. Pl int
> >> >> getMeaningOfLine(Life life){...} eseteben mondjuk lenne rajta egy
> >> >> @Cacheable annotacio, es akkor csak 1x futna le.
> >> >>
> >> >> Viszont ez egy eleg ritka dolog, tapasztalataim szerint sokkal
> >> >> tobbszor fordul elo olyan, hogy adatbazisbol olvasunk ki dolgokat, es
> >> >> azokkal csinalunk valamit, anelkul hogy modositanank barmit is. Erre
> >> >> vannak pl JPA tobbszintu cache, viszont azok legfeljebb a query-ket
> >> >> cachelik, a hozza tartozo java feldolgozast(ami esetenkent eltarthat
> >> >> egy darabig) azt nem. Tehat a legyeg az lenne, hogy a metodusokra,
> >> >> amik adatokat kernek le es dolgoznak fel, lehetne tenni pl egy
> >> >> @DbCacheable annotaciot, ami megintcsak az argumentumok szerint
> >> >> eltarolja, es ha ujra meghivodik, akkor csak azt adja vissza.
> >> >> Ertelemszeruen a db valtozhat, ezert a hivo metodusra is kell tenni
> >> >> mondjuk egy @DbQuery-t, aminek a hatasara torlodnek a cachek, viszont
> >> >> elesednek is, amig a metodusban van a vegrehajtas. Ha egymasban tobb
> >> >> igy felannotalt metodus van, akkor persze a legkulso hatasa
> >> >> ervenyesul. Ertelemszeruen az igy megannotalt metodus nem valtoztatja
> >> >> szamottevoen a db tartalmat.
> >> >>
> >> >> Leginkabb ezt arra tartanam kenyelmes megoldasnak, ha nem igazan
> lehet
> >> >> szepen megirni a feldolgozast ugy, hogy azonos adatok ne legyenek
> >> >> lekerve tobbszor. Ez altalaban megoldhato lenne mas
> >> >> programstrukturalassal, vagy custom cache osztaly hasznalataval, de
> ha
> >> >> ez automatizalhato lenne 2 annotacio hasznalataval, akkor az
> megiscsak
> >> >> kenyelmesebb.
> >> >>
> >> >> Megvalositas szerint akar aspektusokkal akar talan apt-vel megoldhato
> >> >> lenne.
> >> >>
> >> >> Milyen problemak lephetnek fel ezzel kapcsolatban, valamint van
> >> >> ilyesmire mar letezo megoldas?
> >> >>
> >> >> sashee
> >> >
> >> >
> >> > Szerintem nem annyira praktikus annotációkkal programozni, s egy
> >> > közepesen
> >> > bonyolult helyzetben is már nehéz lesz generikusan fel annotálni a
> >> > kĂłdot,
> >> > hogy "ha ez a metódus meghívódik X Y és Z paraméterrel, akkor
> invalidáld
> >> > A
> >> > és B és C cache-ben ezt és ezt a kulcs tartományt".
> >> >  Ennél sokkal egyszerűbb, ha a "DAO" réteg elé írsz egy cachelő DAO-t
> >> > ...
> >> > Persze nem hangzik olyan jól, de gyorsabban kész leszel vele, és
> >> > könnyebben
> >> > át fogod látni mi miért történik :)
> >> >
> >> > Zs
> >> >
> >> >
> >> >
> >> > _______________________________________________
> >> > Javalist mailing list
> >> > Javalist at javagrund.hu
> >> > http://javagrund.hu/mailman/listinfo/javalist
> >> >
> >> >
> >> _______________________________________________
> >> Javalist mailing list
> >> Javalist at javagrund.hu
> >> http://javagrund.hu/mailman/listinfo/javalist
> >
> >
> > _______________________________________________
> > Javalist mailing list
> > Javalist at javagrund.hu
> > http://javagrund.hu/mailman/listinfo/javalist
> >
> >
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20110209/c9b922c6/attachment-0001.html 


További információk a(z) Javalist levelezőlistáról