我正在迁移到使用新的存储客户端库进行Azure表存储。
使用以前的 Storage Client Library 1.7 命名空间进行查询:
var orders = serviceContext
.CreateQuery<Order>(tableName)
.AsTableServiceQuery<Order>()
.Where(e => e.PartitionKey == partitionKey && e.RowKey == rowKey)
使用新的 Storage Client Library 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更清洁,使用强类型实体,实现IQueryable接口并利用LINQ的全部功能。版本2.0让我觉得我再次使用ADO.NET数据集。
我完全错过了这里的情节吗?我知道已经有了重大的性能改进,但为什么版本2.0会像API一样降级呢?
答案 0 :(得分:3)
Storage Client Library 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支持目前正在开发中。我们目前没有更具体的时间表细节。
答案 1 :(得分:2)
相关的,现在可以使用包含表服务层的IQueryable(有一些非常好的优化)的2.1 RC。见
http://www.nuget.org/packages/WindowsAzure.Storage
乔