Har starkt typade objekt som jag lagrar i sessionsobjekt. Funderar på villka allternativ det finns till sessionsobjekt. En kandidat är att lagra i cachen. Undrar vad bör man jobba med? Prestandaskillnader / säkerhetsaspekter. Om du slår mot en user kanske det är bättre att bara lagra ett userid och sedan hämta det data från databasen som behövs. Att lagra massa users i ett cache-objekt verkar overhead, speciellt om det börjar bli lite användare som är inne samtidigt. Det är alltid bättre att lagra det i minnet än slå i databasen, om vi pratar prestanda. > Det är alltid bättre att lagra det i minnet än slå i databasen, om vi pratar prestanda. >Förutsatt förstås att datamängden är liten. Ifall man lägger för mycket saker i minnet så slöar det ned hela servern. Det finns en viss poäng i att inte överanvända minnet för att undvika swap till disk, men fortfarande, oavsett datamängd så är prestandan bättre om datat ligger i minnet. prestanda och säkerhetsskillnader sessionobjekt och cache
En sak har jag märkt med cachen, är att det ibland verkar som de inte "töms" när man vill. de ligger kvar även om man kör en Cache.Remove.
I mitt fall handlar det om att lagra ett "User" objekt med en hel del information om besökaren som finns lagrade ii db.Sv: prestanda och säkerhetsskillnader sessionobjekt och cache
Sv:prestanda och säkerhetsskillnader sessionobjekt och cache
Det finns ingen egentlig prestandaskillnad mellan cache och session. Sessions objekt är knutna till en applikationssession och cachen är global för hela applikationen. Vidare har cachen funktionalitet för automatisk rensning osv.Sv: prestanda och säkerhetsskillnader sessionobjekt och cache
Förutsatt förstås att datamängden är liten. Ifall man lägger för mycket saker i minnet så slöar det ned hela servern.Sv:prestanda och säkerhetsskillnader sessionobjekt och cache
Slöar ner jämfört med vad? Om man har mycket data kan man ju antingen låta servern avgöra vad som skall vara i minnet eller också gör man det själv. I de flesta fall skulle jag tro att servern gör ett bättre jobb eftersom den kan ta hänsyn till alla processer som körs.
Självklart skall man inte hålla saker i minnet som man vet inte behövs men att själv styra vad som skall vara i minnet eller på disk låter som suboptimering.Sv: prestanda och säkerhetsskillnader sessionobjekt och cache
Vi kan räkna lite på det där.
Säg att du som i det här fallet har användarinformation, du kanske har 1000 användare inne ungefär samtidigt. Användarinformationen tar kanske upp 4 fält, förnamn varchar(5), efternamn varchar(50), emailaddress varchar(512), address varchar(512), det innebär en total minnesmängd på (5 + 50 + 512 + 512) * 1000 bytes ~= 1mb.
Nu undrar jag om ngn här är rädd för att ha 1mb cachad data? för 10 000 användare blir det 10 mb någon som är rädd nu?
Jag kan förstå resonemanget om man pratar datamängder i GB storlek, eftersom en 32bitars processor addresserar 4GB så kan det störa. Men för allt under 1GB på en dedikerad server känns det meningslöst att ens ha den här disskusionen.
Sen kanske det inte är absolut bäst att ha 1 miljoner rader i minnet som man skall söka på, då måste sökalgoritmerna vara lika optimerade i applikationslagret som i en databasserver för att för sökningarna uppnå samma prestanda. Men det kanske inte gör något i det stora hela.
Vilket som, använd ACT och profilern för att profilera och se hur mycket minne du använder, så länge du har 30-40% ledigt minne i peak time så är du rätt säker på att klara dig bra.
Btw, ett annat litet tips när vi ändå pratar prestanda, om applikationen haltar och processorn inte används till 100%, gör om gör rätt ;)