2013-02-26 47 views
4

我正在遷移到爲我的Azure表存儲使用新的Storage Client Library。Storage Client Library 2.0 - 爲什麼API不如1.7那麼直觀?

與以前存儲客戶端庫1.7命名空間查詢:

var orders = serviceContext 
       .CreateQuery<Order>(tableName) 
       .AsTableServiceQuery<Order>() 
       .Where(e => e.PartitionKey == partitionKey && e.RowKey == rowKey) 

存儲客戶端庫2.0類查詢:

string partitionKeyFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey); 
string rowKeyFilter = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, rowKey); 
string combinedFilter = TableQuery.CombineFilters(partitionKeyFilter, TableOperators.And, rowKeyFilter); 

var query = new TableQuery<Order>().Where(combinedFilter); 
var orders = table.ExecuteQuery<Order>(query); 

如有指正我錯了,但1.7更乾淨,使用強類型的實體,impl喚醒IQueryable接口並利用LINQ的全部功能。 2.0版讓我覺得我再次使用ADO.NET數據集。

我完全錯過了這裏的陰謀嗎?我知道有很大的性能改進,但爲什麼版本2.0會覺得像API這樣的降級?

+0

如果你願意與一個簡潔的界面替代的開源表存儲客戶端,在http://lucifurestash.codeplex.com檢查出我的項目/。還有一些附加功能,如陣列和大數據支持。 – hocho 2013-02-27 02:13:46

+0

謝謝 - 會看看。 – davenewza 2013-02-27 09:25:18

回答

3

存儲客戶端庫2.0仍然在不同的命名空間中包含傳統的DataServices實現。另一方面,新表實現已經比已更新的DataServices實現和SDK的先前版本顯示出顯着的性能改進。根據運行潛伏期提高了25%到75%,同時系統資源利用率也顯着下降。

請參閱Windows Azure Storage Client Library 2.0 Tables Deep Dive博客文章瞭解更多信息。同樣在博客文章中提到,如果您更喜歡LINQ,仍然可以使用已遷移到Microsoft.WindowsAzure.Storage.Table.DataServices命名空間的舊版DataServices實現。

新表格服務層中的IQueryable支持目前正在開發中。我們目前沒有更多具體的時間線詳情可供分享。

+2

問題不在於性能,而在於LINQ的可讀性和使用方面的差異 – 2013-02-26 22:20:00

+0

對不起,如果我的回答不明確。如果你想使用LINQ,你仍然可以在2.0中使用遺留的DataServices實現。 – 2013-02-27 01:00:00

+1

我知道DataServices仍然可用,但我想使用新的庫,因爲它的性能以及未來將會得到更好的支持。我無法弄清楚爲什麼沒有IQueryable的支持。 – davenewza 2013-02-27 09:21:26

相關問題