Dubito che ci sia qualcosa che possa garantire integrità dei dati a parte il citato commit in 2 fasi. Almeno fino a quando annunciato v4 .
Ci sono alcune cose per ridurre al minimo le possibilità di ottenere conteggi errati. Combina inserimento e aggiornamento in un unico in blocco . Ridurrà le possibilità che una delle operazioni abbia esito negativo sul lato applicazione, poiché si tratta di una singola richiesta.
Quindi controlla se nInserted === 1
e nModified === 1
. In caso contrario, riprova o accoda un processo di ricalcolo per l'ID post specificato.
Per i nuovi tentativi è essenziale disporre di scritture retryable abilitato, poiché utilizzerai $inc
sui post, che è abbastanza lontano da un'operazione idempotente.
Un'altra opzione è applicare transactionless approccio:una sorta di combinazione di "Esegui script ogni periodo di tempo per aggiornare i commentiNumber" e "Non memorizzare affatto i commentiNumber". Dovrai conservare i timestamp dell'ultimo processo di ricalcolo e contare i nuovi commenti dalla data.