Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Keširanje objekata

[es] :: .NET :: Keširanje objekata

[ Pregleda: 2407 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Lazar-I

Član broj: 6950
Poruke: 169
*.ptt.yu



+727 Profil

icon Keširanje objekata06.06.2003. u 12:48 - pre 254 meseci
problem u pseudo kodu (za konkretni programčić koristim C#):

class CDatabase
{
..............CObj GetObj(int id)
.............{
..........................if( Objekat se nalazi u keshu )
..........................{
...................................... Procitaj iz kesha
...................................... return obj;
......................... }
..........................else
..........................{
......................................Procitaj iz baze
......................................Dodaj u kesh
......................................return obj;
..........................}
.............}
}
Problem je kada ukloniti referencu na objekat iz keša. Naravno trebalo bi onda kada sem reference iz keša ne postoje druge reference na objekat.

Moje resenje je:

............ keš je implementiran hashTabelom

............ Procitaj iz kesha(id)
............ {
......................... hashTabela[id].BrojReferenci++;
......................... return hashTabela[id].obj;
.............}

.............dodaj u kesh - BrojReferenci=1

Klasa CObj bi morala da ima metod

............ UkloniIzKesha()
............ {
......................... hashTabela[id].BrojReferenci--;
......................... if(BrojReferenci<1)
...................................... hashTabela[id].Remove();
............ }


Problem kod ovog resenja je

1. Mora se pozivati metod UkloniIzKesa()- da se nebi desilo da prevučem celu bazu na aplikativni server

2. Operacija dodele moze uzrokovati nepredvidjene rezultate, npr.

CObj obj1=database.GetObj(34);
CObj obj2=obj1;
obj1.UkloniIzKesa();
CObj obj3=database.GetObj(34);

Sada obj2 i obj3 predstavljaju isti objekat - id=34, ali postoje 2 instance tog objekta, pri cemu se obj2 ne nalazi u keshu.


Ovo resenje je jednostavno ali lose, ima li neko bolje rešenje, ali da je takođe jednostavno ?
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Keširanje objekata06.06.2003. u 18:17 - pre 254 meseci
Mislim da je ovde problem:

Citat:
Problem je kada ukloniti referencu na objekat iz keša. Naravno trebalo bi onda kada sem reference iz keša ne postoje druge reference na objekat.


U principu, nism čuo da se keš implementira na taj način. Ne verujem da je bitno da se objekat ukloni iz keša čim broj referenci padne na nulu. Ja bih napravio keš tako da se objekti čuvaju "izvesno vreme", ili dok se keš ne napuni pa onda da se "starosedeoci" prvo bišu. Naravno, treba obratiti pažnju i da se kod svake promene (brisanja) baze istovremeno izvrši i provera keša.
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.client.attbi.com



+18 Profil

icon Re: Keširanje objekata06.06.2003. u 19:01 - pre 254 meseci
DT, sjajna ideja! I ja bi napravio takav cache, a posle bi ga nazvao System.Web.Caching.Cache :D

Salu na stranu, ime klase nije bas najsrecnije jer implicira da ima nekakve veze sa webom. U stvari nema, radi na (string, object) parovima, podrzava expiration, priority, i ima callbackove kada neki cache entry expireuje. Vrlo lepa stvar. Verovatno bi bilo bolje da su ga smestili u Collections.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Keširanje objekata06.06.2003. u 19:30 - pre 254 meseci
Hehe, od sad kad god neko nešto pita, prvo gledam MSDN, pa onda odgovaram. Pitam se samo da li u FCL-u postoji klasa za kuvanje kafe...
 
Odgovor na temu

[es] :: .NET :: Keširanje objekata

[ Pregleda: 2407 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.