Jeg tvivler på, at der er noget, der kan garantere dataintegritet bortset fra den nævnte 2-fasede commit. I hvert fald indtil annonceret v4 a> .
Der er få ting til at minimere chancerne for at få forkerte tællinger. Kombiner indsæt og opdatering til en enkelt masse . Det vil reducere chancerne for, at en af operationerne fejler på applikationssiden, da det er en enkelt anmodning.
Kontroller derefter om nInserted === 1
, og nModified === 1
. Ellers prøv igen eller sæt et genberegningsjob i kø for det givne post-id.
For genforsøg er det vigtigt at have gentagelige skrivninger aktiveret, da du skal bruge $inc
på indlæg, hvilket er ret langt fra idempotent drift.
En anden mulighed er at anvende transaktionsfrit tilgang - en slags kombination af "Kør script hver periode for at opdatere commentsNumber" og "Ikke at gemme commentsNumber overhovedet". Du skal beholde tidsstempler for det sidste genberegningsjob og tælle nye kommentarer siden datoen.