【问题标题】:How do i program a "Distributed Transaction"?我如何编写“分布式事务”?
【发布时间】:2010-12-25 22:53:42
【问题描述】:

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

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

【问题讨论】:

    标签: .net distributed-transactions


    【解决方案1】:

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

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

    关于聚类的主要目的及其在各种情况下的适用性,众说纷纭。我认为这取决于领域,需要仔细分析。关于聚类的一些链接: 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.

    【讨论】:

    • 这并不能回答你的问题,但我希望对你有用并防止你犯严重的错误。
    • 感谢匿名投票者,我发现我最初的答案包含错误的链接。现在编辑并添加了更多信息。
    • 警告:我提供了不同的链接以从不同的角度提供一般信息。如果您决定使用集群,我敢肯定,您会找到更多关于如何在您的情况下做到最好的具体信息。
    【解决方案2】:

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

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

    【讨论】:

    • 你是说我现在可以用 sqlite 写一个分布式事务测试吗?如果是这样,我可能会很好地做到这一点。
    • 据我所知,System.Data.SQLite 支持自动 DTC 登记。所以,是的。
    猜你喜欢
    • 2019-07-11
    • 2012-08-31
    • 1970-01-01
    • 2010-09-08
    • 2011-02-03
    • 2011-10-23
    • 2023-03-22
    相关资源
    最近更新 更多