Ik betwijfel of er iets is dat waarborgt gegevensintegriteit afgezien van de genoemde 2-fasen commit. Tenminste tot v4 aangekondigd .
Er zijn weinig dingen om de kans op verkeerde tellingen te minimaliseren. Combineer invoegen en bijwerken in één bulk . Het verkleint de kans dat een van de bewerkingen mislukt aan de kant van de applicatie, omdat het een enkel verzoek is.
Controleer vervolgens of nInserted === 1
, en nModified === 1
. Probeer anders een herberekeningstaak voor de opgegeven post-ID opnieuw of plaats deze in de wachtrij.
Voor nieuwe pogingen is het essentieel om retryable writes ingeschakeld, aangezien u $inc
. gaat gebruiken op berichten, wat vrij ver verwijderd is van een idempotente werking.
Een andere optie is om transactieloos toe te passen benadering - een soort combinatie van "Voer script elke periode uit om commentsNumber bij te werken" en "Geen om commentsNumber op te slaan". U moet de tijdstempels van de laatste herberekeningstaak bijhouden en nieuwe opmerkingen sinds de datum tellen.