【问题标题】:Distributed Transaction from Multiple Sources to a Single SQL server Instance从多个源到单个 SQL 服务器实例的分布式事务
【发布时间】:2015-04-02 16:31:34
【问题描述】:

我想做的是让多个线程、进程甚至机器共享一个事务。准确地说。我想将一大块工作(主要是 SQL Server 查询)共享给我的多个线程、进程或机器,并且我希望这些工作是原子的。我看过 MSDTC,但如果你想更新几个不同的 SQL Server 实例(或其他资源),并且将所有内容都放在同一个事务下,它似乎很棒,但它似乎总是来自同一个源.即一个进程(一个连接)。是否可以?对技术没有限制,SQL Server 除外。我想要两阶段提交,但我想从一台机器启动事务,并将该事务(或加入它的方式)提供给其他进程。

问题定义 问题是我有一个漫长的过程,其中涉及一些复杂的计算和数据库更新。整个过程可以调度,其中很多可以并行处理。我想将该处理(包括数据库更新)集中到单独的进程中,包括远程进程。

【问题讨论】:

    标签: sql-server msdtc


    【解决方案1】:

    严格回答问题:

    然而,这几乎肯定不是你想要做的。我建议您描述您正在尝试解决的实际问题,而不是询问如何实施您认为合适的特定解决方案。

    【讨论】:

    • " 很多可以并行处理" 一个事务绝对不可能并行执行多个语句(将会话绑定到单个事务中没有区别)。阅读msdn.microsoft.com/en-us/library/ms131686.aspx
    • 这不是我想要并行执行的实际 SQL 语句。它是 SQL 语句之前的处理。我看过的一件事是通过单个进程传递 SQL 语句。它们是否被线性处理并不重要。
    • 如果你想扩展处理,你为什么要问关于登记事务?在进程/会话中进行所有数据库交互并将工作(通过 IPC)移交给您的进程。顺便说一句,如果处理如此繁重以至于值得扩展,那么根据定义,由于事务长度限制,它不能在单个事务中完成。看起来你真正想要的是一个工作流。
    【解决方案2】:

    我认为你想做一笔大交易;就像通过 select 语句加载一个巨大的行集;如果我的方式正确;我希望这些步骤能引导你找到你想要的;)。

    1. 每个进程、线程或机器都说它们需要一个唯一的 ID,例如 s1、s2、...、sn。
    2. [可选] 作为每个站点的容量,为所有站点设置一个站点大小。
    3. 将此数据存储在类似station 的表中。
    4. 现在使用来自station 表的[动态] 分页解决方案。
    5. 将每个页面分配给一个站点,调用站点来执行它们的页面。

    示例:

    查询:

    select * from someTables
    

    车站:

    stationId | size   
    ----------+----------
    s1        | 10
    s2        | 20
    ...       | ...
    ----------+----------
              | sumSize
    

    (i.) 当sumSize 小于count(*) 时,您需要一个重复的队列

    queue_repeat_count = (select count(*) from sometables) / sumSize

    当您呼叫电台时,您需要重复queue_repeat_count 次。

    在每个队列中,station 表上都有一个 cursor,用于调用带有参数的工作站,如下所示:

    station_Calls(queue_repeat)

    您的服务器中有一个使用 queue_repeat 参数处理分页的存储过程。

    这只是我的一个想法,我希望它可以帮助你;)。

    【讨论】:

      猜你喜欢
      • 2019-12-27
      • 2011-09-08
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多