Should I store the total amount, but how can I update one single record from multiple clients and make sure that it is still in sync?
Questa è caching strategia , perché rappresenta mantenere una copia di un valore che è derivabile dagli altri la persistenza.
In generale, la memorizzazione nella cache è un'ottimizzazione che aumenta le prestazioni al costo di una maggiore complessità. Il caching è noto come incline agli errori, il che è indicativo della complessità introdotta. Non dovremmo impegnarci nell'ottimizzazione a meno che non abbiamo il modo di verificare che l'ottimizzazione offra valore di business (come prestazioni osservabili dall'utente finale, costi operativi inferiori, ecc ...), poiché l'ottimizzazione incorrerà in costi di complessità di implementazione riducendo la manutenibilità e l'agilità. Inoltre, le informazioni memorizzate nella cache devono essere mantenute durante la modifica: ciò riduce le prestazioni in alcuni percorsi di codice; quindi, è saggio essere sicuri che si tratti di un vantaggio generale attraverso il test delle prestazioni. (Il caching può anche aumentare i requisiti di spazio, che possono anche influire negativamente sulle prestazioni.)
Considerando che non hai ancora scelto componenti come db per la persistenza; Direi che tale ottimizzazione è prematura.
Quindi, progetta il modello più semplice che possa funzionare, cioè utilizzare la semplice somma della query per trovare le risposte alla somma. Miglioralo dove, quando e solo se c'è un problema.
Quando si avvia un progetto, la correttezza dovrebbe essere una considerazione importante. Dato che più utenti accedono e aggiornano contemporaneamente lo stesso record, la tua preoccupazione per l'integrità della transazione del tuo sistema è ben posizionata.
Riguardo all'ottimizzazione ci sono molte possibilità, quindi quando arrivi così lontano, prendi in considerazione alcune alternative. Per un solo esempio, se gli elementi pubblicitari che cambiano il saldo dell'account sono immutabili come in un log di sola iscrizione, è possibile pubblicare un'istantanea dei totali dell'account su intervalli regolari o come necessari, in modo che una query somma richieda solo la somma ( i pochi) elementi pubblicitari pubblicati dopo l'ultima istantanea totale. Dal momento che un'istantanea su dati di registro non va mai fuori data, non hai un problema di sincronizzazione.