【问题标题】:Transaction between SQL Azure and Azure Table StorageSQL Azure 和 Azure 表存储之间的事务
【发布时间】:2013-04-18 12:06:14
【问题描述】:

在我当前的项目中,我们正在开发一个分布式云应用程序,它将存储实体的状态和相关事件。当从队列中收到消息时,我们会更新 SQL Azure 中实体的状态,并将与该更新相关的事件保存在表存储中。

看起来像这样:

  • 启动工作单元
    • 在 SQL Azure 中更新实体
    • 将事件保存到表存储中
    • 提交事务
  • 结束工作单元

我们在这里遇到的问题是我们无法在一个事务中提交 SQL Azure 和表存储中的更改。所以当 SQL Azure 中实体保存失败时,我们希望回滚表存储中的事件保存。

非常感谢任何帮助。

【问题讨论】:

  • 观看this video,这真的很有趣并讨论了你的场景。虽然这不是一个直接的解决方案!但很好地洞察了“云思维”与“DTC 思维”。

标签: sql-server azure transactions azure-sql-database azure-table-storage


【解决方案1】:

如果我了解您在以下 2 种情况下尝试涵盖的目标:

  • 如果数据库插入失败,回滚 Azure 表
  • 如果 Azure 表插入失败,则回滚 SQL Azure

假设您在同一个线程中执行两个请求,您是否尝试过这样的方法(伪代码)?请注意,我正在使用数据库引擎的事务功能;这与 MSDTC 不同,因为我只为单个连接执行此操作 - 所以这是受支持的。

dbConnection.BeginTransaction;

try { 
     // add record in database - it is in a transaction so it can be rolled back
     insert_into_sqlazure;
     }
catch
{ 
    // automatic rollack - just exist with error
    exit_with_error;
}

try
{
     insert_into_azure_table;
     dbConnection.CommitTransaction;
}
catch
{
    dbConnection.Rollback;
    exit_with_error;
}

【讨论】:

    猜你喜欢
    • 2013-12-04
    • 2014-10-16
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 2012-07-17
    • 2011-09-18
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多