Запрос синтаксиса PartitionKey и RowKey в Azure Служба хранения таблиц - PullRequest
2 голосов
/ 27 февраля 2020

При чтении запросов к таблицам и сущностям в Azure Служба хранения таблиц в документах Microsoft, которые я обнаружил, PartitionKey и RowKeys могут быть отфильтрованы двумя различными способами в myaccount.table.core. windows. net URL-адрес как следующий:

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 образуют первичный ключ сущности, вы можете использовать специальный синтаксис для идентификации сущности.

Вопросы:

  1. Есть ли какие-либо недостатки, недостатки использования $filter вместо того специального синтаксиса, который был упомянут?
  2. Имеет ли значение, какой я использую в своем решении?

Любое уточнение примерно спасибо, спасибо!

1 Ответ

1 голос
/ 27 февраля 2020

Интересный вопрос! Поэтому я попытался выполнить обе операции для извлечения сущности с помощью 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();
...