2012-08-24 99 views
2

我有一個Windows Azure託管的WCF服務作爲「雲服務」。服務啓動時,需要將文件/磁盤中的數據填充到其內存中,以便快速訪問(換句話說,緩存)。現在我正在使用像C:\ Documents \ Filestoprocess文件夾,以便WCF調用該文件夾並在其內存中的該文件夾中填充數據數據。我有5000個小文件。我如何在Azure中執行此操作?有沒有可以在WCF中調用的文件夾路徑,以便WCF調用這些文件並打開每個文件並將每個數據保存在文件中?我並不是在通過使用帶寬的網絡來尋找複雜的Blob訪問。我正在尋找從自己的公共Web地址上運行的WCF「雲服務」對這些文件的簡單磁盤I/O訪問。Azure WCF訪問磁盤文件

回答

1

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存儲重新讀取或重新啓動實例所以他們會自動下載新文件。

2

您應該嘗試使用雲存儲服務來存儲數據,就好像您寫入本地文件系統一樣,它可以在重新啓動服務或重新啓動服務時銷燬。

您可以使用Azure驅動器服務進行研究,就像創建磁盤潛水一樣。它位於blob存儲之上。

但如果你真的想要寫和本地文件系統中讀取數據看看這篇博客http://blog.codingoutloud.com/2011/06/12/azure-faq-can-i-write-to-the-file-system-on-windows-azure/

它談論設置您的服務定義,允許寫入到本地文件系統。

2

根據on the size of your instances您將得到一個非暫存磁盤,您可以在其中存儲此類臨時數據。對於一個小型實例,最小值爲20GB。您不應直接訪問磁盤,但需要使用local resource,而不是您可以在your service definition文件或Visual Studio中配置(雙擊Web/Worker角色)。

這個存儲是非永久性的,這意味着如果你刪除了你的部署,如果你減少了實例的數量,在出現硬件問題的時候......你把這裏保存的所有數據都丟失了。如果你想保留你的文件,你應該使用blob存儲。但在你的情況下,你需要這些文件作爲某種緩存機制,本地資源是完美的。

如果您的目標是緩存數據,您可能需要查看Windows Azure中包含的緩存功能:Caching in Windows Azure