Dipende molto dal traffico del sito e probabilmente non dovresti preoccuparti di prendere decisioni del genere a meno che:
- Hai identificato un vero collo di bottiglia
- Hai identificato un vero collo di bottiglia in uno scenario molto simile in passato
L'ottimizzazione prematura è la parola chiave e lo descrive Donald Knuth 1 meglio di quanto avrei potuto:
Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.
L'approccio più semplice è avere una tabella vote
, in cui si registrano tutti i voti. I campi tipici sarebbero voteID
, voterID
, questionID
, voteTimestamp
e potresti calcolare i totali per ogni richiesta. Ma probabilmente questo diventerà un problema di prestazioni molto presto, specialmente con un sito ad alto traffico come StackOverflow 2 .
In questo caso, il mio approccio sarebbe quello di eseguire un processo in background pianificato 3 che calcola i totali e li memorizza in una tabella diversa (o nella tabella delle domande), ed eventualmente anche in un database di archiviazione dei documenti 4 . Oppure, anche in una cache di memoria 5 , se ha senso.
Ci sono altri modi per memorizzare i totali calcolati, questi sono i più semplici (credo).
Per quanto riguarda le informazioni dell'utente, ci si aspetta che cambino meno spesso, quindi è probabile che tu riesca a farla finita con la cache, senza alcun approccio speciale al realm di database.
In generale, reads
è molto più veloce di writes
e negli scenari a basso traffico comuni staresti bene semplicemente mettendo in cache sensibilmente le tue visualizzazioni. Non esiste un approccio definitivo, mescolare e abbinare quando si identificano i colli di bottiglia.
1 Attenzione! Link PDF.
2 Non possiamo davvero isolare CodeReview, è basato sulla piattaforma comune, se qualcosa è un collo di bottiglia su StackOverflow, per impostazione predefinita è (o lo sarà) su CodeReview. < br> 3 Cron è il tuo migliore amico!
4 Supponendo che il database principale sia relazionale.
5 Memcached è il tuo altro migliore amico!