Denna fråga går ut till datalogerna bland oss:
Ifall vi har ett MMO med unika items som har värden som exempelvis vikt, attack damage, mm - vill man lagra alla dessa värden för itemet i servern/databasen eller vill man beräkna dem varje gång en klient vill ha denna information?
EX: Med vikt, ifall vi lagrar värden för densitet och volym av ett item kan vi enkelt beräkna dess vikt. Frågan är: är det smartare att beräkna vikten varje gång det behövs eller vill man göra vikt-beräkningen en gång (när itemet skapas) och sen bara referera till minnet när klienten behöver vikten?
Har hört att minnesoperationer tar mycket längre tid att göra än vanliga CPUberäkningar, men å andra sidan vill man inte sakta ner serverns trafik med massa små enkla beräkningar...
I slutet av dagen handlar frågan om ifall man vill satsa på större databaser eller snabbare servrar. Vet inte riktigt hur jag ska tänka - all hjälp uppskattas!
Jag svarar gärna på frågor om spelets struktur ifall det behövs för att förstå situationen bättre
Spännande fråga! :)
Verkar finnas en Stackoverflow-tråd på ämnet. Om ingen av värdena någonsin förändras skulle jag anta att det är mer effektivt att beräkna typ volym och densitet enbart initialt.
Men om jag själv skulle bygga ett system: då skulle jag nog ha en funktion för att beräkna det on the fly när en klient behöver värdet istället. Blir betydligt enklare ifall typ höjden eller bredden skulle uppdateras 10 gånger så man slipper säkerställa att programmet uppdaterar alla andra världen (som vikt) som baseras på dem.
https://stackoverflow.com/questions/2454216/when-is-calculating-or-variable-reading-faster
Tack för ditt svar!
Håller verkligen med dig på den sista paragrafen, tror jag ska implementera ett sånt system till en början och ser hur det går. Tack för länken också, den hade många bra tips! 😊
Jag skulle säga att det är mer effektivt att gör t.ex. 3*2 än att hämta 6 från en databas eller cache, men det är bara generellt sätt. Det du egentligen vill göra är att kolla beräkningskomplexiteten för dina algoritmer/funktioner och sedan jämföra det med att hämta det ur en databas.
Att hämta ur en pSQL databas är ungefär O(log n) (+lite tid att förflytta datan till servern) medan multiplikation har något som är lite för komplext för mig att förstå. Det du hade kunnat göra om du förstår dem är att plotta de två funktioner och jämföra dem för det intervallet som spelet kommer hantera.
Men om vi ska vara realistiska och chansa lite skulle jag säga att multiplicera små tal på en server är mycket snabbare än att hitta i t.ex. en hash table.
Multiplikation är O(1) så länge du inte använder BigInteger eller liknande.
Alright, det tänkte jag inte ens på, man borde ju bara testa vad som går snabbast för det olika fallen. Finns ingen poäng i att spekulera när man kan göra tester! Tack för hjälpen! Ska göra mindre beräkningar i servern och testa ifall det är värt att lagra mer komplexa beräkningar :)
Digital Ungdom är ett ideellt ungdomsförbund med syfte att i Sverige utveckla och underhålla ungdomars intresse för och kunskaper om digital teknik och datavetenskap samt hur detta kan användas.