Windows Azure的資料存放區和效能比較
在Windows Azure上儲存資料大體上有兩種方式:Windows Azure Storage和SQL Azure。其中,Storage上的儲存又細分為:Blob,Table和Queue三種。下文就把這幾種在Azure上的儲存方法及效能作個簡單的比較,粗忽之處還請雅正。
1、Blog儲存:儲存大型的位元據,最大的儲存為50G。
(1)Blob的操作樣本:在Blob中儲存一個字串,再讀取出來。
CloudBlobClient blobclient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobclient.GetContainerReference("blobtest"); container.CreateIfNotExist(); CloudBlob blob = container.GetBlobReference("myFile"); blob.UploadText("Hello World!"); string blobcontent = blob.DownloadText();
(2)使用流的方式更新Blob資料。
由於使用OpenWrite得到的BlobStream分別為唯寫的,所以,不能使用Seek方法來定位寫入位置,所以,如果想更改Blob中的內容,可能需要把所有的資料都讀取到記憶體中,修改後,再上傳。如果僅僅是在現有的Blob後面追加資料,這樣做的方式效率較低。現給出使用兩個流的方式來更新Blob,供參考。
CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount; CloudBlobClient blobclient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobclient.GetContainerReference("blobtest"); container.CreateIfNotExist(); CloudBlob blob = container.GetBlobReference("myFile"); BlobStream streamWrite = null; try { streamWrite = blob.OpenWrite(); BlobStream streamRead = null; try { streamRead = blob.OpenRead(); byte[] buffer = new byte[32]; int len = -1; streamRead.Seek(1, System.IO.SeekOrigin.Begin); while ((len = streamRead.Read(buffer, 0, buffer.Length)) > 0) { streamWrite.Write(buffer, 0, len); } string appendContent = "This is example."; byte[] bs = Encoding.ASCII.GetBytes(appendContent); streamWrite.Write(bs, 0, bs.Length); } finally { if (streamRead != null) { streamRead.Close(); streamRead = null; } } } finally { if (streamWrite != null) { streamWrite.Close(); streamWrite = null; } }
(3)Blob操作效能的比較
Blob資料追加,更新和刪除的效能曲線。
Blob資料下載的效能曲線。從這圖可以得知,如果下載一個5M大小的資料,可能的需要將近5秒鐘的時間。