Pregunta

Entiendo, en una difusa tipo de forma, cómo regular transacciones ACID trabajo.De realizar algún trabajo en una base de datos de tal manera que el trabajo no está confirmada hasta que algún tipo de cometer bandera.La confirmación parte se basa en algunas hipótesis subyacente (como un solo bloque de disco de escritura es atómica).En el caso de que cometas un error, usted puede borrar los datos no confirmados en la fase de recuperación.

Cómo hacer transacciones distribuidas de trabajo?En algunos de los MS documentación que he leído que de alguna manera se puede realizar una transacción a través de bases de datos y sistemas de archivos (entre otras cosas).

Esta tecnología podría ser (y probablemente lo es) utilizado para los instaladores, donde desea que el programa sea totalmente instalado o totalmente ausente.Simplemente iniciar una transacción en el inicio del instalador.Siguiente se podía conectar con el registro y sistema de archivos, realizar los cambios que definen la instalación.Cuando el trabajo está hecho, simplemente commit o rollback si la instalación falla por alguna razón.El registro y sistema de archivos se limpia automáticamente por usted por este mágico coordinador de transacciones distribuidas.

¿Cómo es posible que dos sistemas dispares puede ser tramitada en este mundo de la moda?A mí me parece que siempre es posible dejar el sistema en un estado incoherente, donde el sistema de archivos se ha comprometido sus cambios y el registro no.Creo que en MSDTC incluso es posible realizar una transacción a través de la red.

He leído http://blogs.msdn.com/florinlazar/archive/2004/03/04/84199.aspx, pero se siente como si sólo el principio de la explicación, y que el paso 4 debe ser ampliado considerablemente.

Editar: Por lo que pude ver en http://en.wikipedia.org/wiki/Distributed_transaction, puede ser llevado a cabo por una confirmación en dos fases (http://en.wikipedia.org/wiki/Two-phase_commit).Después de leer esto, yo todavía no estoy entendiendo el método 100%, parece que hay un montón de espacio para el error entre los pasos.

¿Fue útil?

Solución

Sobre el "paso 4":

El administrador de transacciones de coordenadas con los jefes de recursos para garantizar que todo el éxito para hacer la solicitada el trabajo o el trabajo no se si se hace, por lo tanto el mantenimiento de las propiedades ACID.

Por supuesto, esto requiere que todos los participantes para proporcionar las interfaces adecuadas y (libre de errores) de las implementaciones.La interfaz se parece vagamente a esto:

public interface ITransactionParticipant {
    bool WouldCommitWork();
    void Commit();
    void Rollback();
}

El administrador de Transacciones en cometer las consultas en tiempo a todos los participantes si están dispuestos a confirmar la transacción.Los participantes sólo pueden afirmar si son capaces de cometer esta transacción en todo el margen de error de las condiciones (validación, errores del sistema, etc).Después de que todos los participantes han afirmado la capacidad para confirmar la transacción, el administrador envía la Commit() mensaje para todos los participantes.Si cualquier participante en su lugar, se produce un error o tiempos de espera, toda la transacción se aborta y miembros individuales se revierten.

Este protocolo requiere que los participantes han grabado sus transacción completa el contenido antes de hacer valer su capacidad de comprometerse.Por supuesto, esto tiene que ser en un local especial de registro de transacciones de una estructura capaz de recuperarse de los diversos tipos de fallas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top