Wątpię, czy jest coś, co może gwarantować integralność danych poza wspomnianym 2-fazowym zatwierdzaniem. Przynajmniej do czasu ogłoszonej wersji 4 .
Jest kilka rzeczy, które minimalizują szanse na błędne zliczenie. Połącz wstawianie i aktualizację w jednym Zbiorczo . Zmniejszy to prawdopodobieństwo niepowodzenia jednej z operacji po stronie aplikacji, ponieważ jest to pojedyncze żądanie.
Następnie sprawdź, czy nInserted === 1
i nModified === 1
. W przeciwnym razie spróbuj ponownie lub umieść w kolejce zadanie ponownego obliczenia dla podanego identyfikatora postu.
W przypadku ponownych prób konieczne jest posiadanie możliwych do powtórzenia zapisów włączone, ponieważ zamierzasz używać $inc
na postach, co jest dość dalekie od idempotentnej operacji.
Inną opcją jest zastosowanie bez transakcji podejście - rodzaj kombinacji "Uruchamiaj skrypt co jakiś czas, aby zaktualizować numer komentarzy" i "W ogóle nie przechowuj numeru komentarzy". Będziesz musiał zachować znaczniki czasu ostatniego zadania ponownego obliczenia i liczyć nowe komentarze od daty.