4

过去我所有的数据库需求都是由 sqlite 解决的。现在设计一个可能很大的数据库,我研究了“分布式事务”。我该如何编程?我发现一些结果解释了什么是分布式事务,但没有解释如何对其进行编程。

我知道在代码中我有一些交易,我可能想批量处理成一个更大的交易。我使用.NET。我该如何做一些事情,比如创建一个用户,他的 PK 在一个数据库中,而他的用户信息(例如名称和设置)在另一个数据库中。这可能是一个单独的问题,但如果我有两个功能。一个更新媒体描述,另一个更新可能在同一服务器上或单独的内容。我如何嵌套这些事务并且只在最后提交?

4

2 回答 2

5

有关该概念的介绍,请参阅Wikipedia

要在 .NET 中使用,请查看System.Transactions命名空间,尤其是TransactionScope类。这将使您能够使用DTC。如果您查看该System.Data.SQLite项目,那么您会看到他们如何将 DTC 与 SQLite 集成。

于 2009-12-12T08:56:31.810 回答
4

您描述的方法可能会导致性能问题。每个请求都需要一个涉及多个数据库的事务。那是很昂贵的。例如,如果您需要在同一个事务中涉及 Web 服务调用和 DB 请求,分布式事务可能是一个很好的解决方案。

如果您将来需要可扩展性来提高重负载下的性能,您可以考虑集群。您将运行简单(非分布式)事务,而不是将单个用例的一部分分布在不同的服务器之间。而且您将受益于可扩展性,因为不同的请求将由不同的服务器处理。

关于聚类的主要目的及其在各种情况下的适用性,众说纷纭。我认为这取决于领域,需要仔细分析。有关集群的一些链接: Neil McAllister 的数据库集群、 使用MSCS 的 SQL Server 2000 数据库集群概述(过时)、 维基百科的集群(计算)集群算法- 用于一般知识。

我建议您看一下Martin Fowler 的Errant Architectures(主要讨论分布式计算,但也适用于事务),来自 MSDN 的Distributed Transactions Overview,以及这两个意见:

分销真的那么糟糕吗?(关于)马丁·福勒的第一分布定律

于 2009-12-12T08:52:19.260 回答