我有一個Windows Azure託管的WCF服務作爲「雲服務」。服務啓動時,需要將文件/磁盤中的數據填充到其內存中,以便快速訪問(換句話說,緩存)。現在我正在使用像C:\ Documents \ Filestoprocess文件夾,以便WCF調用該文件夾並在其內存中的該文件夾中填充數據數據。我有5000個小文件。我如何在Azure中執行此操作?有沒有可以在WCF中調用的文件夾路徑,以便WCF調用這些文件並打開每個文件並將每個數據保存在文件中?我並不是在通過使用帶寬的網絡來尋找複雜的Blob訪問。我正在尋找從自己的公共Web地址上運行的WCF「雲服務」對這些文件的簡單磁盤I/O訪問。Azure WCF訪問磁盤文件
回答
Blob訪問並不複雜。事實上,您可以從blob存儲到本地磁盤單獨下載一個zip文件,將其解壓縮,然後從這5,000個小文件中填入wcf服務。
結賬this msdn page記錄DownloadBlobToFile()
。基本部分:
CloudBlobClient blobClient =
new CloudBlobClient(blobEndpoint, new StorageCredentialsAccountAndKey(accountName, accountKey));
// Return a reference to the blob.
CloudBlob blob = blobClient.GetBlobReference("mycontainer/myblob.txt");
// Download the blob to a local file.
blob.DownloadToFile("c:\\mylocalblob.txt");
現在:我不同意保存到C:上的根文件夾。相反,你應該抓住一些本地存儲(易於配置)。一旦你在你的角色配置配置本地存儲,就問我的角色的環境吧,並要求根路徑:
var localResource = RoleEnvironment.GetLocalResource("mylocalstorage");
var rootPath = localResource.RootPath;
注:由於@KingPancake提到的,你可以使用蔚藍的車程。但是:請記住,Azure驅動器只能由一個實例寫入。您需要爲其他實例創建其他快照。我認爲你簡單地使用一個簡單的blob,複製你的文件(作爲單個zip文件或單個文件),然後從那裏開始。
您提到了對網絡帶寬的關注。您不需要在同一個數據中心內支付帶寬費用。另外:速度非常快:每個內核100Mbps。因此,即使使用Small實例,當您轉到較大的實例大小時,您也可以非常快速地複製文件。
最後一個想法:在不使用blob存儲或Azure Drives(作爲vhd在blob存儲中安裝)的情況下,唯一能夠訪問您的5,000個文件的其他方法是從外部源或bundle下載文件他們與您的Windows Azure軟件包(然後他們會出現在您的應用程序的文件夾中,無論你在他們的任何子文件夾下)。捆綁有兩個缺點:
- 更長的時間來上傳你的部署包因添加了大小
- 無力改變任何單個文件而無需重新部署軟件包。
通過存儲在blob中,您可以輕鬆更改小文件中的一個(或全部),而無需重新部署代碼 - 您只需指示它從blob存儲重新讀取或重新啓動實例所以他們會自動下載新文件。
您應該嘗試使用雲存儲服務來存儲數據,就好像您寫入本地文件系統一樣,它可以在重新啓動服務或重新啓動服務時銷燬。
您可以使用Azure驅動器服務進行研究,就像創建磁盤潛水一樣。它位於blob存儲之上。
但如果你真的想要寫和本地文件系統中讀取數據看看這篇博客http://blog.codingoutloud.com/2011/06/12/azure-faq-can-i-write-to-the-file-system-on-windows-azure/
它談論設置您的服務定義,允許寫入到本地文件系統。
根據on the size of your instances您將得到一個非暫存磁盤,您可以在其中存儲此類臨時數據。對於一個小型實例,最小值爲20GB。您不應直接訪問磁盤,但需要使用local resource,而不是您可以在your service definition文件或Visual Studio中配置(雙擊Web/Worker角色)。
這個存儲是非永久性的,這意味着如果你刪除了你的部署,如果你減少了實例的數量,在出現硬件問題的時候......你把這裏保存的所有數據都丟失了。如果你想保留你的文件,你應該使用blob存儲。但在你的情況下,你需要這些文件作爲某種緩存機制,本地資源是完美的。
如果您的目標是緩存數據,您可能需要查看Windows Azure中包含的緩存功能:Caching in Windows Azure
- 1. Azure託管磁盤。訪問底層blob?
- 2. 處理/訪問磁盤上的文件
- 3. Azure Blob vs文件與磁盤存儲
- 4. LBA級磁盤訪問
- 5. 分析磁盤訪問
- 6. Azure磁盤速度
- 7. Azure磁盤數據丟失
- 8. Azure父/子差異磁盤
- 9. Azure刪除孤立磁盤
- 10. Azure的磁盤管理
- 11. 如何監控某個文件的磁盤訪問?
- 12. 從服務器根目錄中的磁盤訪問文件
- 13. 在寫入文件時減少磁盤訪問次數C
- 14. 嘗試訪問磁盤上的文件時無效url
- 15. 寫入磁盤:文件訪問被拒絕
- 16. 從磁盤加載文件問題
- 17. Java NIO和Windows磁盤訪問
- 18. Windows上的原始磁盤訪問8
- 19. 從BufferedStream獲取磁盤訪問次數
- 20. ehcache磁盤存儲位置和訪問
- 21. 如何訪問網絡中的磁盤
- 22. 鎖定互斥鎖vs訪問磁盤
- 23. 數據大小和磁盤訪問
- 24. 使用C/C++訪問RAW磁盤
- 25. 頻繁訪問磁盤的需求?
- 26. 內存FILE *(無磁盤訪問)
- 27. 從iPhone SDK訪問iPhone磁盤
- 28. APK文件磁盤上不
- 29. 文件寫入磁盤
- 30. Azure創建數據磁盤並將文件複製到它