2012-03-20 86 views
2

我有保存在Azure Blob存儲中的文件,並且我有一個保存這些文件的URI的數據庫。有沒有任何標準的方法來同步它們?我的意思是,應該沒有辦法刪除文件而不刪除數據庫中的記錄,反之亦然。如何將Azure SQL與Azure BLOB存儲同步?

+0

創建一個輔助角色並完成單個事務範圍內的所有文件和數據庫操作。 http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx – Lloyd 2012-03-20 14:39:42

+0

謝謝!我認爲這將工作 – 2012-03-20 15:27:45

+0

我有一個類似的問題,這就是我們如何解決它,首先刪除數據庫記錄,然後文件,如果文件不會刪除,然後回滾數據庫事務。小心服務之間的開放連接 – Lloyd 2012-03-20 15:30:22

回答

1

沒有工具可以確保數據庫記錄和Azure Blob存儲之間的參照完整性。

作爲一種替代方案,您可以有一個工作人員角色來保持文件與數據庫同步(但您會在這裏拖延)。

另一個有爭議的乾淨方法是隻有一個入口點來添加/刪除blob文件,並處理與該地點的數據庫同步。

0

在Azure平臺上實現事務的一種方法是使用隊列。 在隊列中放置消息,並且只有在消息成功處理後才刪除消息。

這樣,如果有任何操作失敗,您可以嘗試糾正這種情況,下次看到消息時。

0

我的解決方案是有一個像scripni建議的單入口點,並添加到它像交易方法。

我使用數據庫作爲整個事務的預寫日誌。

1)將數據庫記錄標記爲「shouldBeDeleted」= true。

2)嘗試刪除斑點。 3)如果出現錯誤並且未刪除斑點,則仍然有記錄,並且您知道它們指向的斑點應該被刪除。並且您可以嘗試稍後再次刪除它們,更重要的是,您可以忽略讀取查詢中的記錄,就像使用軟刪除方法時一樣。

4)如果blob被刪除,現在可以刪除記錄。 5)如果失敗,記錄仍被標記爲「shouldBeDeleted」,讓你忽略它們並在以後清理它們。

對我來說,主要好處是我不必爲此目的創建一個工作人員,而且這種更改是即時的,而不是依賴同步週期,當記錄未同步時留下一個窗口。

您可以以幾乎相同的方式實現插入/更新的相同想法。

*有點晚了,但我相信問題仍然存在,其他人也會遇到這個問題。

+0

這與我所做的非常接近。 – 2014-05-30 10:25:31