2012-10-10 41 views
6

我想將文件存儲在Azure Blob存儲中。到現在爲止還挺好。我也想存儲關於文件的附加元數據;爲此,我使用了Azure SQL數據庫(這樣我就可以輕鬆地查詢blob存儲上的文件)。Azure Blob存儲的事務訪問

因此,當我添加一個新的文件到商店,我想確保blob以及元數據已成功寫入。所以使用像事務處理這樣的東西出現在我腦海。

有什麼辦法,使用blob存儲以及sql存儲創建這樣的事務上下文嗎?

回答

5

就我所知,沒有任何內置的功能可以做到這一點;你需要自己管理這個。最簡單的情況是先保存你的blob,然後添加你的數據庫記錄。由於數據庫充當您的需求的索引,Blob在您的代碼中基本上是不可見的,直到數據庫記錄被保存。

更多的參與選項是實現您自己的提交邏輯。你會處理數據庫插入(與設置爲0,例如備案標誌),保存斑點,如果成功集數據庫1.

的標誌您還可以保存元數據天青表,儘管如果您有大量記錄,在Azure Tables中搜索會顯着減慢。在SQL數據庫中搜索大部分時間會更快。

你選擇哪種方法取決於你的目標,但我認爲第一個選擇是最簡單的。

1

存在的blob是無害的,但是指向不存在的blob的數據庫記錄會很糟糕。因此,我會用下面的邏輯來實現事務。

創建...先添加blob,然後創建數據庫記錄。如果blob上傳失敗,請返回。如果blob上傳成功,但數據庫記錄失敗,則刪除blob並返回。關鍵是你不想創建一個數據庫記錄,直到成功的blob上傳後。如果數據庫記錄無法更新,您也希望清理blob。如果斑點清除失敗,我只希望有一個定期運行清理未引用的斑點服務創建一個多小時前剛剛因此它不會試圖刪除數據庫記錄的上傳和創作之間的一個。

在去除...先刪除數據庫記錄。如果失敗了,只需返回,blob和數據庫記錄都仍然存在。如果數據庫記錄被刪除OK,則斑是不缺錢用剩下的還有什麼,所以你可以嘗試立即刪除它或把它留給清理服務採取的後續護理。