sql >> Base de Datos >  >> NoSQL >> MongoDB

Compromiso de dos fases en MongoDB

Cuando la aplicación o la base de datos falla repentinamente entre la aplicación de la transacción a A y la aplicación de la transacción a B, todavía habrá una transacción con state:"pending" en la colección de transacciones globales. Su secuencia de comandos de recuperación que ejecuta después de un bloqueo debería notar esto, verificar las dos cuentas y ver que hay una transacción pendiente en una, pero no en la otra cuenta. Ahora sabe todo lo que necesita saber para revertir la transacción o intentar completarla.

Sí, escribir un script de recuperación que sea tan inteligente no es fácil. Pero las transacciones en un sistema de base de datos no diseñado para ellos siempre son difíciles. A veces, puede evitar requerir transacciones en MongoDB diseñando sus documentos de manera que los campos que deben actualizarse juntos estén siempre en el mismo documento, pero no siempre hay una manera sensata de hacerlo. Cuando su caso de uso necesite absolutamente transacciones, proteja su cordura y use una base de datos relacional.