2011-08-19 136 views
7

我正在使用Azure表存儲,並試圖找出提高性能的最佳方法。我執行的查詢非常簡單 - 無論是使用分區鍵和行鍵的精確選擇,還是具有列表的where子句(例如,WHERE x == 1或x == 2或x == 3等)。一旦我得到數據,我不會在數據上下文中追蹤它(不需要更改跟蹤等)。保存數據也是如此,所以我只將它添加到上下文中以啓用保存。Azure表存儲性能 - REST與StorageClient

目前,我正在使用.NET庫(存儲客戶端)。由於我沒有使用TableServiceContext的更改跟蹤和其他功能,因此我正在考慮直接使用HTTP API。有沒有人試過這兩種選擇?如果是這樣,你看到了什麼樣的性能差異?

感謝, 埃裏克

回答

10

表存儲可以是有點善變獸以優化性能。有多種因素會影響它。這裏只是我的頭頂幾個:

  1. 在每個查詢中使用分區密鑰是必須的。如果你不這樣做,你做錯了。如果您使用單個PK和單個RK(只有那兩個),它不再是查詢,而是資源GET,應該是相對即時的。
  2. 請勿使用基於OR的查詢。這將導致全表掃描,你的表現會很糟糕。相反,在OR語句中並行化這些查詢。
  3. 分區策略將產生重大影響。您擁有多少個分區以及多久訪問它們(預熱它們並導致基礎分區服務器負載均衡)將導致巨大差異。分區的大小也在這裏產生很大的影響。順序分區鍵通常是一個壞主意。
  4. 小型請求可以受益於關閉嘮叨(如前所述)。
  5. 關閉上下文跟蹤並繼續100(see here)也可以提供幫助。

還有很多我認爲取決於您的應用程序。但是,我提到的那些通常是我開始的那些。