Съмнявам се, че има нещо, което може да гарантира целостта на данните с изключение на споменатия 2-фазов ангажимент. Поне докато обявят v4 .
Има няколко неща, които да сведат до минимум шансовете за грешни преброявания. Комбинирайте вмъкване и актуализиране в един насипно . Това ще намали шансовете една от операциите да се провали от страна на приложението, тъй като това е една заявка.
След това проверете дали nInserted === 1
и nModified === 1
. В противен случай опитайте отново или поставете в опашка задача за повторно изчисление за дадения идентификатор на публикация.
За повторни опити е важно да имате повторни записи активиран, тъй като ще използвате $inc
на постове, което е доста далеч от идемпотентна работа.
Друг вариант е да приложите без транзакции подход - нещо като комбинация от "Изпълняване на скрипт на всеки период от време, за да се актуализира commentsNumber" и "Изобщо да не се съхранява commentsNumber". Ще трябва да запазите времеви отпечатъци на последното задание за повторно изчисление и да преброите новите коментари от датата насам.