Dudo que haya algo que pueda garantizar integridad de los datos además de la confirmación de 2 fases mencionada. Al menos hasta que anuncie v4 .
Hay algunas cosas para minimizar las posibilidades de obtener recuentos incorrectos. Combine la inserción y la actualización en un solo a granel . Reducirá las posibilidades de que una de las operaciones falle en el lado de la aplicación, ya que es una sola solicitud.
Luego verifique si nInserted === 1
y nModified === 1
. De lo contrario, vuelva a intentar o ponga en cola un trabajo de recálculo para la identificación de publicación dada.
Para reintentos, es esencial tener escrituras reintentables habilitado, ya que vas a usar $inc
en las publicaciones, que está bastante lejos de la operación idempotente.
Otra opción es aplicar transactionless enfoque:una especie de combinación de "Ejecutar script cada período de tiempo para actualizar el número de comentarios" y "No almacenar el número de comentarios en absoluto". Deberá mantener las marcas de tiempo del último trabajo de recálculo y contar los nuevos comentarios desde la fecha.