Memorizza il valore medio nel database o nell'ambito globale?

-1

Ho un'app web per le valutazioni in cui desidero generare la media di tutti i voti. Il modo in cui lo sto facendo attualmente è ricalcolare la media ogni volta che viene pubblicata una nuova recensione e archiviarla in una tabella di database, e ogni volta che qualcuno arriva su quella pagina, recupero il valore da quella tabella. C'è un modo migliore per farlo? Posso invece archiviarlo in una tabella hash globale? Ho sentito che è una cattiva pratica, ma qualcuno può far luce su di esso?

Modifica: Per essere chiari, non sto cercando nessuno che codifichi qualcosa per me, ma come qualcuno che sta costruendo il suo sito web ho pensato che questo sarebbe stato il posto migliore per me per ottenere aiuto sul fatto il metodo che sto attualmente utilizzando è il modo migliore per procedere.

    
posta lordingtar 17.12.2018 - 12:30
fonte

1 risposta

1

Di solito si evita di mantenere qualsiasi stato all'interno del processo in modo che il processo possa essere riavviato o eseguito in parallelo, senza alcuna perdita di dati. Per esempio. quando la tua app web ha due processi paralleli che servono le richieste e un processo modifica la media, questa modifica non sarà visibile nell'altro processo.

È opportuno mantenere i dati memorizzati nella cache all'interno del processo, purché si sappia a quali condizioni questi dati potrebbero non essere aggiornati e dovrebbero essere invalidati. Ad esempio, se la media esatta non è molto importante, potresti stare bene se è 10 minuti non aggiornato.

A parte le cache che potrebbero non essere aggiornate, qualsiasi stato dovrebbe essere mantenuto esterno. Questo di solito è il database principale, ma potresti combinarlo con un archivio di valori-chiave esterno, ad es. Redis o Memcached. Devi ancora mantenere questa cache aggiornata, ma almeno è condivisa da tutti i processi.

Molto qui dipende da quale scala su cui opererai. Averne una media di poche migliaia di recensioni non è un grosso problema e probabilmente non dovresti perdere tempo a ottimizzarlo. Allo stesso modo, se sei sicuro di non essere mai al di là di un singolo processo della tua app web, mantenere le cache temporanee all'interno di quel processo potrebbe essere tollerabile. Si noti che anche le architetture di fascia bassa (come LAMP) implicano già più processi paralleli. Oltre a ciò, le raccomandazioni dell'App Twelve-Factor App ( link ) diventano rilevanti, in particolare l'enfasi su un'architettura share-nothing .

    
risposta data 17.12.2018 - 13:09
fonte

Leggi altre domande sui tag