2013-11-24 32 views
0

我遇到了Azure表存儲查詢的奇怪行爲。我使用以下代碼從Azure Table存儲獲取實體列表Azure表存儲的特殊問題選擇查詢

query = context.CreateQuery(DomainData.Employee.TABLE_NAME).Where(strPredicate).Select(selectQuery));

其中是上下文TableServiceContext,我試圖從Azure表存儲中抽取Employee實體,我的需求是動態構造謂詞和Projections。

所以strPredicate是一個字符串,它包含動態構造的謂詞。 selectQuery是投影字符串,它是基於用戶選定屬性動態構建的。

當用戶選擇Employee Object的所有屬性時,此處的Employee對象具有200多個屬性。系統根據所有屬性構建動態投影字符串,System需要45分鐘才能從Azure表存儲中檢索60000條記錄。

而當我在選擇投影,即直接進入物體看起來像下面

query = (context.CreateQuery<DomainData.Employee>          (DomainData.Employee.TABLE_NAME)            .Where(strPredicate) 

然後查詢只需5分鐘即可檢索Azure的表存儲60000條記錄。爲什麼這兩個查詢的特殊行爲都是相同的,一個是項目列/屬性,另一個沒有任何投影,但Azure表存儲提供的實體具有相同的列屬性和每個實體的相同大小的同一數量爲什麼是Azure表存儲是在第一個查詢中花費太多時間爲什麼它在第二個查詢中更快。請告訴我。

回答

0

處理Windows Azure Storage感知到的異常時的標準建議是使用Fiddler來標識調用的實際存儲操作。這將很快讓您看到兩種操作的實際區別。