Tôi nghi ngờ có điều gì có thể đảm bảo toàn vẹn dữ liệu ngoài cam kết 2 giai đoạn đã đề cập. Ít nhất là cho đến khi công bố v4 .
Có một số điều để giảm thiểu khả năng bị đếm sai. Kết hợp chèn và cập nhật thành một số lượng lớn . Nó sẽ giảm nguy cơ một trong các hoạt động không thành công ở phía ứng dụng, vì nó là một yêu cầu duy nhất.
Sau đó, kiểm tra xem nInserted === 1
và nModified === 1
. Nếu không, hãy thử lại hoặc xếp hàng đợi công việc tính toán lại cho id bài đăng đã cho.
Để thử lại, điều cần thiết là phải có ghi có thể thử lại được bật, vì bạn sẽ sử dụng $inc
trên các bài đăng, khá xa so với hoạt động của Idempotent.
Một tùy chọn khác là áp dụng không giao dịch phương pháp tiếp cận - một kiểu kết hợp của "Chạy tập lệnh mọi lúc để cập nhật số nhận xét" và "Không lưu trữ số nhận xét nào cả". Bạn sẽ cần giữ dấu thời gian của công việc tính toán lại gần đây nhất và đếm các nhận xét mới kể từ ngày đó.