2014年12月19日 星期五

升級 Microsoft Azure Storage 4.3.0 以節省輸出流量、加快速度

使用 Microsoft Azure Storage 來擷取 Azure Table 的資料,通常要考慮速度與流量的最佳化,但原本的版本是 Microsoft Azure Storage 2.0.6,是沒有支援 OData 的,且 SDK 又是以 URL 去和 Azure Table 要資料,且一次都會要所有欄位資料,且速度也很慢,更別說還要做一些資料處理了。

我舉我的 Log 為例:

Log 資料欄位約略有 10 欄。
TableQuery query = (new TableQuery());
var data = table.ExecuteQuery(query);

var _query = (
    from entity in data
    // where entity.ErrorMessage != ""
    where entity.Timestamp > DateTime.Now.AddDays(-1)

    // where entity.Location.EndsWith("PUT")
    orderby entity.Timestamp descending
    select entity
);
DateTime std = DateTime.Now;

var r = _query.ToList();

DateTime etd = DateTime.Now;
TimeSpan diffDT = etd.Subtract(std);
Console.WriteLine("DateTime Method : {0} ms", diffDT.TotalMilliseconds);

資料有 370 筆,執行時間 25275.3736 ms,約 25 秒。

使用 Fiddler 來看:


由於 Azure Table 資料輸出有限制筆數,所以才會要那麼多次,每一份資料都 760000 bytes 左右,0.76 MB 左右。

升級 Microsoft Azure Storage 4.3.0 後,將程式碼稍微改一下,抓出需要使用的欄位就好:
TableQuery query = (new TableQuery()).Select(new string[] { "partitionKey", "Timestamp" });

資料有 330 筆,執行時間 9779.4132 ms,約 9.7 秒。

使用 Fiddler 來看:

這樣一來,既省輸出流量,也縮短時間,所以還沒有升級不訪升級試看看。