过去我的所有数据库需求都是由sqlite解决的。现在设计一个可能很大的数据库我查看了“分布式事务”。我该如何编程呢?我找到了一些结果来解释分布式事务是什么,但没有解释如何编程。
我知道在代码中我有一些交易,我可能想要批量处理更大的交易。我用.NET。我怎样才能创建一个用户,他的PK在一个数据库中,而他的用户信息如名称和设置在另一个数据库中。这可能是一个单独的问题,但如果我有两个功能。一个更新媒体描述,另一个更新可以在同一服务器上或分开的内容。我如何嵌套这些交易,最后才提交?
答案 0 :(得分:4)
有关该概念的介绍,请参阅Wikipedia。
要在.NET中使用,请查看System.Transactions
命名空间,尤其是TransactionScope
类。这将使您能够使用DTC。如果您查看System.Data.SQLite
项目,那么您可以看到他们如何将DTC与SQLite集成。
答案 1 :(得分:3)
您描述的方法可能会导致性能问题。每个请求都需要涉及多个数据库的事务。这很昂贵。如果您需要,例如,在同一事务中涉及Web服务调用和数据库请求,则分布式事务可能是一个很好的解决方案。
如果您 需要可扩展性以在将来的重负载下提高性能,您可以考虑群集。您将运行简单(非分布式)事务,而不是在不同服务器之间分发单个用例的一部分。并且您将获得可伸缩性的好处,因为不同的请求将由不同的服务器处理。
关于聚类的主要目的及其在各种情况下的适用性,存在不同的观点。我认为这取决于领域,需要仔细分析。有关群集的一些链接: Neil McAllister Database Clustering, Overview of SQL Server 2000 Database Clustering using MSCS(过时), 来自维基百科的Clustering (computing)和Clustering Algorithms - 了解一般知识。
我建议你看一下Martin Fowler的Errant Architectures(主要讨论分布式计算,但也适用于交易),来自MSDN的Distributed Transactions Overview,以及这两种观点:
Is Distribution really that bad?和 (About) Martin Fowler's First Law of Distribution