webForumDet fria alternativet

Cache eller databas

9 svar · 446 visningar · startad av Dino

DinoMedlem sedan sep. 20011 914 inlägg
#1

Har en app som har en funktion som kommer att köras väldigt ofta. I denna funktion skall jag hämta ett string värde från en datakälla som kan komma att innehålla 10 000 eller mer poster. Har då två alternativ på förvaring.
1. Att ta ut alla poster från databasen och lägga dessa i en StringCollection som läggs i Cache. Och när funktionen körs nästa gång så tar den ut från Cachen istället.
2. Gå in i databasen varje gång funktionen körs.

Vilket alternativ skulle in välja?

PaceMedlem sedan juni 20019 024 inlägg
#2

Är detta en kuggfråga? Cache såklart! Varför använda en kofot när du likaväl kan använda en nagelsax för att bryta upp en dörr? ;)

DinoMedlem sedan sep. 20011 914 inlägg
#3

Är det verkligen så självklart när det gäller stora mängder data. Har sett test när det varit snabbare att hämta datan från databasen istället för cachen. Iofs så var det i testet ett dataset, med all dess skit, som las i cachen så det kan ju ha varit det som ställde till det där.

Alternativ ett är det jag hade tänkt använda, men det skadar ju aldrig att fråga.

PaceMedlem sedan juni 20019 024 inlägg
#4

Räkna ut hur mycket minne datan slukar och kolla hur mycket minne som finns installerat på servern. Om det nu skulle överstiga orimliga proportioner så kan du alltid spara ned det på disk och hämta det därifrån. Även om det är slöare än minnet så är det i alla fall snabbare än att läsa från databasen. Speciellt om den ligger på en annan server, då blir ju nätverket mellan oftast en flaskhals beroende på hastighet, trafik och så vidare.

Sedan måste jag fråga vad det är för data och varför du hämtar 10 000 poster?

DinoMedlem sedan sep. 20011 914 inlägg
#5

Det är ett bildarkiv och varje gång en skall bild visas så går det genom en HttpHandler som skall kolla om ett värde är si eller så för en viss bild. Varje bilds värde är det som skall sparas i cachen så det kan bli en hel del.

emissionMedlem sedan dec. 19996 721 inlägg
#6

Det bästa är helt enkelt att testa. Databasuppslag kan mycket väl vara snabbare, om de görs korrekt. Men, som sagt, testa.

PDahlenMedlem sedan apr. 2004778 inlägg
#7

Som emission säger, testa. När det gäller stora mängder data så kan det bli för mycket i cachen vilket görs att den töms hela tiden.
Kolla även om du verkligen behöver hämta alla 10.000 posterna. Hämta det som behövs på den sida du ska ladda.
Databasanrop är inte så långsamma som man kan tro. Det är långsammare att läsa ur filer t.ex.
Cachen är självklart snabbare än DB-anrop men som sagt, stora mängder data kan göra att cachen töms ofta och då blir det ändå db-anrop för att lägga in resultatet i cachen.

Mitt råd är i alla fall att se över vad du verkligen behöver och så hämtar du bara det du behöver när du anropar databasen.

GladhMedlem sedan maj 20012 812 inlägg
#8

Även om det är slöare än minnet så är det i alla fall snabbare än att läsa från databasen

Det är inte alls säkert, även om databasen skulle ligga på en annan server. Generellt så är det dock snabbare att läsa från en fil än från en databas om den ligger på en annan server, ligger det på samma server (hemsk tanke) så kan databasen vara flera gånger snabbare, eftersom den cachar datat i minnet.

Filer är endast att rekomender om du skall läsa från dem och inte skriva till dem, eftersom man oftas kan göra flera läsningar från en och samma fil, men endast en kan skriva till den åtgången.

Cachen brukar vara det bästa lösningen för att snabba upp och kan göra det ordentligt.

- M

PaceMedlem sedan juni 20019 024 inlägg
#9

Dino skrev:

Det är ett bildarkiv och varje gång en skall bild visas så går det genom en HttpHandler som skall kolla om ett värde är si eller så för en viss bild. Varje bilds värde är det som skall sparas i cachen så det kan bli en hel del.

Då är det mest troligt att de nyaste albumen, gallerier (eller hur du nu har strukturerat upp det) är de som kommer att visas mest. Därmed kan du lägga en cache-funktion på låt säga de 500 senaste objekten.

När någon efterfrågar en vanlig sida (inom de 500) hämtas den ur cachen. Efterfrågas en mindre vanlig sida (äldre bilder) så hämtas den ur databasen. Då säkert 70 % av besökarna nöjer sig med att titta på de nyaste bilderna sparar du otroligt på krafterna.

DinoMedlem sedan sep. 20011 914 inlägg
#10

Får ta och göra ett par "stress" tester allteftersom arbetet fortgår. Det är just mitt upplägg som gör det hela lite besvärligt, men tråden har gett mig ett par nya uppslag att jobba med. Tackar för era inlägg. :)

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)