在阅读Microsoft文档上Azure表存储服务中的查询表和实体时,我发现PartitionKey
和RowKeys
可以在myaccount.Table.core.windows.netURL中以两种不同的方式进行过滤,如下所示:
https://<service-url>/Customers(PartitionKey='MyPartition',RowKey='MyRowKey1')
并用$filter
实现相同:
https://<service-url>/Customers()?$filter=PartitionKey%20eq%20'MyPartitionKey'%20and%20RowKey%20eq%20'MyRowKey1'
我从文档中了解到,PartitionKey
和RowKey
属性正在形成实体的主键,因此可以使用第一个语法以及PartitionKey和RowKey属性的筛选部分状态:
因为PartitionKey和RowKey属性构成实体的主键,所以可以使用特殊语法来标识实体。
问题:
- 使用
$filter
代替前面提到的特殊语法有什么缺点吗 - 我在解决方案中使用哪一个重要吗
如有任何澄清,我们将不胜感激,谢谢!
插入问题!因此,我尝试使用Postman执行这两个操作来获取实体,并且获取数据所需的时间几乎相同(在250毫秒到300毫秒之间(。
所以,只要您使用REST API,我认为这并不重要。
当您使用SDK(例如WindowsAzure.Storage版本9.3.3(时,有不同的方法可以使用这些功能。看看下面的示例代码:
var account = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true);
var tableClient = account.CreateCloudTableClient();
var table = tableClient.GetTableReference("TableName");
//This uses https://account.table.core.windows.net/table(PartitionKey='pk', RowKey='rk')
TableOperation op = TableOperation.Retrieve("pk", "rk");
var entity = table.Execute(op).Result as DynamicTableEntity;
//This uses https://account.table.core.windows.net/table?$filter=PartitionKey eq 'pk' and RowKey eq 'rk'
TableQuery query = new TableQuery();
query.FilterString = "PartitionKey eq 'pk' and RowKey eq 'rk'";
var entity = table.ExecuteQuery(query).FirstOrDefault();