2009-12-12 5 views
4

Dans le passé, tous mes besoins en DB étaient résolus par sqlite. Maintenant, en concevant un db qui peut potentiellement être grand, j'ai regardé dans "Distributed Transaction". Comment puis-je programmer cela? J'ai trouvé quelques résultats expliquant quelle transaction distribuée est mais non expliqué comment la programmer.Comment programmer une "transaction distribuée"?

Je sais que dans le code j'ai quelques transactions que je pourrais vouloir effectuer une transaction plus importante. J'utilise .NET. Comment puis-je faire quelque chose comme créer un utilisateur où son PK est dans une base de données et ses informations d'utilisateur telles que le nom et les paramètres sont dans une autre base de données. Cela peut être une question distincte mais si j'ai deux fonctions. L'un met à jour une description de média et l'autre met à jour le contenu qui pourrait être sur le même serveur ou séparé. Comment imbrique-t-on ces transactions et ne commets qu'à la fin?

Répondre

4

Pour une introduction au concept, voir Wikipedia.

Pour une utilisation dans .NET, consultez l'espace de noms System.Transactions, en particulier la classe TransactionScope. Cela vous permettra de vous connecter à l'utilisation de DTC. Si vous regardez le projet System.Data.SQLite, vous pouvez voir comment ils ont intégré DTC avec SQLite.

+0

Voulez-vous dire que je peux écrire un test de transaction distribuée en ce moment avec sqlite? Si oui, je peux très bien le faire. –

+0

Pour autant que je sache, 'System.Data.SQLite' supporte l'enrôlement automatique de DTC. Donc oui. – jason

3

L'approche que vous avez décrite peut entraîner des problèmes de performances. Chaque requête nécessite une transaction impliquant plusieurs bases de données. C'est coûteux. Les transactions distribuées peuvent être une bonne solution si vous avez besoin, par exemple, d'un appel de service Web et d'une demande de base de données dans la même transaction.

Si vous sera besoin d'évolutivité pour améliorer les performances sous une lourde charge à l'avenir, vous pourriez envisager le regroupement . Au lieu de distribuer des parties d'un seul cas d'utilisation entre différents serveurs, vous exécuterez des transactions simples (non distribuées). Et vous bénéficierez d'une évolutivité, car différentes requêtes seront traitées par différents serveurs.

Il existe différentes opinions sur l'objectif principal de la mise en grappe et son applicabilité dans diverses situations. Je pense que cela dépend du domaine et nécessite une analyse minutieuse. Quelques liens concernant la mise en grappe: Database Clustering par Neil McAllister, Overview of SQL Server 2000 Database Clustering using MSCS (obsolète), Clustering (computing) de Wikipedia, et Clustering Algorithms - pour des connaissances générales.

Je vous recommande de jeter un oeil à Errant Architectures par Martin Fowler (parle surtout l'informatique distribuée, mais aussi applicable aux transactions), Distributed Transactions Overview de MSDN, et ces deux avis:

Is Distribution really that bad? et (About) Martin Fowler's First Law of Distribution.

+0

Cela ne répond pas à votre question, mais j'espère que cela vous sera utile et vous évitera de graves erreurs. –

+0

Merci à l'abaisseur anonyme, j'ai trouvé que ma réponse initiale contenait un mauvais lien. Maintenant édité et ajouté plus d'informations. –

+0

Attention: J'ai fourni des liens différents pour donner des informations générales de différents points de vue. Si vous décidez d'utiliser le clustering, je suis sûr que vous trouverez des informations plus spécifiques sur la façon de le faire dans votre situation. –

Questions connexes