2013-11-20 39 views
1

在我當前的項目中,我們正在研究分佈式雲應用程序,該應用程序將存儲實體的狀態和相關事件。當從隊列中收到消息時,我們將更新SQL Azure中實體的狀態,並將與該更新相關聯的事件保存在表存儲中。SQL Azure和Azure表存儲之間的事務,即回滾和提交

它看起來是這樣的:

開始的UnitOfWork 更新實體在SQL Azure中 保存活動表存儲 提交交易 結束的UnitOfWork 我們遇到這裏的問題是,我們不能提交更改在一個事務中的SQL Azure和Table存儲中。因此,當SQL Azure中的實體保存失敗時,我們想要回滾表storge中的事件保存。 幫助是非常appriciated。 我需要知道任何其他機制可用於這種方法。

回答

0

Windows Azure Table Storage不支持分佈式事務。因此,您在表存儲中執行的操作將無法自動與您在SQL Azure中執行的操作進行協調。然而,你可以自己做這種協調。

在SQL Azure中回滾事務很簡單。您可以通過使用TransactionContext來控制客戶端上的事務。然後,您可以根據表存儲中的操作是否成功提交或中止此事務。

如果您正在進行多項更改,回滾表存儲中的交易需要更多考慮。有很多方法可以實現這一點。如果您將多個實體更改爲事務的一部分,則可以使用最後更新的一個頂級實體,並指向所有其他實體的最新版本。通過這種方式,如果某件事失敗了一半,頂級實體仍然會指向其他實體的舊版本。然後,您需要一些清理機制來刪除不再使用的舊實體。

請記住,只是因爲調用表服務失敗,並不意味着該實體未更新。例如,該服務可能會成功處理您的請求,但由於某些網絡錯誤,該響應不會讓您迴應您。所以,如果你不確定是否成功了,你的代碼將不得不驗證它。

-Mike,Microsoft Windows Azure存儲開發人員