Question

Je comprends, dans un flou de tri de façon régulière ACIDE opérations de travail.Vous effectuez des travaux sur une base de données de telle manière que le travail n'est pas confirmée jusqu'à ce qu'une sorte de commettre le drapeau est réglé.La validation de la partie est basé sur une hypothèse sous-jacente (comme un disque unique bloc d'écriture est atomique).Dans le cas d'une erreur catastrophique, il vous suffit d'effacer les données non validées dans la phase de récupération.

Comment faire des transactions distribuées travail?Dans certains de la MS de la documentation que j'ai lu, vous pouvez en quelque sorte effectuer une transaction dans les bases de données et systèmes de fichiers (entre autres choses).

Cette technologie pourrait être (et l'est probablement) utilisé pour les installateurs, où vous souhaitez que le programme soit entièrement installé ou totalement absent.Vous pouvez tout simplement commencer une transaction au début de l'installateur.Vous pouvez ensuite vous connecter à la base de registre et du système de fichiers, apporter les modifications qui définissent l'installation.Lorsque le travail est terminé, il suffit de s'engager, ou de la restauration si l'installation échoue pour une raison quelconque.Le registre et le système de fichier sont nettoyés automatiquement pour vous par la magie de coordinateur de transactions distribuées.

Comment est-il possible que les deux systèmes disparates peuvent être menées dans ce mode?Il me semble qu'il est toujours possible de laisser le système dans un état incohérent, où le système de fichiers a commis ses modifications et le registre n'a pas.Je pense que dans MSDTC il est même possible d'effectuer une transaction sur le réseau.

J'ai lu http://blogs.msdn.com/florinlazar/archive/2004/03/04/84199.aspx, mais il se sent comme le début de l'explication, et que l'étape 4 doit être considérablement élargi.

Edit: De ce que je comprends sur http://en.wikipedia.org/wiki/Distributed_transaction, il peut être accompli par une validation à deux phases (http://en.wikipedia.org/wiki/Two-phase_commit).Après cette lecture, je ne suis toujours pas la compréhension de la méthode à 100%, il semble qu'il y est beaucoup de place pour l'erreur entre les mesures.

Était-ce utile?

La solution

Sur "étape 4":

Le gestionnaire de transactions coordonnées avec les gestionnaires de ressources pour assurer que tous réussir à faire la demande travail ou aucun du travail si fait, donc le maintien de l'ACIDE propriétés.

Bien sûr, cela exige de tous les participants à fournir les interfaces appropriées et (erreur) implémentations.L'interface ressemble vaguement à ceci:

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

Le gestionnaire de Transactions à s'engager à temps les requêtes de tous les participants, qu'ils sont prêts à valider la transaction.Les participants ne peuvent valoir ce que de droit s'ils sont capables de commettre de cette opération dans le cadre de tous les admissibles conditions d'erreur (validation, les erreurs de système, etc).Après que tous les participants ont affirmé la possibilité de valider la transaction, le gestionnaire transmet les Commit() message à tous les participants.Si l'un des participants au lieu de cela génère une erreur ou heures, l'ensemble de la transaction s'interrompt et les membres individuels sont annulées.

Ce protocole prévoit que les participants ont enregistré leur ensemble de la transaction contenu, avant d'affirmer leur capacité à s'engager.Bien sûr, cela doit être dans un local spécial du journal des transactions de la structure pour être en mesure de récupérer à partir de divers types de défaillances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top