Saya ragu ada sesuatu yang bisa menjamin integritas data selain dari komit 2 fase yang disebutkan. Setidaknya sampai mengumumkan v4 .
Ada beberapa hal untuk meminimalkan kemungkinan kesalahan penghitungan. Gabungkan sisipan dan perbarui menjadi satu massal . Ini akan mengurangi kemungkinan salah satu operasi gagal di sisi aplikasi, karena ini adalah permintaan tunggal.
Kemudian periksa apakah nInserted === 1
, dan nModified === 1
. Jika tidak, coba lagi atau buat tugas penghitungan ulang untuk id pos yang diberikan.
Untuk percobaan ulang, penting untuk memiliki tulisan yang dapat dicoba lagi diaktifkan, karena Anda akan menggunakan $inc
pada postingan, yang cukup jauh dari operasi idempoten.
Opsi lainnya adalah menerapkan tanpa transaksi pendekatan - semacam kombinasi "Jalankan skrip setiap periode waktu untuk memperbarui commentsNumber" dan "Tidak menyimpan commentsNumber sama sekali". Anda harus menyimpan stempel waktu dari pekerjaan penghitungan ulang terakhir, dan menghitung komentar baru sejak tanggal tersebut.