3、 Queue儲存。它是一個類似MSMQ的隊列實現。一個使用Queue Storage經典的情境是,在一個Web應用程式中,使用者通過表單遞交給伺服器資料,伺服器收到資料後將進行處理,而這一處理將花費很多時間。這種情況下,伺服器端通過Queue Storage可以把使用者遞交的資訊儲存在隊列中,後台再運行一個程式從隊列中取得資料進行資訊的處理。一個訊息的最大大小為8K。
使用樣本:
在一個項目(為了敘述方便,後面稱之為Client項目)的Main方法中加入如下代碼,我們將用它來向Queue Storage中添加資訊。
static void Main(string[] args){ var storageAccount = CloudStorageAccount.DevelopmentStorageAccount; var queueStorage = storageAccount.CreateCloudQueueClient(); // 檢查名為helloworldqueue的隊列是否被建立,如果沒有,建立它 var queue = queueStorage.GetQueueReference("helloworldqueue"); queue.CreateIfNotExist(); Console.WriteLine("Client is running..."); while (true) { // 插入資料到隊列中 queue.AddMessage(new CloudQueueMessage(string.Format("client sent information: {0}", DateTime.UtcNow.ToString()))); // 每次插入資料後線程休息3秒 Thread.Sleep(3000); }}
接著在另外一個項目(為了敘述方便,後面稱之為Server項目)的Main方法中加入如下代碼,我們將用它來從Queue Storage中讀取資訊和進行處理。
static void Main(string[] args){ var storageAccount = CloudStorageAccount.DevelopmentStorageAccount; var queueStorage = storageAccount.CreateCloudQueueClient(); // 檢查名為helloworldqueue的隊列是否被建立,如果沒有,建立它 var queue = queueStorage.GetQueueReference("helloworldqueue"); queue.CreateIfNotExist(); Console.WriteLine("Server is running..."); while (true) { // 從隊列中讀取一條資訊 // 收到資訊後可以根據收到的資訊做處理,為了示範方便我們這裡只是把資訊顯示出來 // 在雲端發送訊息後這條訊息將對於後續的請求不可見,但是並未被刪除。我們需要顯示刪除它。 // 否則在一段時間後該訊息將重新可見。這一設計的好處是確保了所有訊息都能夠被處理。 // 如果程式在收到訊息後處理訊息前就異常終止了那麼資料依然在一段時間後可以被重新處理。 // 詳情請參考MSDN文檔 var message = queue.GetMessage(); if (message != null) { Console.WriteLine(string.Format("Message retrieved: {0}", message.AsString)); // 處理完資料後必須顯示刪除訊息 queue.DeleteMessage(message); } // 每次讀取資料後線程休息3秒 Thread.Sleep(3000); }}
4、 SQL Azure儲存
上面介紹了Windows Azure Storage的三種儲存方式,Storage儲存其實就是類似於本地檔案儲存體,只是儲存位置是遠端雲端服務器。下面簡單介紹一下Azure提供的一種類似於SQL Server服務的基於SQL的儲存方式:SQL Azure儲存。
它是由微軟SQL Server 2008為主,建構在Windows Azure雲作業系統之上,運行雲端運算 (Cloud Computing)的關聯式資料庫服務 (Database as a Service),是一種雲端儲存(Cloud Storage)的實現,提供網路型的應用程式資料儲存的服務。
(1)、串連工具
開發人員或管理員可使用 SQL Server 2008 R2 版本的 SQL Server Management Studio 串連 SQL Azure Server,或是使用命令列工具 sqlcmd.exe 連到 SQL Azure Server。SQL Azure的連接字串可以在SQL Azure的管理視窗https://sql.azure.com中得到。
(2)、SQLAzure的限制
SQL Azure 基於架構上的設計與天生的限制,SQL Azure Server的帳戶與安全控制會有下列限制:
- 只有伺服器級主帳戶才具有變更密碼的能力,
loginmanager
組群的成員帳戶不具變更密碼的許可權,同時如果要訪問master資料庫,則該使用者帳戶必須要被對應到master資料庫,同時伺服器級主帳戶是不可以變更或刪除的,同時只要是被設為伺服器級主帳戶的使用者,就算沒有給予
dbmanager
或 loginmanager
,仍然可以建立資料庫並系統管理使用者。
- 只要是登入伺服器,一律以master為預設資料庫,US-English為預設的登入語系。
- 若要運行
CREATE/ALTER/DROP LOGIN
或CREATE/DROP DATABASE
,必須要先連至master資料庫。
- 當要在ADO.NET運行前述指令時,不可以使用參數化命令,而且前述命令於每個SQL批量也只能有一個(且是唯一的一個)。
- 當要運行
CREATE USER
配合FOR/FROM LOGIN
選項時,它也必須是SQL批量中唯一的一個。
- 當要運行
ALTER USER
配合WITH LOGIN
選項時,它也必須是SQL批量中唯一的一個。
- 只有伺服器級主帳戶以及被賦與
dbmanager
角色的成員才有運行CREATE DATABASE
與DROP DATABASE
的權力。
- 只有伺服器級主帳戶以及被賦與
loginmanager
角色的成員才有運行CREATE LOGIN
、ALTER LOGIN
與DROP DATABASE
的權力。
- 若想訪問master資料庫,則該帳戶必須要對應到master資料庫。
(3)、效能曲線
在SQL Azure上添加、更新和刪除資料的效能曲線。
在SQL Azure上查詢資料的效能曲線。
在SQL Azure和Table Storage上,添加、更新和刪除資料的效能比較。
在SQL Azure和Table Storage上,查詢資料的效能比較。
結束語
通過對Storage和SQL Azure儲存效能的比較,可以得知,整體上SQL Azure的儲存效能要高於Storage。所以,在Windows Azure上搭建應用服務的時候,除了要參考採用這兩種儲存方式的價格差異。同時,更重要的是應該權衡什麼資料存放區在SQL Azure上,什麼資料存放區在Storage上,在整個項目預算的允許範圍內,對應用服務的效能的影響。