Jag tvivlar på att det finns något som kan garanti dataintegritet förutom den nämnda 2-fas commit. Åtminstone tills tillkännagav v4 a> .
Det finns få saker för att minimera risken för fel. Kombinera infoga och uppdatera till en enda bulk . Det kommer att minska risken för att en av operationerna misslyckas på applikationssidan, eftersom det är en enda begäran.
Kontrollera sedan om nInserted === 1
, och nModified === 1
. Annars försök igen eller ställ ett omberäkningsjobb i kö för det givna post-id:t.
För omförsök är det viktigt att ha återförsökbara skrivningar aktiverat, eftersom du ska använda $inc
på inlägg, vilket är ganska långt ifrån idempotent drift.
Ett annat alternativ är att använda transactionless tillvägagångssätt - en slags kombination av "Kör skript varje tidsperiod för att uppdatera commentsNumber" och "Inte lagra commentsNumber alls". Du måste spara tidsstämplar för det senaste omberäkningsjobbet och räkna nya kommentarer sedan datumet.